Product management glosary

Technical Debt

What is Technical Debt?

Technical debt is a metaphorical term used in software development that refers to the cost of maintaining and fixing code that was written quickly and without proper attention to quality. It is a concept that describes the consequences of taking shortcuts in the development process, such as skipping tests, not refactoring code, or not following best practices.

Origins of Technical Debt

The term "technical debt" was first coined by Ward Cunningham in 1992. Cunningham, a software developer and one of the creators of the Agile Manifesto, used the term to describe the trade-offs that developers make when they choose to write code quickly rather than taking the time to do it right. He likened the process to taking out a loan, where the interest paid is the cost of maintaining and fixing the code over time.

Types of Technical Debt

There are two main types of technical debt: intentional and unintentional. Intentional technical debt is incurred when developers make a conscious decision to take shortcuts in order to meet a deadline or deliver a feature quickly. Unintentional technical debt, on the other hand, is the result of poor coding practices, lack of documentation, or insufficient testing.

Impact of Technical Debt

Technical debt can have a significant impact on the quality and maintainability of software. It can lead to bugs, crashes, and performance issues, as well as increased development time and costs. In addition, technical debt can make it difficult to add new features or make changes to existing ones, as the codebase becomes more complex and difficult to understand.

Managing Technical Debt

Managing technical debt requires a proactive approach that involves identifying and prioritizing areas of the codebase that need improvement. This can be done through code reviews, automated testing, and refactoring. It is also important to establish coding standards and best practices, and to ensure that developers have the time and resources they need to write quality code.


Technical debt is a common challenge in software development, but it can be managed with the right approach. By prioritizing quality and taking a proactive approach to code maintenance, developers can minimize the impact of technical debt and ensure that their software remains reliable and maintainable over time.