Technical Debt Portfolio Scorecards: Stop Arguing About Messy Code

· 6 min read

A practical scorecard for prioritising technical debt by interest rate, change frequency, blast radius, remaining life and cost of repair.

A team had a service everyone agreed was terrible. The code was old, the tests were thin and every engineer had a story about it. It stayed at the top of the debt backlog for two years because it looked bad. Meanwhile, a much cleaner service became the source of repeated incidents because every product change touched it.

The lesson is uncomfortable: the messiest code is rarely the most expensive debt.

Technical debt is an economic problem. It has a principal — the effort to fix it — and an interest rate — the recurring cost of carrying it. The interest is paid in slower changes, outages, support load, security exposure and the opportunity cost of engineers working around a system instead of improving it.

A useful prioritisation method should make those costs visible without pretending to be mathematically perfect.

Score the debt, not the aesthetics

A debt item deserves a place in the portfolio only if it can be described as a concrete liability. “Modernise the payments service” is not an item. “Replace the untested tax-calculation path that changes on every country launch and blocks release validation” is.

Score each item on five dimensions.

DimensionWhat you are measuringHigh score means
Interest rateRepeated engineering, operational or customer costThe debt extracts a real recurring penalty
Change frequencyHow often the affected area must changeThe penalty is paid often
Blast radiusConsequence if the component fails or behaves incorrectlyFailure affects revenue, customers, security or multiple teams
Remaining lifeHow long the system is likely to remain relevantA repair has time to earn its return
Repair costEngineering and transition effort required to remove the debtThe principal is large and needs deliberate sequencing

The first four dimensions increase priority. Repair cost should reduce it unless the risk is severe enough to justify a strategic intervention. This stops the habitual failure mode of rewarding large rewrite proposals simply because they are large.

Use four portfolio bands

BandProfileDefault action
Pay nowHigh interest, frequent change, broad blast radiusFund a contained fix in the current planning cycle
ContainHigh risk but expensive or hard to remove immediatelyAdd guardrails, monitoring, ownership and explicit risk acceptance
ScheduleReal cost but a stable boundary and moderate urgencyPlan against a known product or platform milestone
Retire or ignoreLow change, low impact or short remaining lifeAvoid investing; document why

The important category is contain. Teams often believe the only honest response to bad debt is a rewrite. It is not. A legacy component can be wrapped, rate-limited, isolated, observed or removed from the critical path while you decide whether the principal is worth paying.

The portfolio needs a time horizon

Debt that is expensive today can still be a poor investment if the system is leaving next quarter. Debt that looks tolerable can be urgent if it sits under a product roadmap that will multiply the change rate.

Ask one explicit question: what will make this item more expensive or less relevant over the next 12–18 months? The answer is often the thing your scorecard was missing: a regulatory deadline, a market launch, a provider contract, a planned retirement or a platform migration.

Future eventWhat it does to the priority
Product expansion into a new marketRaises change frequency and blast radius
Planned platform retirementReduces remaining life; may shift action to contain
Security or regulatory deadlineRaises blast radius and creates a non-negotiable date
Team expertise leavingRaises operational interest rate
Architecture simplification programmeReduces repair cost if work can be bundled

A score without a horizon is just a prettier backlog.

Make the scoring conversation productive

The goal is not to create false precision. A 3.4 versus a 3.6 score is not a discovery. The value comes from forcing different stakeholders to explain their assumptions.

Engineering usually sees repair cost and code complexity. Product sees change frequency and opportunity cost. Operations sees blast radius and incident load. Finance sees the trade-off against other investments. A scorecard gives those views a common object to argue over.

Keep the evidence field beside every score. If someone assigns a high blast radius, record the service, dependency or contractual consequence that supports it. That is what makes the score revisable when the architecture or roadmap changes.

The failure mode: debt theatre

Debt theatre is a backlog full of alarming labels with no owner, no evidence and no action type. It feels responsible because the problem is documented. It changes nothing because nobody has decided whether to pay, contain, schedule or retire it.

The cure is a portfolio review with a fixed output. Every top item leaves with one of four actions, a named owner and a date. Every item without a decision leaves the top tier.

What to do on Monday morning

Download the technical debt portfolio scorecard. Score five items from different systems, not five variants of the same legacy service. Force every score to include one sentence of evidence and one action band.

Then use the Technical Debt Prioritiser to compare items interactively, and read the Technical Debt Prioritisation insight for the decision framework behind the tool.

The work is not to prove that debt exists. Everyone already knows that. The work is to spend limited engineering attention where the interest rate is actually eating the business alive.