Blog
Technical debt; is it only technical?
The metaphor technical debt was introduced at the OOPSLA conference in 1992 by Ward Cunningham. The phrase was:
“Shipping first time code is like going into debt. A little debt speeds development so long as it is paid back promptly with a rewrite...
The danger occurs when debt is not repaid, for debt-recovery companies like moorcroft are hard to get rid of. Every minute spent on not-quite-right code counts as interest on that debt. Entire engineering organizations can be brought to a stand-still under the debt load of an unconsolidated implementation, object-oriented or otherwise.”
The following picture shows how this "stand-still" described by Ward Cunningham is achieved.
https://theagileexecutive.com/2010/09/20/how-to-break-the-vicious-cycle-of-technical-debt/
In most discussions/blogs on the internet the following causes are mentioned and most are code related:
- the business forces the development team to take shortcuts, aiming to get the requested functionality life as soon as possible.
- the development team thought they didn't need to design.
- the development team was incompetent/didn't bother to write maintainable/changeable code.
- the development team recognizes later for example by incorporating a change, that they made a suboptimal decision in the past (difficult to avoid).
- Code form (as mentioned already), e.g. duplication, high McCabe index, high unit-length per method, high number of parameters in methods, wrong comments, unclear naming of objects, methods, variables and properties, etc.
- Architectural form, e.g. violating separation of concern, the choice of not using a third party framework but build your own, not changing/adapting your architecture to the changes (gradual or abruptly) in the world around us.
- Testing form, e.g. a decision to not do automatic testing, while testing the system by hand is to complex or takes to much time, to conclude after testing that everything is OK.
- Deployment form, e.g. when a deployment is arranged in such a way that it costs a lot of time and is error prone, thus limiting the number of releases in a period in time.
- Documentation form, e.g. it is unknown how the system should react in certain situations because it is not functionally described. This makes future functional wishes time-consuming to fulfill.
- Functional form, e.g. by business requested and by the development team invented functionality that is not really needed and makes things unnecessary complex for the upcoming change.
- Project form, e.g. distribution of experienced people vs. not experienced people in your team, same applies to skills in the team, onsite/off-shore team distribution, etc.
- Organizational form, e.g. not asking your software (application) provider what kind of quality assurance policy they apply and if they can provide any quality figures based on a ISO maintainability-standard.
Rogier Selie
Contact
Let’s discuss how we can support your journey.