Technical Practices8 min readFebruary 18, 2026

Technical Debt: How to Estimate and Prioritize It

Technical debt is real work that deserves real estimation. Learn how to identify debt types, build the case for prioritizing remediation, and use the 20% rule to keep your codebase healthy without stalling feature delivery.

What Technical Debt Actually Is

The term "technical debt" was coined by Ward Cunningham in 1992 as a metaphor for the cost of shortcuts taken in software development. Like financial debt, technical debt accrues interest: the longer you carry it, the more it costs you, and eventually the interest payments consume so much of your capacity that you struggle to deliver anything new.

But the metaphor is frequently misapplied. Technical debt is not just "bad code" or "code that needs refactoring." Cunningham's original concept was more nuanced. Debt arises when you ship code that works but does not fully reflect your current understanding of the problem. As your understanding improves, the gap between the existing code and the ideal implementation grows — and closing that gap takes work.

Some technical debt is not even bad code. A startup that ships a manually managed deployment process to get to market in three months has taken on deliberate technical debt. The process works. It will need to be automated eventually. The cost of that future automation is the debt. The alternative — spending two months on automation before having a product — might have been the worse decision. Debt is not inherently wrong. Unmanaged debt is what kills products.

Types of Technical Debt

Understanding the type of debt you are dealing with determines how you estimate and prioritize it. Martin Fowler's technical debt quadrant is the most useful framework here.

Deliberate and prudent. "We know this is not ideal, but we need to ship now and will fix it later." The team was aware of the tradeoff, made a conscious decision, and ideally documented the debt they were taking on. This is the most manageable type because you know it exists and you know roughly what fixing it would involve.

Deliberate and reckless. "We don't have time to do this right." The team cut corners knowing it was wrong, without a plan to fix it. This debt accumulates bitterness alongside interest — the team knows it exists, nobody wants to deal with it, and it becomes a persistent drag on morale.

Inadvertent and prudent. "Now that we've built it, we realize we should have used a different approach." This is normal and healthy. The team learned from building the feature and now understands a better way. The code works, but the team now has the knowledge to improve it.

Inadvertent and reckless. The team did not know they were taking on debt, and the debt exists because of lack of skill, knowledge, or attention. This is the hardest type to prioritize because you often do not know how much of it you have until you try to change the affected code.

How to Estimate Debt Remediation Stories

Technical debt remediation work should be estimated exactly like any other work — using story points in planning poker. The common mistake is to treat debt work as somehow different, either by not estimating it at all or by estimating it in hours because "it's just refactoring."

Debt remediation is often harder to estimate than new feature work, for a few reasons. The scope of the change is frequently unclear until you start digging into the code. Dependencies on the affected area are often poorly documented. And the risk of breaking existing behavior is higher because you are modifying tested and working code rather than adding new code in isolation.

Treat debt remediation stories like you would any high-uncertainty story: spike first if needed, size conservatively, and include the cost of testing as part of the estimate. A story to "refactor the authentication module" should explicitly include writing new tests for the refactored code, updating any documentation that references the old implementation, and QA time to verify existing behavior is preserved. If those costs are not in the estimate, they will surface as hidden overtime during the sprint.

The Cost-of-Delay Approach

The strongest argument for prioritizing technical debt is the cost of delay — the value lost by not addressing the debt now, compounded over time. This framing works because it translates engineering concerns into business language that stakeholders can reason about.

Consider a slow database query that adds 300ms to every API response. Today, it is an annoyance. Over time, as data volume grows and user load increases, that 300ms becomes 800ms, then two seconds. At some point, it starts costing you in user abandonment, failed SLA penalties, or engineering time spent constantly tuning around the bottleneck. The cost of fixing it now is one sprint. The cost of not fixing it is an accumulating tax on every developer who touches that code and every user who experiences the slowness.

When framing debt for stakeholders, quantify where possible. If a poorly structured data model forces every new feature to work around it at an extra two days of development effort, and the team ships ten features per quarter, that is twenty developer-days per quarter in unnecessary overhead. Over a year, that is eighty developer-days — roughly a developer working for four months — doing nothing but fighting legacy data structures. The debt remediation cost, by comparison, might be one sprint.

Convincing Stakeholders to Prioritize Debt

The cardinal mistake when making the case for debt remediation is leading with engineering arguments. "The code is messy," "the architecture is hard to extend," and "we are violating SOLID principles" are not arguments that resonate with a product manager who is trying to hit a roadmap. They signal that engineers want to spend time on things that do not ship features.

Lead instead with outcomes. Slow feature delivery — "our average story is taking 40% longer than it did a year ago because of the complexity we've accumulated" — is a business problem. Defect rates — "60% of our bugs last quarter traced back to three modules we know are fragile" — is a risk problem. Infrastructure costs — "our database query volume has tripled because of N+1 queries that we introduced during the initial build" — is a financial problem. Engineering arguments follow; they do not lead.

It also helps to make the debt visible. Create a technical debt backlog. Estimate the remediation cost of each item. Document the ongoing cost in terms the business recognizes. When stakeholders can see a prioritized list of debt items with estimated business impact alongside estimated remediation cost, prioritization becomes a real conversation rather than a negotiation between "features" and "tech stuff."

The 20% Rule

The 20% rule — allocating 20% of every sprint's capacity to technical debt and improvement work — is one of the more practical and defensible approaches to managing debt sustainably. It is not a perfect number. Some teams run 15%, others 30%, depending on their debt load and delivery pressure. But 20% is a useful starting point.

The value of the rule is not the specific percentage but the principle behind it: debt work gets protected sprint capacity rather than being treated as work that happens when the team has spare time. Teams that treat debt work as optional consistently find that there is never spare time. Debt accumulates. The codebase slows down. Feature delivery slows down. Pressure increases. Even less time for debt work. This is the technical debt spiral, and the 20% rule is the cleanest structural way to break it.

Implementing the rule requires buy-in from the product owner, who controls the backlog. The framing that works best: the 20% is not time taken away from features — it is an investment that keeps the team's capacity to deliver features from declining. Without it, the team will eventually need to slow down or take a "debt sprint" that delivers nothing visible for an entire sprint cycle. Regular small investments prevent large emergency investments.

Tracking Debt Over Time

A technical debt register is a simple but powerful tool: a maintained list of known debt items with estimated remediation cost, estimated ongoing cost, affected areas of the codebase, and the decision that created the debt. It does not need to be sophisticated — a spreadsheet or backlog section works fine. What matters is that it exists, it is maintained, and the team reviews it regularly.

Beyond the register, teams can track debt qualitatively through code quality metrics — static analysis scores, test coverage trends, build time trends, deploy frequency — and through team feedback in retrospectives. A team that is consistently raising concerns about code quality in retrospectives but has no mechanism to act on those concerns is a team that will start to disengage. The register and the 20% rule together give the team a credible answer to "what are we doing about it?"

At a higher level, watch for the leading indicators that debt is accumulating faster than you are paying it down: increasing cycle time for similar stories, increasing defect rates, increasing time spent on incidents and hotfixes, and decreasing team morale around code quality conversations. These are the signals that the current allocation to debt work is insufficient and needs to be revisited — not next quarter, but in the next sprint planning session.

Ready to try planning poker?

Start a free estimation session with your distributed team in seconds. No signup required.

Start Planning Poker

Related Articles

SC

ScrumChamps Team

Built by West 10 Tech — practical tools for agile teams.