{"id":1063,"date":"2013-03-11T12:40:15","date_gmt":"2013-03-11T12:40:15","guid":{"rendered":"http:\/\/invisiblezero.net\/?p=485"},"modified":"2013-03-11T12:40:15","modified_gmt":"2013-03-11T12:40:15","slug":"technical-debt-in-software-development","status":"publish","type":"post","link":"http:\/\/ndthanh.com\/technical-debt-in-software-development\/","title":{"rendered":"Technical debt in software development"},"content":{"rendered":"
<\/p>\n
Technical debt (also known as design debt or code debt) is a neologistic metaphor referring to the eventual consequences of poor or evolving software architecture and software development within a codebase. The debt can be thought of as work that needs to be done before a particular job can be considered complete. As a change is started on a codebase, there is often the need to make other coordinated changes at the same time in other parts of the codebase or documentation. The other required, but uncompleted changes, are considered debt that must be paid at some point in the future.<\/p>\n
<\/p>\n
Common causes of technical debt include (a combination of):<\/p>\n
“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. One pays off the debt by simply completing the uncompleted work.<\/p>\n
The build up of technical debt is a major cause for projects to miss deadlines. It is difficult to estimate exactly how much work is necessary to pay off the debt. For each change that is initiated, an uncertain amount of uncompleted work is committed to the project. The deadline is missed when the project realizes that there is more uncompleted work (debt) than there is time to complete it in.<\/p>\n
“As an evolving program is continually changed, its complexity, reflecting deteriorating structure, increases unless work is done to maintain or reduce it.”<\/p>\n