Skip to content
DeutschBook an intro call

Explainer · SaaS & software

Technical debt: what it costs and when to pay it down

Definition

Technical debt refers to compromises in design and code that help in the short term but make later changes to the software more expensive or impossible. A company pays the interest as extra effort on every further change. The term comes from Ward Cunningham and mainly concerns maintainability and evolvability.

Key takeaways

  • Technical debt is a compromise in design or code that makes later changes cost more. Interest comes due when someone changes that code.
  • Across 39 codebases, work on low-quality code took 124% longer on average. There’s no single figure that fits every company.
  • Paydown is worth it if the interest saved covers the effort within the remaining service life. Code nobody changes can stay.
  • In our example, a 60-hour paydown pays off in about 16 months at 12 changes a year. At two changes a year, it doesn’t pay off in four years.
  • Tools mainly estimate the cost of paydown. At Google, none of 117 metrics alone predicted where engineers report technical debt.

What is technical debt?

Technical debt is a compromise in design or code that helps in the short term and makes later changes more expensive. As with a loan, you pay interest: every change to the affected code takes longer. Cleaning up that code is paying off the principal.

The metaphor comes from Ward Cunningham. In a 1992 experience report, he wrote that a little debt speeds up development as long as it’s paid back promptly. “Every minute spent on not-quite-right code counts as interest on that debt,” he added (Cunningham, 1992). The term is often shortened to tech debt.

At a research seminar at Schloss Dagstuhl in 2016, the participants agreed on a working definition. Technical debt, they wrote, is a collection of design or implementation constructs that are expedient in the short term and can make future changes more costly or impossible. Under that definition, its impact is limited to a system’s internal qualities, primarily maintainability and evolvability (Dagstuhl Seminar 16162, 2016).

Martin Fowler shows what the math looks like. A new feature takes four days in a clearly structured module and six in a confusing one. The two days’ difference is the interest. Five days of cleanup would be paying off the principal (Fowler, Technical Debt, 2019). Unlike with a bank loan, you only pay this interest when someone changes that code. SaaS products are usually under continuous development, so you often pay it there. Our guide What is SaaS? explains how SaaS works.

Is technical debt always bad?

No. A debt taken on deliberately can be the right call, for example to meet a deadline, if the team plans to pay it back. It becomes risky when nobody records it or when it builds up unnoticed. Debt-free software isn’t a sensible goal.

Martin Fowler sorts technical debt by two questions: Was it taken on deliberately, and was that prudent or reckless (Fowler, Quadrant, 2009)?

  • Deliberate and prudent: The team knows about the compromise and weighs whether an earlier release is worth the later cost.
  • Deliberate and reckless: The team knows good practice but skips it for lack of time. Fowler sees this as a misjudgment in most cases, because clean design speeds up the work.
  • Inadvertent and reckless: The team lacks knowledge of good design. It doesn’t notice how much debt it’s taking on.
  • Inadvertent and prudent: A good team only realizes during the work what the design should have been. According to Fowler, that’s hard to avoid.

According to Google’s Engineering Productivity Research team, taking on debt prudently and deliberately “can be a correct engineering choice.” The same article notes that Cunningham didn’t intend the term as an excuse for bad code (Google, IEEE Software, 2023). At the Dagstuhl seminar, Frank Buschmann of Siemens summed it up this way: the goal is a competitive system, and it doesn’t have to be debt-free.

In a family of surveys with 653 valid responses from six countries, time pressure was the most frequently cited cause of technical debt. The most frequently cited effects were delivery delays, low maintainability and rework (Ramač et al., 2022).

How can you spot technical debt without reading the code?

By its effects on daily work: small changes take longer and longer, promised dates are met less often and only one person still dares to touch certain parts of the software. For small businesses, this starts to matter once a piece of software is under continuous development.

Google asked its engineers to name the causes of their debt and arrived at 10 categories. The ranking depends on the company, but the authors consider the list itself generalizable (Google, IEEE Software, 2023). The table translates all 10 into what you’d notice as the client. The left column is our own interpretation.

Ten categories of technical debt at Google, translated into signs for clients
What you noticeCategories at Google
Small changes keep getting more expensive and estimates less accurateCode quality; code degradation
Changes break other things and releases get postponedTesting; release process
Only one person knows certain parts and new people take a long time to get up to speedTeam lacks necessary expertise; documentation
A version upgrade keeps getting postponed and components cause trouble during updatesMigration needed or in progress; dependencies
The old and new solutions keep running side by sideMigration poorly executed or abandoned
Features stay in the system even though they’ve been replacedDead and/or abandoned code

Small businesses should pay special attention to the third row, because in small teams, knowledge often sits with just a few people. Our how-to Avoiding developer lock-in shows how to check this. If a small internal tool runs reliably and rarely changes, you pay almost no interest and the issue can wait.

