Technical debt
The term was coined by Ward Cunningham in 1992 based on an analogy with financial credit: just as a loan provides short-term liquidity at the cost of future interest, incomplete or deficient technical solutions provide an immediate benefit (delivering sooner) but generate a growing cost that sooner or later must be faced.
Why it arises
Technical debt is not always the product of carelessness. It can arise from conscious, justified decisions:
- The need to deliver before a critical deadline, accepting that the code will have to be improved later.
- Lack of knowledge at the time of implementation: what was the best available solution then is no longer so after learning more.
- Changes in requirements that make well-written code no longer suitable.
- External pressure that sacrifices technical quality for perceived velocity.
What turns technical debt into a problem is not that it exists, but that it goes unmanaged.
Common Manifestations
- Sparse, incomplete, or outdated documentation.
- Known, unresolved bugs.
- Missing or poor version control.
- Non-scalable architecture.
- Inflexibility when upgrading to new technologies or platforms.
- Insufficient or poor-quality tests.
- Duplicated or unrefactored code.
Classification
Technical debt can be classified along two dimensions:
- Deliberate vs. inadvertent: whether the team is aware of the debt at the moment it is incurred or does not discover it until later.
- Prudent vs. reckless: whether a cost-benefit analysis was carried out before accepting it or it was taken on without any evaluation.
Deliberate and prudent debt is manageable: the team knows it exists, knows why, and can plan when to address it. Inadvertent and reckless debt is the most dangerous because it remains invisible until it causes problems.
The Technical Debt Log
A common tool for managing known technical debt is the technical debt log: a list that records known debts along with their context and the date they were detected. A widespread option is to use the task lists in development environments, which automatically scan the code for tags such as:
- FIXME: code that fails or may fail under certain circumstances.
- TODO: improvements to be made in the future.
- NOTE: undocumented internal workings or difficulties.
- XXX / KLUDGE / HACK: inefficient or inelegant code that works but is not properly solved.
Including the date in the comment makes tracking easier. With this information, the team can decide when the time has come to halt progress on new features in order to pay off the accumulated debt.
Technical Debt and Generative AI
The mass adoption of code generation tools is creating a new vector of technical debt that teams must learn to manage:
Vibe coding—writing code conversationally with an AI assistant until it "works"—is extraordinarily productive for prototypes and simple features. The problem is that it generates technical debt at an unprecedented rate: the resulting code tends to be poorly modular, full of duplication, lacking test coverage, and hard to maintain.
A METR study published in July 2025 with 16 experienced developers found that when they used AI tools on their own code repositories, they took 19% longer to complete their tasks, even though they believed they had been 20% faster. The perceived gain did not match the measured reality.
AI generates code fast. Refactoring, testing, and peer review remain human responsibilities. Without them, technical debt grows exponentially, not linearly: the more code generated without review, the harder and costlier each new change becomes. The reinforced DoD for teams working with AI exists precisely to contain this risk.
Common mistake
Treating technical debt as something that "will get fixed when there's time." The time to fix technical debt never comes unless it is planned: there are always new features competing for the team's capacity. Unpaid debt accrues growing interest that progressively reduces the team's velocity. The recommended practice is to reserve a portion of each sprint's capacity for paying down technical debt before it becomes unmanageable.
See also
Want to advance in agility? You can search for course and exam calls or go at your own pace by becoming a member of the Agile Club. This membership includes exclusive resources, e-learning classrooms, and access to Skill Arena: a space to practice and measure your agile skills at your own pace.