IMHO, there are some benefits to the above! Experimentation and trying new techniques/frameworks is how we learn and progress. The danger arises when the experiments congeal into half-baked production code.
The Lone Developer Problem
151–160 of 180 posts
Re: The Lone Developer Problem
#152In the absence of any organizational division of labor, there is no communication structure which the system is forced by Conway to mimic, so instead other attractors in architectural space dominate - notably the ‘big ball of mud’ which is where code wants to end up unless you continually fight the entropy gradient with frequent refactorings and trimming and cleaning internal boundaries.
Re: The Lone Developer Problem
#153Being the only person able to program in a small team, I know I am the target of the criticism in this post. I think it is mostly true, I wish there were other people looking at my code, but for years I've been working on projects alone. What I came to realize is that there are some kinds of software where quality is paramount, mainly the code that will carry on for years, and require constant changes. But there are…
I feel your pain. I am the main coder, in a small team. There's one server guy (part time), and one semi-technical graphic designer (also part time), a couple of admin/marketing folks (also part time), and me (full, full time).
My software is really good, and I don't need anyone else to tell me it is or isn't.
That said, I am also quite aware that I have to make compromises, and that there are things that I'm not good at.
For example, I'm a higly advanced Swift programmer. I write Swift, every day (like, seven days a week, 52.14 weeks a year). I'm good with UIKit, and reasonably good with the other frameworks.
Server-side, I've been writing PHP for over 20 years, and never really got full mastery of it. I can write some very performant and robust server infrastructure (a lot of it lasts a long time, too), but I don't pretend that some kid couldn't code me into a corner.
But they might have trouble doing that, with Swift.
Doesn't stop them from being real judgmental, though. I suffered from that, myself.
Here's an example of stuff I do, now, that I would have sneered at, just a few years ago[0]:
let distance: CLLocationDistance = CLLocationDistance(rawMeetingObject["distance"] as? Double ?? Double.greatestFiniteMagnitude)
That uses a nil coalescing operator (??). In some cases, I can go through several of them, on one line (cascading nil coalescing operators).That says that I need to get something from the "distance" key of a parsed JSON Dictionary, and, if it is not available (either as a key, or as a value that cannot be coerced into a Double), then I should return the maximum Double value (so it will blow up the distance sorters).
Here's a slightly more involved example (from a proprietary app):
let defaultDict: [String: Any] = [
Keys.useTestServer.rawValue: values[Keys.useTestServer.rawValue] ?? defaults.value(forKey: Keys.useTestServer.rawValue) ?? Self._useTestServerDefault,
Keys.resetPrefs.rawValue: false
]
If there's no default value in either the runtime, or the app defaults, then I use the hardcoded default. The reset is always false, after the first run.That's actually fairly typical advanced Swift. I used to rail against it, but now, I do it all the time. I also tend to use tail closures a lot (that's when you declare a closure at the end of a function parameter list, so you can simply open the closure as a function result). That's also something I used to rail against.
If someone wants to maintain my code, then they need to have some decent chops. Usually, that's me. I will often revisit code that I wrote, six months ago (or more), and have learned how to read it. I write code that I want to see again; not some junior programmer.
[0] https://github.com/LittleGreenViper/LGV_MeetingSDK/blob/e91b...
Re: The Lone Developer Problem
#154Earlier quoted context omitted.
> I would prefer to read someone's mental model of how the code works than the code itself. I find this is often true for me. If there's a bunch of code that I'm having a particularly hard time understanding, it's usually because I don't actually have a working mental model of what the thing is supposed to do. Problem is, with complex systems often the way to record the mental model is something like a design documen…
I think the success of notebooks can provide a positive influence here. They give text and readability a higher priority than traditional source code artifacts, and it really might only take a fresh IDE/plugin and comment meta-syntax to make that more normal in production code as well.
Re: The Lone Developer Problem
#155Re: The Lone Developer Problem
#156In my experience it's more often the other way around. Most projects I've seen with actually readable code and a consistent overall structure have been written (mostly) by a single coder, of course usually with contributions from others, but not real 'team work'. Of course there are also messy projects by single authors, and readable code bases by teams. But in the latter case: the more the responsibilities are sprea…
It can take a while to get used to someone else's conventions, but once you do, the one advantage of a lone developer is that the conventions can be generally consistent. I say "can be" because that has been my experience in many cases, but not all – especially for long lived projects where the conventions evolved as the developer either gained experience or was influenced by other conventions. But, even then, their evolution still has personality to it, that is easy to perceive.
pd: Thinking about it, larger teams with conventions (when they're followed) sometimes achieve a similar consistency to lone developers. So: thank you to all those lone developers that have left their code in a state that has helped me thrive, not fail, :-)
Re: The Lone Developer Problem
#157However, this can be taken too far and contributed to me leaving my last job. I was pushed for review on too many things, in my opinion. It got to the point where it was a waste of time trying to decide anything for myself. I had to invite people from multiple disciplines in the off chance a good idea would surface. Not only did it demoralize the experts, it slowed progress from weeks to months with no appreciable difference in quality. Most meetings were met with little or no feedback because the people involved had no experience in the stack. Most suggestions were to solve the problem within their own area of expertise, the web service guy would always suggest a web service, the DBA would always suggest TSQL, etc.
What I would recommend is develop the ability to recognize when more feedback would be beneficial and schedule a review or meeting for that and act like a working professional and take responsibility when things don't go perfectly. Which suggests the real root of the problem and need for getting feedback all the time...
Re: The Lone Developer Problem
#158The opposite would happen in orgs where one person who happens to be the most technical has the responsibility for all the development
Adding more people decreases the variance. The end result is usually a bland standard which some people may like b/c it hooks into existing mastery.
Re: The Lone Developer Problem
#159In my experience it's more often the other way around. Most projects I've seen with actually readable code and a consistent overall structure have been written (mostly) by a single coder, of course usually with contributions from others, but not real 'team work'. Of course there are also messy projects by single authors, and readable code bases by teams. But in the latter case: the more the responsibilities are sprea…
Completely agree. I think the flaw is that someone believes they turn up to a project and in reviewing code to fit it to a mental model they understand they believe they're improving the readability for others who think like them. In reality it becomes design by committee, worst of all worlds. Slightly tangential, but I'm about to leave a project where it gets the review process badly wrong - anyone can and will comm…
And then there is the special hell of projects written by groups of hurried physicists, zoologists, linguists or other non-IT scientists.
And below that, heirloom university software projects where every generation builds on the previous iteration, without ever cleaning it up.