What does technical debt cost?

There’s no reliable blanket figure. In a measurement of 39 codebases, work on code in the lowest quality tier took 124% longer on average than work on healthy code. In a study with repeated self-reports, developers put the time lost to technical debt at 23% of their working time on average. These values don’t automatically apply to your software.

The table sorts well-known figures by how they were produced. The numbers in the “Source” column refer to the source list at the end of this article.

Well-known figures on technical debt and what they tell you, as of Nov 2026
FigureType of dataWhat it does and doesn’t tell youSource
124% longer to work on and 15 times more defects in code in the lowest tier than in healthy code; 78% longer in the middle tierMeasurement: 39 codebases, 30,737 files, data from code and issue tracker, 2022A strong correlation; the cause isn’t proven. All systems come from users of the measuring tool, and the lead author works for the tool’s maker.7
23% of working time lost, median 17%; in the replication 29%, median 20%Self-reports: 43 developers at six companies, twice a week for seven weeks, plus 47 developers at one company in Germany, 2019Few participants and wide variation. The authors themselves urge caution.8
10–20% of the budget for new products goes to debt issues; the debt equals 20–40% of the value of the technology estateEstimate by 50 CIOs of large financial and technology companies, July 2020Applies to corporations with more than $1 billion in revenue. The second value refers to the estate; the budget is a different measure.9
13.5 of 41.1 weekly hours spent on technical debtDevelopers’ own estimates, 2018; respondents were more than 1,000 developers and more than 1,000 C-level executives in five countriesRespondents gave their impression; nothing was measured.10
$1.52 trillion in accumulated technical debt in the USEstimate by an industry consortium, 2022An order of magnitude for an entire economy. It tells a single company nothing.11

We haven’t found reliable figures for small businesses. Paying down debt doesn’t work automatically, either. In 10 open-source projects of the Apache Software Foundation, most of 4,166 refactorings, meaning changes to the code that add no new functionality, reduced the measured interest. Across all cases, however, no average effect could be shown (Nikolaidis et al., 2022). At Microsoft, developers saw substantial costs and risks in refactoring (Kim et al., 2014). So it comes down to which area of the code you tackle.

When is paying down technical debt worth it?

It’s worth it when the interest you save repays the effort within the software’s remaining service life. For each area of code, calculate changes per year times extra effort per change, plus the cost of defects. Code nobody changes can stay, as long as it isn’t a security risk.

For prioritizing, what counts is where work actually happens. According to the Dagstuhl report, debt in code that will be extended for the next release weighs more than debt in untouched areas. Fowler also leaves stable code alone. A 2024 study recommends preventing new flaws above all in frequently changed files (Borg et al., 2024).

Use these questions to rate an area of code. We compiled the grid from these sources; the buffer and the thresholds are our own judgment.

Rating grid for technical debt: five values per area of code
QuestionHow to find the value
How often was this area changed in the last 12 months?Review version control and tickets
How much longer does each change take because of the debt?Ask the team how long it would take in a clean area
How many defects trace back to this area, and how long do the fixes take?Review tickets from the last 12 months
How long will the paydown take?The team’s estimate plus a 50% buffer
How much longer will the software be in use?Your business planning

That gives you two values:

  • Interest per year: changes per year times extra effort per change, plus defects per year times effort per defect.
  • Payback period: paydown effort divided by interest per year.
What to decide based on the result, with thresholds in our judgment
ResultDecision
The area will soon be replaced or shut downDon’t pay it down, just record it
Known security vulnerability, end of support or knowledge held by only one personSchedule the paydown, even if the math doesn’t work out
Payback period under half the remaining service lifePay it down and put it on the schedule
Payback period between half and the full remaining service lifeInclude it the next time the area is reworked
Payback period longer than the remaining service lifeLeave it and note it in the list

The section When are version upgrades due? shows when components reach end of support.

What does a paydown calculation look like?

In our example, paying down one area of code is a one-time effort of 60 hours. At 12 changes and four defects a year, it saves 44 hours a year and pays for itself after about 16 months. At two changes and one defect a year, it doesn’t pay off within four years. All values are assumptions; use your own.

