There are three primary types of Technical Debt:
- Naïve technical debt
- Unavoidable technical debt
- Strategic technical debt
Naïve technical debt is common where a specific best practice is not followed due to being unaware of the best design pattern, unfamiliar with naming convention, documentation guidelines or even coding guidelines such as following abstraction in development and having a method serve one purpose.
This happens more frequently with junior level developers, but even the most senior developers can miss things and as a result, create technical debt. My recommendation would be to use the guidelines in the books “Clean Code” by Robert Martin (http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882) and “Pragmatic Programmer” by Andrew Hunt and David Thomas (http://www.amazon.com/s/ref=nb_sb_noss_2?url=search-alias%3Daps&field-keywords=pragmatic+programmer). This will include several Extreme programming principles such as code reviews, refactoring, TDD and pair programming to name some.
Unavoidable technical debt will happen due to upgrades in development tools that bring newer and often better ways to maintain custom solutions. Also, when scope changes are requested during mid development, that will have an immediate cost to it. What about adding a new feature to an existing web site so it better supports mobile devices? This too will increase the debt due to rewriting the system to support multiple modalities unless it was designed with that in the first place.
In some cases, like the last example, some unavoidable technical debt is really more naïve technical debt and can be avoided, but the third type of technical debt, strategic, is also avoidable, but instead decided (either intentionally or unintentionally) to be accrued.
For instance, skipping proper quality code practices like code reviews and refactoring in order to make a release by a certain deadline is an example of strategic debt. Continually placing refactoring tasks at the bottom of a product backlog or nowhere at all is another example of strategic debt. Strategic debt can be tackled by determining an actual financial cost of the technical debt and presenting to leadership in order to get buy in. This will be discussed further in future blogs.