(I’ve got outliers bookmarked. I will come back to it, really. Now on to my post – I’m not sure where I’m going with this, and I’ve found that that type of expedition is often the most insightful. Please take this with a grain of salt …)
Over the past few years, I have seen this pattern:
1) Developer writes moderately-complex system,
2) Over time, developer moves on
3) and a series of maintenance programmers touch the code,
4) The code changes, sometimes hacks, sometimes decent. These changes tend to each do one specific thing – and sometimes introduce unintended consequences and side-effects.
5) Time passes. 3 and 4 repeat. Eventually …
6) The cumulative effect of these changes is technical debt; the code is brittle and expensive to change. Eventually, every change seems to introduce a problem at least as big as the change.
“How do you get out of the mess” is what a great deal of the tech debt literature suggests. Besides prevention, here are some of the options which haven’t been explored very much:
1) Get acquired by another company that has the same type of system. Migrate to that system.
2) Declare bankruptcy. Stop supporting that business process, do things manually, etc. Sometimes, if this is the main line of the business, it involves actual bankruptcy.
3) Hire a genius. By this I actually mean someone with an IQ in the 140+ range. Sometimes, a “steward” who has stayed with the company for 5+ years and watched the system evolve can do this with an IQ in the 120-130 range.
I’m not sure how I feel abut option three. The problem with the genius programmer is that they really can track far more variables in their head at one time than the typical person – so they can continue to hack, stab, tear apart, and revise the brittle software and succeed at it.
A genius programmer can take a piece of software on it’s last leg and keep it going for a few more years.
I suppose, if you are able to force the programmer to follow the Boy Scout Rule – to make each change over time make the code better – that could be a very good thing. Potentially, that programmer could pull the code out of the rabbit hole.
Next Question: If you are a programmer, should you aspire to be the genius?