Ross Fenning's Digital Garden

Technical Debt

Technical Debt is a very broad term, mostly used by engineers to refer to anything they'd like to change at some point.

Definition

I prefer an interpretation closer to the original "debt" metaphor it leverages:

Technical debt, like financial debt, is any liability in your project that costs you over time and would incur costs in "paying it off"

This includes bad design, bad builds, bad docs, bugs and a whole lot more, but crucially only things that actual have a cost. With this definition, we get to make the same trade-off decisions we would with financial debt:

Then we also get to factor in just how much it will take to clear these different scales of debt. We also get to consider when we need to call "bankruptcy" and start again.

Note that large companies happily take on huge amounts of financial debt as a matter of course if it's helping leverage more returns elsewhere. This is a key insight engineers may want to consider since it can be tempting to try to fix everything eventually, but we may wish to borrow this idea from finance that perpetually living with debt in business can be normal and not an aberration.

Classification

There are two different categorisations I have found that I like for reasoning about technical debt (and therefore treating different categories differently):