When paying down technical debt pays off
When paying down technical debt pays off Worked example with assumed values, not a measurement. The horizontal line shows a one-time paydown of 60 hours. Three rising lines show cumulative interest over 48 months: case A reaches 176 hours, case B 88 hours, case C 32 hours. Case A crosses the paydown line after about 16 months, case B after about 33 months, and case C does not cross it within 48 months. The table and the calculation below give the same values. Cumulative extra hours Assumptions, not a measurement A: 12 changes a year B: 6 changes a year C: 2 changes a year Dot: paydown has paid for itself A 176 h B 88 h Paydown 60 h C 32 h 0 12 24 36 48 Months since the paydown
Worked example with assumed values, not a measurement
CaseChanges and defects per yearInterest per yearPays off afterBalance after four years
A: changed often12 changes, 4 defects44 hours, €5,500about 16 months116 hours gained, €14,500
B: changed occasionally6 changes, 2 defects22 hours, €2,750about 33 months28 hours gained, €3,500
C: changed rarely2 changes, 1 defect8 hours, €1,00090 months28 hours lost, €3,500

Here’s how we calculated it:

  • Paydown: an estimated 40 hours, or 60 hours with the 50% buffer, one-time and up front. At €125 an hour, that’s €7,500.
  • Interest per change: 3 hours, so the work takes 7 hours instead of 4. That’s 75% extra effort; the middle tier in the measurement above came in at 78%.
  • Interest per defect: 2 additional hours.
  • Hourly rate: €125, the median hourly rate without a maintenance package in our survey of software providers based in Germany.
  • Remaining service life: four years.
  • Interest over four years: 176 hours in case A, 88 in case B and 32 in case C, that is, four times the interest per year. These are the values in the chart.
  • Simplifications: constant interest, no discounting and no cost of outages. These aren’t Datafalke prices or quotes.

Applied to the grid, that means: pay down case A, include case B the next time the area is reworked and leave case C alone. As a check, rerun the numbers with a third fewer changes. Case A would then pay off after about 23 months and stay under half the remaining service life. Case B would land at 45 months, only just inside the four years.

How do you pay down technical debt without rewriting everything?

Pay it down in small steps, starting where the interest is highest. Record each debt in a list, lock in current behavior with tests before you rework anything and combine paydown with changes you’ve already planned. A complete rewrite remains the last resort.

  • Keep a list: The arc42 architecture template has its own section for this, with risks and technical debt ordered by priority (arc42, section 11). For each entry, the area, interest, paydown effort, decision and date are enough.
  • Add tests first, then rework: Automated tests capture what the code does today, so you’ll notice if the rework changes anything.
  • Pay down as you go: Rework an area when a change is already due. That’s where you pay the interest.
  • Take on new debt deliberately: A shortcut is fine if it’s on the list and has a date for repayment.
  • Don’t rewrite everything: A complete replacement sounds simple. But Fowler has seen that plan “go down in flames most of the time,” in part because existing behavior is hard to pin down. He recommends replacing a legacy system gradually (Fowler, Strangler Fig, 2024).

Sometimes off-the-shelf software is the better replacement. Our comparison Build or buy software? covers that decision.

How is technical debt different from bugs and legacy systems?

A bug shows up in how the software behaves. Technical debt often stays invisible to users and makes later changes more expensive. A legacy system is old but not necessarily in debt, and young software can carry heavy debt. Maintenance is the ongoing work on the software, and refactoring is one way to pay off the principal.

The numbers in the “Source” column refer to the source list at the end of this article.

Technical debt and related terms
TermMeaningHow it relates to technical debtSource
Bug (defect)The software behaves incorrectly.A matter of behavior. By definition, technical debt affects internal quality. In the measurement above, poor code quality went along with more defects.2, 7
Legacy systemOlder software that’s still in operation.Age alone isn’t debt. According to Google, code in Python 2 only becomes debt once a migration is needed.5
MaintenanceWork on the software after delivery.Paydown can be part of maintenance or run as a separate project. Your contract sets that.–
RefactoringRestructuring code without changing its behavior.The most direct way to pay off the principal. In practice, developers often mean more by it than the strict definition.12, 13

Our cost guide How much does software maintenance cost? covers what maintenance includes and what it costs.

From our work: a deliberate debt on this website

This website has taken on technical debt, too. On November 8, 2026, at 4:27 p.m. German time, we uploaded new pages even though the full browser test for the latest version hadn’t been run. Three parts had changed since the last complete run, and we ran only targeted tests on them. In those tests, 17 of 399 navigation test cases failed, all in Firefox. In 15 of them, the focus indicator wasn’t visible while the menu was held open. Other browsers and pages without an open menu weren’t affected.

The 17 cases were defects in behavior. The debt was the missing full test run, because without it every further change would have been riskier. Testing, including missing tests, is also one of Google’s categories of technical debt. We recorded the state of things and assigned the fix to a separate work package, which was finished that same evening. The full test run then passed with 18,607 browser tests, and the fix went live on November 9, 2026, at 12:40 a.m. The debt lasted just over eight hours.

We didn’t need a calculation using the grid above: the gap was named, narrow in scope and already assigned to a work package. So that debt can’t grow unnoticed, fixed limits apply before every release. For instance, a compressed HTML document may be at most 30,720 bytes. When our guide to technical SEO grew too large, we shortened it.

