On Technical Debt
Robert C. Martin — who is usually wrong about most things — says this in defence of what is supposedly the original motivation for the Agile Manifesto:
You need something that keeps you CLEAN, ’cause you need something that keeps the code from rotting. How many developers do we have in the room? How many of you have been significantly slowed down by bad code … generated by a Scrum team going too fast? When you go fast and you are focusing on getting stories done, and stories done, and stories done, and stories done … the code can ROT just as fast as you are moving. And so what happens after a year is that the rate begins to slow. Not because you’re working less hard – you’re putting in a hell of a lot of effort – it’s just that you can’t force the code to accept the next new feature.
One of the best things you can do for yourself as a software developer is running your own business. I don’t mean a consultancy business where you’re essentially an employee that sends invoices every month. I mean something more like a product business.
When you’re building a business, you don’t know what features are going to bring money in. It is so well-known that we all don’t know what we’re doing that the startup in-joke is to put “pivot” explicitly somewhere on the roadmap.
I will by no means defend Agile as I think that’s mostly bureaucratic and ceremonial nonsense, but the aversion to technical debt is in my opinion the most likely cause of this supposed divide between business and programmers.
Who cares if the feature you implement is beautifully designed and backed by a comprehensive suite of automated tests, if that feature ends up not making any money and is scrapped anyway?
Professional software development doesn’t happen in a vacuum. The code you write is an investment, and you and/or the business should expect to see a return on it. Technical debt is an excellent way to limit potential losses from investing in a feature or system which turns out not to be profitable.
Reader of this blog Emil Oppeln-Bronikowski wrote in with the following:
Programming is story writing about data. As data changes, so does your story. It’s a constant draft. You just need to put your red pen to it from time to time to not get lost.
Debt is not a bad thing. Debt is what allows you to live in your house before you can actually pay for all of it.