The reality of long-term software maintenance from the maintainer's perspective
construct.net
construct.net
In today's world it is in some ways getting worse: You have older applications that are still bringing in money, built on a patchwork of outdated platforms, that e.g. Microsoft no longer supports or offer migration paths away from, apart from a full rewrite.. And unpatched security holes in the older software removes your option of 'just stay'.
I find it painful to explain to business that yes, their 5-6 year old 'greenfield' product now consists almost entirely of parts that no longer offer migration paths or maintenance :-/.
However, I think the industry might be slowly moving against people who've never stayed at positions for a while and don't have this maintenance experience.
I don't think this is justified, as (since the article correctly describes) over time maintenance becomes much more important than the initial feature creation. But at the moment this is the world we live in and people adjust their behavior accordingly.
Sorry, but that part is wrong. The business gets rewarded for doing the same thing that was already working again and again and again.
Nobody goes out of their way to buy innovative things. It's even worse, customers tend to avoid new things until they had enough time to show themselves as "not new anymore" or "more of the same". There are incredibly few exceptions, and most of them are created artificially at the cost of a large publicity budget.
(When talking about ”rewriting code” I think of a larger scale than for example three lines of code)
Tests are great in theory said my manager, but if the new doesn't want to write them, why are you making such a fuss. Fast forward three weeks and new guy is gone.
Since I did not enter the industry with a computer science degree, I was relegated to less desirable maintenance work for the majority of my career. I have twenty five years of experience reading other people's sometimes great, frequently benign, and occasionally really bad code.
Unfortunately, most of my experience is wasted and not well respected. Most people do not care to look far ahead, they are far too consumed with 'just getting it up and running'. It's all engineering in the end. The house building analogy holds. Make smart tradeoffs. Don't paint yourself into a corner. Build exits for yourself: from platforms, APIs, libraries, and seldom trodden code paths. If you can write it yourself and it's not that complicated, write it yourself. Dependencies are a nightmare from a security and long term use perspective. They might be good for starting out, but you really have no idea where your project and organization will take you.
If I were a hiring manager I would value this experience more than anything else. It's nice if you can bang out some algorithms, but I think it's much more useful for most organizations if you can make forward-thinking engineering decisions.
There's a fairly good chance the reason someone wrote that 10k line PR is because they actually understand the problem users are having, and you don't as a maintainer.
I'd argue the maintainers interests are the only ones that matter and the freedom of open source is that if you as a user don't like what's going on just fork.
I love this article and agree with almost all of it. However, this portion I find to be guilty of elitist programming mantra.
The bottom line is when you’re dealing with large code bases, there will be different coding styles present and the likelihood of everyone agreeing on a single coding style is virtually nil. Insistence on coding purity is an issue that can erode camaraderie in a team and develop into petty political in-fighting. Handling this problem in a tactful way is one of the keys to success in large code bases, as developers have their own styles and draconian insistence upon a single style can limit the talent that’s willing to work with you and your team.
I worked with a guy who insisted in writing his C code in expect style because it was fun. Probably not the greatest choice for long-term maintenance.
I think your point holds if it was in fact the latter, but with the lengths the author goes to to stress the important of diplomatic language elsewhere in the article, I think they were just being polite to their former contractors here.
This one is so obvious and yet boy do a lot of people suffer from not having realized it yet!
That will surely make things better right?
Over a decade ago, I had a job where we were juggling several projects and needed to track our work in 15 minute intervals. The timesheets were mildly annoying but they did allow us to determine that number empirically.
We came up with an average ~20%. Remarkably little variation across projects too.
The implications to estimation should be obvious - any software planning process that resembles a feature factory and only estimates 20% of the work is systematically neglecting the remaining 80% - things like fixing bugs, performance optimization, backup drills, dealing with dependencies, code review, CI/CD/Release process, QA testing, docs, UX testing, training, technical communication, etc. Multiplying the initial estimate by 5x is not just some cheeky heuristic to pad estimates, it's damn near proven by empirical evidence IMO.
Constantly shoving more and more features into software systems without doing any of the engineering work to support it leads to bad outcomes. Who could have guessed /s
Again, the obvious implication is that if your project is a failure, you sink less time into maintaining it. The only way to reduce the maintenance burden is to not have users. There is some not-so-subtle self-sabotage going on here.
It's difficult to figure out causality in these cases. Did the project fail because of inadequate investment in engineering foundations? Or did we deprioritize work on it because we knew it wasn't going to take off? Likely both, working in a negative feedback loop.
Perhaps because the project requirements were not known or kept changing?
I'm reminded of the quip about "Why spend an hour in a meeting when you can spend weeks writing code to avoid it?"
It's super easy to run a web service if it doesn't have any users :-)