← Back to Resources

Quantifying Technical Debt: Beyond the Vibes

Quantifying technical debt: business impact on one side of the scale, tangled technical debt on the other, connected by a tech debt calculator

Everyone knows they have technical debt. Almost nobody knows how much it's actually costing them. "We have a lot of tech debt" is not a business case. Here's how to put a number on it.

"Tech debt" might be the most overused phrase in software engineering. It gets applied to everything from a poorly named variable to an entire architecture that needs replacing. When a term means everything, it means nothing. And when engineering tells leadership "we have significant tech debt," what leadership hears is "we need more time and more money" with zero specifics attached.

That's not a conversation. That's a standoff.

The language problem

Engineering teams talk about tech debt in engineering terms. Complexity scores. Code smells. Coupling. These are real things. They matter. But they don't translate to business decisions.

Nobody in a board room has ever approved a budget because of cyclomatic complexity. They approve budgets because of cost, risk, and opportunity. If you can't connect your tech debt to those three things, you don't have a business case. You have a complaint.

Not all debt is equal

Here's what most teams get wrong: they treat tech debt as a single category. It's not. Debt in a module nobody touches is fundamentally different from debt in code your team modifies every sprint.

Think of it this way. You have a messy closet in a guest room nobody uses. Annoying? Sure. Costly? No. Now you have a messy kitchen you cook in three times a day. That mess costs you time every single day.

Code works the same way. The question isn't "is this code messy?" The question is "is this code messy AND does anyone have to work in it regularly?"

Change-driven prioritization

The areas that actually cost you money share two properties: they're complex AND they're frequently modified. High churn plus high complexity. That's the code that slows your team down. That's where maintenance costs concentrate. Everything else is noise.

A module with a complexity score of 90 that hasn't been touched in two years? Leave it alone. A module with a complexity score of 40 that gets modified every week? That's your problem.

How to actually measure it

You need four things:

None of this requires opinions. It's all in the codebase. The data is sitting there. Most teams just never look.

Translating to business language

Here's where most technical assessments fail. They stop at the metrics. A report that says "Module X has high cyclomatic complexity" is useless to a CEO.

Instead: "Module X costs 3 engineering weeks per quarter in maintenance and carries a bus factor of 1. One person understands it. If they leave, estimated recovery time is 4-6 months."

Now you have a business conversation. Cost. Risk. Timeline. That's language leadership can act on.

The three categories

Active debt — costing you right now. High churn, high complexity. Every sprint, your team spends time navigating around it. This is the debt that shows up in slow velocity and missed deadlines.

Dormant debt — exists but stable. Nobody touches it. It works. It's ugly, but it's not costing you anything today. Leave it alone until it becomes active.

Structural debt — needs architectural change. The system was designed for a different scale or a different product. No amount of cleanup fixes this. It requires deliberate investment.

The Cost of Waiting analysis

Not all debt compounds. Some does. Some stays flat. Knowing the difference changes everything about how you prioritize.

Active debt in a growing codebase compounds. More features means more changes to that messy module. The cost per quarter goes up, not stays flat. Waiting makes it worse.

Dormant debt in a stable module stays dormant. Waiting costs nothing. The module works. Nobody touches it. Spending money to fix it is spending money to feel better, not to solve a problem.

Structural debt is the tricky one. It stays flat until it doesn't. Then it becomes a cliff. The system works until it can't handle the load, the new requirement, the integration. And then you're not refactoring. You're rebuilding under pressure.

The zombie problem

There's a category of debt nobody talks about: features that shipped but were never adopted. Ghost features. Zombie code.

Every codebase has them. A feature someone built for a client that churned. A module for a product direction that got abandoned. An integration nobody uses anymore. This code still exists. It still gets compiled. It still gets tested. Sometimes it still gets maintained.

This is money on the table. Not because fixing it is valuable, but because removing it is. Every line of code you maintain that delivers zero value is pure cost. Find it. Measure it. Kill it.

How to find zombies

Usage analytics tell you what customers actually use. Feature flags tell you what's active. Cross-reference the two against your codebase. The gap between "code that exists" and "code that serves users" is your zombie population.

We've seen teams maintaining 20-30% more code than they need. That's not a rounding error. That's a quarter of your engineering capacity going to things nobody cares about.

"The most expensive code in your system isn't the code that's broken. It's the code that works perfectly but serves no one."

Making it actionable

You don't fix all tech debt. You fix the tech debt that's costing you the most relative to the cost of fixing it. That's it. That's the whole framework.

Map your hotspots. Categorize them as active, dormant, or structural. Estimate the ongoing cost of each. Estimate the fix cost. Prioritize by ROI. Present it in business terms.

This isn't a six-month initiative. The analysis takes weeks. The prioritization takes days. And then you have something leadership can actually decide on — not a vague request for "time to pay down tech debt," but a specific investment case with expected returns.

That's the difference between engineering asking for trust and engineering earning it.

Need an independent view?

We help boards and leadership teams understand what's actually true about their technology.

Schedule a Call