‘Technical debt’ has become shorthand for ‘code I don't like written by someone who isn't here to defend themselves.’ That's not useful. Worse, it's expensive — because once a phrase means everything, it stops helping you decide anything. Let's be more precise.
Debt is a financial instrument
Real debt — the kind with interest rates and stern letters — isn't inherently bad. Mortgages buy houses. Loans fund hiring. Technical debt works the same way: you're borrowing against future development time to ship something now. The question is never ‘do we have debt?’ — you always do. The question is whether you took it on deliberately, at a rate you can afford, with a plan to pay it down.
Good debt is deliberate
You know the shortcut, you've estimated the interest, and you wrote it in a ticket — not a TODO that outlives you.
Bad debt is accidental
Nobody decided to take it on. It accreted, one ‘we'll fix it later’ at a time, until later became never.
Read the interest rate, not the balance
The size of a debt matters far less than its rate. A gnarly, ugly module that nobody touches costs you nothing — it's a paid-off loan sitting quietly in the corner. Meanwhile a small, ‘clean-looking’ abstraction that every new feature has to fight through is bleeding you on every sprint. Measure debt by how often you pay interest on it, not by how much it offends you to look at.
- High interest: code on the critical path of most changes — auth, the data layer, the deploy pipeline.
- Low interest: leaf code, run once a quarter, touched by nobody. Leave it alone.
- Compounding: debt that makes the next change harder, which makes the next one harder still. Pay this first.
Pay high-interest debt first — the thing that slows down every feature, not the thing that offends your aesthetic sensibilities.
Make it a line item, not a confession
The reason tech debt never gets paid down is that it lives in engineers' heads as guilt rather than on the roadmap as work. Put it where money decisions are made. ‘This shortcut saves three weeks now and costs us roughly a day per feature until Q3’ is a sentence a CFO can act on. ‘The code is bad’ is not.
Budget 20% of each sprint, consistently. It beats one heroic ‘tech debt sprint’ a quarter that gets cancelled the moment a deadline appears.