Technical Surplus
Much ink has been spilt on the subject of “technical debt,” roughly, the difference between the code that we have now and the code that we would like to write if starting over. For the most part, the idea seems… unproductive? The most common nostrum for technical debt is to create a list of issues categorized as technical debt, with the intention of addressing them sometime in the future. Empirically, the fate of these lists seems to be to grow continuously until they are abandoned. There are some problems with this whole train of thought:
Seeing a better solution to a problem that you can actually implement is a skill; in fact, the fundamental skill of computer programming. It takes a surprising amount of skill and effort to make software which “just works.” When you add something to the list of technical debt you are simultaneously declining to practice this skill and making a type of judgement known to be fragile: “I could do a better job!” If you don’t want to be an armchair quarterback, you need to be throwing the football. This is the crux of what Fred Brooks dubbed “the second system syndrome,” a common pattern in which the team which built the first system decides that all technical debt must now be repaid in a “second system” and the rewrite then fails. Which proved that what they actually had was not some exotic disease, but a common case of the “first system syndrome.” The same people doing the same things will yield the same results.
Unless you are actually gaining skill at producing a technical surplus by producing one right now, there’s no reason to believe that you will be able to reduce technical debt sometime in the future. So, let’s talk about “technical surplus,” that pleasant surprise that you get when some sketchy, edge-case laden expression “just works” or you find that the function that you need has already been written.
Who is going to pay for technical surplus? Nobody! It is a surplus. The market is paying for median quality industrial computer programming, “good enough.” What produces a technical surplus is “best.” In any given month, you can do “good enough” or “best” and collect exactly the same paycheck. A company can’t tell the difference - there’s no metric. However, as an investment in yourself, “best” is dramatically better. Best compounds, 1.04 x 1.02 x 1.01 x... Next week’s best is better than this week’s best. A decade of doing your best will take you surprisingly far. “Good enough” also compounds, 0.83 x 0.72 x 0.92 x... but not in a nice way. A decade of good enough is a recipe for burn-out: feeling that you are somehow accomplishing 20% of what you are capable of while watching that aspiration become less and less plausible with every passing day. The older you get, the more prominent the interview question: “Tell me about a technical accomplishment that you are proud of?”
If “good enough” is what a company can discern, no alarm bells are going to ring if you happen to hand in “best,” right? There’s a wonderful story about this from Amar Bose. The whole farewell lecture is worth listening to, but the ten minutes following the link bear exactly on this question. The philosophical underpinning here is stoicism. With the freedom to act that you do have, what are you going to do? What if you took an extra 20% of your time and spent it on “best?” Nobody has to give you 20% time. No employer does everything twice so they can fire the slow guy.
Recommended by LinkedIn
Suppose you debug a problem and arrive at a change like this as the fix:
123c123
< Foo(..., true);
---
> Foo(..., false);
Fantastic! Unit test. Commit. Deploy. Mark the Jira as “fixed.” Done! Well, that is “good enough.” What does “best” look like? Here are some thoughts to explore:
If this reads as “do a mini post-mortem” for every change, that is exactly the intent. It is difficult to improve your own code without some external stimulus. Everyone tends to debug the compiler rather than the code that they just checked in. However, once you’re in the mode of fixing a problem it is relatively easy to exploit the crisis for improvements to the surrounding code. “The Errors of TEX” is an early example of one of the greats creating technical surplus.
While there are a lot of happy old stoics, everyone does need to get paid. While it is the case that companies can’t distinguish between good enough and best, they do seem to be able to tell the difference between people who have been doing their best for ten years and those that have been doing good enough. And, other people can certainly tell the difference. Best inspires and attracts both followers and mentors.
I remember a comment you (Scott Meyer) made a while ago..."When is the best time to fix technical debt? Answer is "Now, because you won't have time later." Also the article reminds me of a situation I had a while back and wrote up here: https://www.garudax.id/pulse/support-traps-cautionary-tale-infrastructure-engineers-joel-young/