Design Debt
   HOME

TheInfoList



OR:

In
software development Software development is the process of designing and Implementation, implementing a software solution to Computer user satisfaction, satisfy a User (computing), user. The process is more encompassing than Computer programming, programming, wri ...
and other
information technology Information technology (IT) is a set of related fields within information and communications technology (ICT), that encompass computer systems, software, programming languages, data processing, data and information processing, and storage. Inf ...
fields, technical debt (also known as design debt or code debt) refers to the implied cost of additional work in the future resulting from choosing an expedient solution over a more robust one. While technical debt can accelerate development in the short term, it may increase future costs and complexity if left unresolved. Analogous to monetary debt, technical debt can accumulate "
interest In finance and economics, interest is payment from a debtor or deposit-taking financial institution to a lender or depositor of an amount above repayment of the principal sum (that is, the amount borrowed), at a particular rate. It is distinct f ...
" over time, making future changes more difficult and costly. Properly managing this debt is essential for maintaining software quality and long-term sustainability. In some cases, taking on technical debt can be a strategic choice to meet immediate goals, such as delivering a
proof-of-concept A proof of concept (POC or PoC), also known as proof of principle, is an inchoate realization of a certain idea or method in order to demonstrate its feasibility or viability. A proof of concept is usually small and may or may not be complete ...
or a quick release. However, failure to prioritize and address the debt can result in reduced
maintainability Maintainability is the ease of maintaining or providing maintenance for a functioning product or service. Depending on the field, it can have slightly different meanings. Usage in different fields Engineering In engineering, maintainability ...
, increased development costs, and risks to production systems. Technical debt encompasses various design and implementation decisions that may optimize for the short term at the expense of future adaptability and maintainability. It has been defined as "a collection of design or implementation constructs that make future changes more costly or impossible," primarily impacting internal system qualities such as maintainability and evolvability.


Origin of the concept

The concept of “technical debt” was first coined by
Ward Cunningham Howard G. Cunningham (born May 26, 1949) is an American computer programmer who developed the first wiki Excerpt from 2014 book '' The Innovators''. and was a co-author of the '' Manifesto for Agile Software Development''. Called a pioneer, and ...
in 1992. After reading Metaphors We Live By, Ward devised this "
debt Debt is an obligation that requires one party, the debtor, to pay money Loan, borrowed or otherwise withheld from another party, the creditor. Debt may be owed by a sovereign state or country, local government, company, or an individual. Co ...
metaphor" to explain to his
boss Boss may refer to: Occupations * Supervisor, often referred to as boss * Air boss, more formally, air officer, the person in charge of aircraft operations on an aircraft carrier * Crime boss, the head of a criminal organization * Fire boss, ...
the need to refactor the financial product they were working on. He wrote that: Similar concepts had existed before this. In 1980, Manny Lehman had published a similar
law Law is a set of rules that are created and are enforceable by social or governmental institutions to regulate behavior, with its precise definition a matter of longstanding debate. It has been variously described as a science and as the ar ...
using an "
architectural Architecture is the art and technique of designing and building, as distinguished from the skills associated with construction. It is both the process and the product of sketching, conceiving, planning, designing, and construction, constructi ...
metaphor" for the deteriorating nature of software. ''Manny's Law'' states that: It is important to understand that
software architecture Software architecture is the set of structures needed to reason about a software system and the discipline of creating such structures and systems. Each structure comprises software elements, relations among them, and properties of both elements a ...
has been contrasted with
civil engineering Civil engineering is a regulation and licensure in engineering, professional engineering discipline that deals with the design, construction, and maintenance of the physical and naturally built environment, including public works such as roads ...
since the 1960s.


Causes

;Frequent causes of technical debt *Pressures by businesses to release sooner *The implementation of last-minute specification changes or changes that are insufficiently documented or tested, *Gaps in knowledge or skills, which may manifest as a lack of
process A process is a series or set of activities that interact to produce a result; it may occur once-only or be recurrent or periodic. Things called a process include: Business and management * Business process, activities that produce a specific s ...
understanding, insufficient knowledge, poor technological leadership, or inadequate mentoring or
knowledge sharing Knowledge sharing is an activity through which knowledge (namely, information, skills, or expertise) is exchanged among people, friends, peers, families, communities (for example, Wikipedia), or within or between organizations. It bridges the ind ...
practices. *Issues in the development process, such as ** sub-optimal solutions ** insufficient
requirements In engineering, a requirement is a condition that must be satisfied for the output of a work effort to be acceptable. It is an explicit, objective, clear and often quantitative description of a condition to be satisfied by a material, design, pro ...
(from process inefficiencies) ** conflicting requirements on parallel branches ** deferred
refactoring In computer programming and software design, code refactoring is the process of restructuring existing source code—changing the '' factoring''—without changing its external behavior. Refactoring is intended to improve the design, structure, ...
, or ** delayed upstream contributions. *Non-compliance with best practice, such as ** insufficient
software documentation Software documentation is written text or illustration that accompanies computer software or is embedded in the source code. The documentation either explains how the software operates or how to use it, and may mean different things to people in ...
** poor collaboration practices, ** lack of ownership, ** rewrites for outsourced software ** inadequate attention to code quality ** tightly coupled components ** the lack of a
test suite In software development, a test suite, less commonly known as a validation suite, is a collection of test cases that are intended to be used to test a software program to show that it has some specified set of behaviors. A test suite often conta ...
, or ** failure to align to standards (including ignoring industry standard frameworks).


