Technical Debt in Software Design

"We need to add this feature right away so we can sign this customer - just implement a hack and we'll fix it later." 

What is technical debt?

Technical debt is a term coined by Ward Cunningham that refers to the development burden incurred by a company when shortcuts are taken during the software development life cycle.

These shortcuts can be caused by: 

  • Project deadline time constraints 
  • Failure to understand business requirements 
  • Developer inexperience leading to poor code
  • Lack of documentation
  • Lack of coding standards or adherence to design principles

Incurring technical debt is an unavoidable fact of life in the software world.   

The debt metaphor is particularly useful because financial debt is a widely understood concept.   You borrow money with the agreement that you will pay back the principal plus interest at a later date.   The interest in this scenario is extra development work required in the future because of the shortcuts.   Paying back the principal would correlate to refactoring the codebase. 

Dangers of Technical Debt

Left unchecked, mounting technical debt can lead to major problems within an organization. The codebase can become brittle over time.   The effort required to develop new features increases.   Developer morale plummets since they have to deal with these issues daily. 

Managing Technical Debt

Refactoring the code incrementally is the best approach to managing technical debt.   This is often done at the expense of implementing new features but will be worth it in the long run.