Technical debt

From Wikipedia, the free encyclopedia

Technical debt is a term coined by Ward Cunningham to describe a situation where the architecture of a large software system is designed and developed too hastily. The analogy to financial debt is that the poorly-written code requires "interest payments" of maintenance effort, which would be smaller or non-existent had the code been developed more carefully and with better long-term planning. Rearchitecting and rewriting the code to be more maintainable is analogous to paying off the debt principal.

Things that might be postponed include documentation, writing tests, attending to TODO comments and tackling compiler and static code analysis warnings. Other instances of technical debt include knowledge that isn't shared around the organization and code that is too confusing to be easily modified.

In open-source software, postponing sending local changes to the upstream project is a technical debt. "Interest payments" are both in the necessary local maintenance and the absence of maintenance by other users of the upstream project. Ongoing development in the upstream project can increase the cost of "paying off the debt" in the future.

[edit] See also