Consequences

By increasing the cost of ongoing maintenance, technical debt makes it harder to predict release schedules. "Interest payments" result from incomplete work and escalating integration costs due to changes in the upstream project. Increases in complexity and the amount of uncompleted work make it increasingly difficult to accurately
estimate Estimation (or estimating) is the process of finding an estimate or approximation, which is a value that is usable for some purpose even if input data may be incomplete, uncertain, or unstable. The value is nonetheless usable because it is de ...
effort, resulting in delays, missed deadlines, and stress on engineering teams, which can result in higher staff turnover, compounding the problem. Carrying technical debt into production increases the risk of outages, financial losses, and potential legal issues due to breached
service-level agreements A service-level agreement (SLA) is an agreement between a service provider and a customer. Particular aspects of the service – quality, availability, responsibilities – are agreed between the service provider and the service user. Th ...
. Future refactoring becomes riskier and costlier, with modifications to production code introducing greater chances of disruption. Failure to address technical debt can cause productivity to decline and slow down the delivery of features. The cumulative effects of technical debt result in increasingly fragile systems that can make bold improvements difficult. The domination of incremental changes, along with delays to critical refactoring, can result in stressed systems with inconsistent design, causing users to suffer from degraded performance and limited functionality while developers struggle to maintain quality.


Planning

Kenny Rubin uses the following categories to help manage technical debt: * Happened-upon technical debt—debt that the development team was unaware existed until it was exposed during the normal course of performing work on the product. For example, the team is adding a new feature to the product and in doing so it realizes that a work-around had been built into the code years before by someone who has long since departed. * Known technical debt—debt that is known to the development team and has been made visible using one of many approaches. * Targeted technical debt—debt that is known and has been targeted for servicing by the development team.


Limitations

The concept of technical debt assumes that an expedient design saves present costs at the expense of higher future costs. While often valid, this premise relies on assumptions that may not always hold, such as the assumption that the product must survive long enough for the deferred work to matter, or that future events or advancements may render expedient and "long-term" designs obsolete, or that new tools and techniques might reduce the cost of future rework, challenging current debt assumptions. Given the uncertainty of the future, what appears to be technical debt today may ultimately prove to be an example of savings. Furthermore, traditional calculations of technical debt tend to focus only on development time, overlooking broader costs such as training and onboarding when debt affects code readability, licensing, tools, and infrastructure needed to manage or resolve the debt, and opportunity costs related to delayed features or lost market opportunities. Without accounting for these factors, technical debt assessments risk oversimplifying complex trade-offs, leading to suboptimal decisions.


See also

*
Code smell In computer programming, a code smell is any characteristic in the source code of a program that possibly indicates a deeper problem. Determining what is and is not a code smell is subjective, and varies by language, developer, and development met ...
*
Big ball of mud An anti-pattern in software engineering, project management, and business processes is a common response to a recurring problem that is usually ineffective and risks being highly counterproductive. The term, coined in 1995 by computer programmer An ...
*
Bus factor The bus factor (aka lottery factor, truck factor, or circus factor) is a measurement of the risk resulting from information and capabilities not being shared among team members, derived from the phrase "in case they get hit by a bus". The concept ...
*
Escalation of commitment Escalation of commitment is a human behavior pattern in which an individual or group facing increasingly negative outcomes from a decision, action, or investment nevertheless continue the behavior instead of altering course. The actor maintains ...
* Manumation *
Overengineering Overengineering, or over-engineering, is the act of designing a product or providing a solution to a problem that is complicated in a way that provides no value or could have been designed to be simpler. It has been employed intentionally in si ...
*
Shotgun surgery Shotgun surgery is an anti-pattern in software development which occurs when a developer adds features to an application codebase which span a multiplicity of implementors or implementations in a single change. This is common practice in many p ...
*
Software rot Software rot (bit rot, code rot, software erosion, software decay, or software entropy) is the degradation, deterioration, or loss of the use or performance of software over time. The ''Jargon File'', a compendium of hacker lore, defines "bit r ...
*
Spaghetti code Spaghetti code is a pejorative phrase for difficult-to- maintain and unstructured computer source code. Code being developed with poor structure can be due to any of several factors, such as volatile project requirements, lack of programming style ...
* SQALE *
Sunk cost In economics and business decision-making, a sunk cost (also known as retrospective cost) is a cost that has already been incurred and cannot be recovered. Sunk costs are contrasted with '' prospective costs'', which are future costs that may be a ...
* TODO, FIXME, XXX {{div col end


References


External links

* Experts interviews on Technical Debt
Ward CunninghamPhilippe KRUCHTENIpek OZKAYAJean-Louis LETOUZEY

Steve McConnell discusses technical debt

Averting a "Technical Debt" Crisis
by Doug Knesek * Boundy, David
Software cancer: the seven early warning signs
ACM SIGSOFT Software Engineering Notes, Vol. 18 No. 2 (April 1993), Association for Computing Machinery, New York, New York, US Metaphors Software architecture Software engineering terminology Software maintenance