Frequently asked questions

Can a tool measure technical debt?

Only in part. SonarQube, for example, totals the effort to fix all maintainability issues and sets it against the development cost (Sonar, metrics). That’s an estimate of the principal, and it says nothing about the interest. Google examined 117 metrics for three types of debt, and no single metric predicted where engineers report technical debt. The simple models explained less than 1% of the variance, and combined models missed many affected areas. Use tools as an indicator and ask your team.

How much development time should you set aside for paydown?

We haven’t found a study that supports a fixed quota. Some guides give 20% of development time as a rule of thumb. So plan area by area, using the calculation above, and decide who makes the call. It helps to combine paydown with planned changes, because the area is open anyway.

Does AI-generated code create more technical debt?

One large study suggests it does. In 806 open-source projects, static analysis warnings rose by 30% and code complexity by 41% after an AI code editor was adopted, according to the main estimate. The comparison group was similar projects that didn’t use the tool. Both increases persisted, and the gain in speed was gone after two months (He et al., 2026). The study doesn’t answer whether that also holds with careful review. Code that nobody on the team understands is inadvertent debt: it runs, but the next change gets expensive. Vibe coding, where an AI writes the code and nobody reads it, is one source of such code (Willison, 2025).

What should I ask my software provider?

Ask whether there’s a list of known technical debt and who maintains it. Have them name the five areas with the highest extra effort and what paying them down would cost. Ask which components will reach end of support in the next 12 months and how many people can change the software. If there are no answers, that’s a finding in itself. Our custom software development page describes what we include at sign-off.

Sources

  1. Ward Cunningham: The WyCash Portfolio Management System (Experience Report, OOPSLA ’92). . Accessed .
  2. Schloss Dagstuhl, eds. P. Avgeriou, P. Kruchten, I. Ozkaya, C. Seaman: Managing Technical Debt in Software Engineering (Dagstuhl Seminar 16162), Dagstuhl Reports 6(4). 2016. Accessed .
  3. Martin Fowler: Technical Debt. . Accessed .
  4. Martin Fowler: Technical Debt Quadrant. . Accessed .
  5. Ciera Jaspan, Collin Green (Google): Defining, Measuring, and Managing Technical Debt (IEEE Software 40, issue 3). . Accessed .
  6. Ramač et al., Journal of Systems and Software 184: Prevalence, common causes and effects of technical debt: Results from a family of surveys with the IT industry. 2022. Accessed .
  7. Adam Tornhill, Markus Borg (International Conference on Technical Debt 2022): Code Red: The Business Impact of Code Quality. . Accessed .
  8. Besker, Martini, Bosch, Journal of Systems and Software 156 (Chalmers): Software Developer Productivity Loss Due to Technical Debt. 2019. Accessed .
  9. McKinsey: Tech debt: Reclaiming tech equity. . Accessed .
  10. Stripe: The Developer Coefficient. . Accessed .
  11. Consortium for Information & Software Quality (CISQ): The Cost of Poor Software Quality in the US: A 2022 Report. 2022. Accessed .
  12. Nikolaidis et al. (copy at the University of Macedonia): Using Machine Learning to Guide the Application of Software Refactorings: A Preliminary Exploration. 2022. Accessed .
  13. Kim, Zimmermann, Nagappan (Microsoft Research): An Empirical Study of Refactoring Challenges and Benefits at Microsoft (IEEE Transactions on Software Engineering 40). 2014. Accessed .
  14. Borg, Pruvost, Mones, Tornhill: Increasing, not Diminishing: Investigating the Returns of Highly Maintainable Code. . Accessed .
  15. arc42: 11 - Risks and technical debt. Accessed .
  16. Martin Fowler: Strangler Fig. . Accessed .
  17. Sonar: Understanding measures and metrics (SonarQube Server). Accessed .
  18. He, Miller, Agarwal, Kästner, Vasilescu: Speed at the Cost of Quality: How Cursor AI Increases Short-Term Velocity and Long-Term Complexity in Open-Source Projects (MSR ’26). . Accessed .
  19. Simon Willison: Not all AI-assisted programming is vibe coding (but vibe coding rocks). . Accessed .

Editorial note

Researched and drafted with AI assistance. Mohammad Alboush has not yet checked the sources, figures and claims.

Content not yet reviewed

Changes to this article

DateTypeChange
First publicationArticle published

Spotted a mistake? Email us at kontakt@datafalke.de. We’ll fix it and log the change.

Your next step

What would your MVP cost?

A discovery sprint pins down the core features, architecture and risks; then we quote a fixed price.

Menu

Book an intro callDeutsch