Access and Feeds

Technical Debt: Balancing Short-Term and Long-Term Design Architecture

By Dick Weisinger

Technical debt refers to costs that accrue over time related to poor architectural choices. Often deadlines force coding choices that are expeditious in the short term but over time become headaches to maintain. The future time needed to maintain poor coding is the technical debt that needs to be carried forward. The debt can often be reduced but requires a short-term effort of refactoring or rewriting the problem code.

Dag Liodden, Founder at Crisp, identifies three types of technical debt:

  • Deliberate. Shortcuts were taken in order to meet delivery deadlines.
  • Accidental/Outdated. This includes software designs that didn’t anticipate the future or which are a mismatch for features based on a mismatch of technology.
  • Bit-rot. This is software that erodes over time, often because it is maintained by multiple people.

When taking on new projects it’s good to make technical debt a component of the overall design. It’s important to factor in decisions which may be short-terms ‘wins’ but which will lead to longer-term expensive maintenance headaches. Whenever possible technical debt should be reduced so that maintainable software is produced.

Grady Booch, creator of the Unified Modeling Language (UML), said that “the concept of technical debt is central to understanding the forces that weigh upon systems, for it often explains where, how, and why a system is stressed. In cities, repairs on infrastructure are often delayed and incremental changes are made rather than bold ones. So it is again in software-intensive systems. Users suffer the consequences of capricious complexity, delayed improvements, and insufficient incremental change; the developers who evolve such systems suffer the slings and arrows of never being able to write quality code because they are always trying to catch up.”

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)

Leave a Reply

Your email address will not be published. Required fields are marked *

*