The most popular and comprehensive Open Source ECM platform
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.
- 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.”