Home / Blog / Technical Debt Has an Interest Rate, Here Is How to Calculate It
Engineering

Technical Debt Has an Interest Rate, Here Is How to Calculate It

Technical debt is not a one-time bill. It is a loan that charges interest on every change made near it, for as long as it stays unpaid. This piece gives you one formula for that interest rate, a worked example, and a rule for when paying it down actually beats letting it ride.

Every engineering team has heard "technical debt" used as a scolding word, a vague gesture at code nobody likes. That framing makes it easy to defer and easy to dismiss, because a feeling is not a number and nobody budgets around a feeling. The loan metaphor is usually left half-finished. A loan has a principal, the amount you actually borrowed, and it has an interest rate, the recurring cost of leaving that principal unpaid. Technical debt has both too, and the interest rate is the part that actually tells you whether to act.

The principal is the shortcut itself: the quick patch instead of the real fix, the schema that should have had a migration path, the module copy-pasted instead of shared. The interest is what that shortcut costs every single time a future change has to go near it. Whether the team doing that future change is in-house or follows a documented custom software development process at YuSMP, the same rule applies: a shortcut you never have to touch again is nearly free, and a shortcut that sits in the path of every release is expensive in a way that compounds.

What "Interest Rate" Actually Means for Technical Debt

Keep the distinction simple. Principal is the one-time cost of the shortcut, usually already paid, already shipped, already sunk. Interest is the recurring tax: the extra hours every subsequent change through that code has to spend working around it, re-learning it, or routing past it. You cannot un-spend the principal. You can stop paying the interest, and that is the only decision actually in front of you.

You do not pay for technical debt once. You pay for it every time code near it has to change.

This is why "just fix it eventually" is not a plan. Eventually is not a date, and interest does not wait for a date. It accrues on a schedule set by how often the business ships changes near the debt, not by how often the team feels like dealing with it.

The Technical Debt Interest Rate Formula

Skip the catalogs of a dozen different debt metrics. One formula is enough to make a real decision:

Interest rate = extra hours per task caused by the debt ÷ baseline hours per task without it

In plain terms: how much longer does an average change near this code take than it should, expressed as a percentage. It is deliberately a ratio of time, not a currency figure, because time is what engineering teams can actually estimate with a straight face, and currency can be derived from it later with a loaded hourly rate if a CFO wants a dollar figure.

Worked example: a feature that should take two engineer-days, based on how similar features go elsewhere in the codebase, actually takes three because it has to route around a shortcut taken in that module. That is one extra day on a two-day baseline, a 50% interest rate on that specific piece of code. Run the same feature through a clean module elsewhere in the same codebase and the rate drops to near zero, because there is no shortcut there to route around.

Why the Same Shortcut Can Have a 0% Rate in One Module and 200% in Another

The formula above is not a property of the shortcut. It is a property of the shortcut multiplied by how often code walks past it. The exact same corner cut, the same messy function, the same missing abstraction, can sit at a 0% interest rate in a module nobody has touched in a year and a 200% rate in a module that every new feature has to pass through. Location inside the codebase matters more than the severity of the original shortcut.

This is the detail that flat "debt inventory" lists miss when they just count instances of bad code. Two teams can have the identical count of known shortcuts and wildly different actual cost, because one team's shortcuts sit in dead code paths and the other team's sit directly in the critical path every release has to cross.

How Do You Know When to Pay It Down vs. Let It Ride?

This is the decision competitors usually bury inside a long prioritization framework or skip outright. It does not need to be complicated. Pay down the debt when the interest rate on a frequently-touched module is higher than the amortized cost of the fix spread over the remaining life of that code. Let it ride when the code is stable, rarely touched, or already scheduled for replacement regardless of what you do to it now.

Picture a payments module that gets a change almost every sprint and is carrying a shortcut that adds roughly a day to every two-day task running through it. Fixing it properly costs two weeks of engineering time. At even a modest clip of changes landing there over the next year, that two-week fix pays for itself well before the year is out, and every month of delay is a month of paying the 50% rate again. Compare that to a reporting script nobody has opened in eight months, carrying an equally ugly shortcut: the fix would cost the same two weeks, but nothing is scheduled to touch that code again soon, so the honest answer is to let it ride and revisit the decision if that changes.

Putting a Number on It for Your Roadmap

The payoff of doing this math is that it turns "the codebase feels messy" into a sentence a CFO can act on: this module is costing us roughly 50% extra engineering time on every change that touches it, and we touch it eighteen times a quarter, so a two-week fix pays for itself in six weeks. That sentence competes for budget the way any other line item does, instead of losing every time to a feature with a clearer, if smaller, return.

It also keeps engineering honest in the other direction. Not every piece of ugly code deserves a sprint. If nobody can name a module it will slow down next quarter, the honest number is close to 0%, and the right call is to leave it alone and spend the time elsewhere.

Frequently Asked Questions

What is technical debt interest rate?

It is the extra time a typical change near a piece of debt-carrying code takes compared to a clean baseline, expressed as a percentage. A 50% interest rate means tasks through that code take roughly half again as long as they should.

How is technical debt interest rate different from technical debt ratio?

Technical debt ratio typically compares the estimated cost to fully remediate a codebase against the cost of building it from scratch, a static, whole-codebase snapshot. Interest rate is narrower and more actionable: it measures the ongoing cost of one specific piece of debt, every time code near it changes, which is what actually drives a pay-down decision.

Can technical debt interest rate be negative or zero?

It is effectively zero when a shortcut sits in code nobody touches again, since there is no recurring tax to pay. It cannot go meaningfully negative, since a shortcut by definition cannot make future changes faster than a clean baseline would.

How often should you recalculate it?

Whenever the usage pattern of the module changes, not on a fixed calendar. A module that moves from rarely touched to frequently touched, because a new feature now depends on it, needs its rate re-estimated at that point, since the rate is a function of traffic through the code, not just the code itself.

Does paying down technical debt ever have a 0% ROI?

Yes, specifically on code with a 0% interest rate. Fixing a shortcut that nothing currently touches and nothing is scheduled to touch returns nothing measurable, which is exactly why the formula exists: to stop teams from spending fix time on debt that is not actually costing anyone anything right now.

Who should own tracking this — engineering or the business side?

Engineering should produce the number, since only the team doing the work can estimate baseline versus actual task time credibly. The business side should own the pay-down decision once that number exists, because it is ultimately a budget tradeoff against every other line item competing for the same engineering time.

A loan you never pay down does not sit still. It compounds, quietly, every time you have to go back to the lender. Technical debt behaves the same way: the shortcut itself was a one-time cost, but the interest shows up in every change that has to work around it, for as long as it stays on the books. Calculate the rate, and it stops being a vague unease about code quality and becomes a line item you can actually choose to pay off or carry.

Have a system that has to last?