Technical debt
Encyclopedia
Technical debt are synonymous, neologistic metaphors referring to the eventual consequences of poor software architecture
Software architecture
The software architecture of a system is the set of structures needed to reason about the system, which comprise software elements, relations among them, and properties of both...

 and software development
Software development
Software development is the development of a software product...

 within a codebase
Codebase
The term codebase, or code base, is used in software development to mean the whole collection of source code used to build a particular application or component. Typically, the codebase includes only human-written source code files, and not, e.g., source code files generated by other tools or...

.

Common causes of technical debt include (a combination of):
  • Business pressures, where the business considers getting something released sooner is of more value than avoiding technical debt
  • Lack of process or understanding, where businesses are blind to the concept of technical debt, and make decisions without considering the implications
  • Lack of building loosely coupled components, where functions are hard-coded; when business needs change, the software is inflexible.
  • Lack of documentation, where code is created, but may be difficult or time consuming for anyone other than the author to understand, as functions are not documented


"Interest payments" are both in the necessary local maintenance and the absence of maintenance by other users of the project. Ongoing development in the upstream project can increase the cost of "paying off the debt" in the future.

Best Practice in paying down technical debt is to refactor code as part of ongoing development.
While Manny Lehman
Meir Manny Lehman
Meir M. "Manny" Lehman, FREng was a professor in the School of Computing Science at Middlesex University. From 1972 to 2002 he was a Professor and Head of the Computing Department at Imperial College London...

's Law already indicated that evolving programs continually add to their complexity and deteriorating structure unless work is done to maintain it, Ward Cunningham
Ward Cunningham
Howard G. "Ward" Cunningham is an American computer programmer who developed the first wiki. A pioneer in both design patterns and Extreme Programming, he started programming the software WikiWikiWeb in 1994 and installed it on the website of his software consultancy, Cunningham & Cunningham , on...

 first drew the comparison between technical complexity and debt
Debt
A debt is an obligation owed by one party to a second party, the creditor; usually this refers to assets granted by the creditor to the debtor, but the term can also be used metaphorically to cover moral obligations and other interactions not based on economic value.A debt is created when a...

 in a 1992 experience report:
Shipping first time code is like going into debt. A little debt speeds development so long as it is paid back promptly with a rewrite... The danger occurs when the debt is not repaid. Every minute spent on not-quite-right code counts as interest
Interest
Interest is a fee paid by a borrower of assets to the owner as a form of compensation for the use of the assets. It is most commonly the price paid for the use of borrowed money, or money earned by deposited funds....

 on that debt. Entire engineering organizations can be brought to a stand-still under the debt load of an unconsolidated implementation, object-oriented
Object-oriented programming
Object-oriented programming is a programming paradigm using "objects" – data structures consisting of data fields and methods together with their interactions – to design applications and computer programs. Programming techniques may include features such as data abstraction,...

 or otherwise.


In his influential 2004 text, Refactoring to Patterns, Joshua Kerievsky presents a comparable argument concerning the costs associated with architectural negligence, which he describes as "design debt".

Activities that might be postponed include documentation
Documentation
Documentation is a term used in several different ways. Generally, documentation refers to the process of providing evidence.Modules of Documentation are Helpful...

, writing tests
Test automation
Test automation is the use of software to control the execution of tests, the comparison of actual outcomes to predicted outcomes, the setting up of test preconditions, and other test control and test reporting functions...

, attending to TODO comments and tackling compiler and static code analysis
Static code analysis
Static program analysis is the analysis of computer software that is performed without actually executing programs built from that software In most cases the analysis is performed on some version of the source code and in the other cases some form of the object code...

 warnings. Other instances of technical debt include knowledge that isn't shared around the organization and code that is too confusing to be modified easily.

In open-source software
Open-source software
Open-source software is computer software that is available in source code form: the source code and certain other rights normally reserved for copyright holders are provided under a software license that permits users to study, change, improve and at times also to distribute the software.Open...

, postponing sending local changes to the upstream project is a technical debt.

See also

  • Big ball of mud
    Big ball of mud
    In computer programming, a big ball of mud is a system or computer program that appears to have no distinguishable architecture.-In computer programs:...

  • Bit rot
    Bit rot
    Bit rot, also known as bit decay, data rot, or data decay, is a colloquial computing term used to describe either a gradual decay of storage media or the degradation of a software program over time. The latter use of the term implies that software can wear out or rust like a physical tool...

  • TODO, FIXME, XXX

External links

The source of this article is wikipedia, the free encyclopedia.  The text of this article is licensed under the GFDL.
 
x
OK