What technical debt interest actually looks like
Debt is not ugly code; it is the extra cost every future change pays. The test is measurable: files touched per edit, test runtime, places that must change together.
Treat technical debt as a moral issue and you will never reach a conclusion. It is an economic one: you borrowed, and every future operation pays interest.
Interest is quantifiable
| Symptom | Measurable signal |
|---|---|
| One change touches many files | files per edit |
| Nobody dares to change it | is there a test that proves you did not break it |
| A new field means five edits | how many places define the same concept |
| Builds keep getting slower | seconds from edit to visible result |
| New hires take forever | days from clone to first merged fix |
Translate the symptom into a number and the debt stops being an opinion.
Principal versus interest
- Principal: the one-time cost of rewriting that part
- Interest: the extra time every change pays, forever
Deciding whether to repay means comparing principal against the sum of future interest.
refactor cost: 3 days
extra per new field: 2 hours
fields still to come: 20 -> 40 hours ~ 5 days
verdict: refactor now
If that module will not be touched for three months, the interest is zero and it should not be repaid. The danger is not debt existing; it is debt piling up in high-interest areas.
Where the high interest lives
- Core types everyone depends on: one change ripples site-wide
- Manual steps on every release: skip one and things break
- Startup scripts nobody dares touch: undebuggable when they fail
- Critical paths with no tests: changes are pure luck
The first two compound: you pay every time, and the price grows with scale.
Deliberate borrowing is fine
“Ship it now, clean up next week” is a legitimate decision, as long as it is written down:
TODO(debt): payment callback is synchronous; timeouts drop orders.
Impact: orders can be lost at peak.
Repay: move to an async queue, about 1 day.
Deadline: within two weeks of launch.
The deadline is the point. A TODO without one is permanent debt, and nobody will remember it was once a tradeoff — later readers just see nonsense.
Do not call ugliness debt
Awkward names, a slightly long function, sparse comments: if these do not raise the cost of future changes, they are style, not debt. Calling them debt buries the real debt.
There is one test: how much extra does it make you pay on the next change? Only the part you cannot afford deserves repayment.

Comments
…