December 2022
If you ever developed a digital product, then you probably created technical debt. It’s hard to avoid, but there are simple ways to minimise it...
There is often the misconception that if you create technical debt then it’s because you did something clearly wrong, by cutting corners, doing crunch, or taking the quicker and easier route, rather than the longer and more technically sound route. However, there are more nuanced reasons why it gets created. Here’s what they are, and how to avoid them.
Technical debt is a metaphor used to describe the trade-off between short-term gain and long-term pain that can occur when making decisions about how to develop software. Sometimes the quickest solution is not always the best, even if it's made due to the constraints of the project roadmap. And indeed sometimes the solution that seems best at the time isn’t the best choice once more information is gathered or comes to light.
Technical debt can be very costly
When code needs to be rewritten or refactored, it can be very costly, both in terms of time and money. This is why it’s important to be aware of the potential implications of taking shortcuts during the development process.
What causes technical debt?
It might be the result of a deliberate decision to take a shortcut in order to save time or money. Or it might be the result of a mistake, or simply not knowing better at the time. In any case, it’s important to be aware of more subtle causes that often occur.
Scope creep
Scope creep can contribute to technical debt, as it occurs when the requirements for a project start to change during the development process. Unfortunately deadlines don’t tend to move when the scope increases, which means compromises are then made.
Unrealistic deadlines
Other factors include tight or unrealistic deadlines and lack of resources. If the development team does not have enough time or resources they may be tempted to take shortcuts, or just not have or take the time to fully evaluate the best solution.
There are two main types of technical debt…
Design debt
Design debt occurs when the design of the software is not well thought out and contains flaws that will need to be fixed later on. Design debt is an enabling factor for technical debt as it leads to more complicated development than first intended, compressing the timeline.
Implementation debt
Implementation debt occurs when the code that has been written is not up to par with industry standards. This type of debt can often be difficult to spot, as it is not always obvious that the code is not up to par. This type of debt is not caught by automated and manual testing, as the software features work as intended.
Technical debt impacts quality
If left unchecked, technical debt can have a number of negative consequences. First and foremost, it can lead to lower quality software - meaning less performant, and less maintainable, with bugs for edge cases.
Fixes cost greater time and resource
If you cut corners during the development process then you are likely to introduce bugs and errors into the codebase that will need to be fixed later on. These fixes can be time-consuming and expensive, and they can take away from resources that could be better spent on new features or improvements.
We often see companies pressing developers to deliver on time, only to then spend months after delivery to fix a broken product.
In addition, technical debt can make it more costly to change, or add new features to the software, because the codebase is then full of suboptimal code that needs to be modified, and this can make it hard to add new code without risking breaking existing functionalities.
As a result, software that is loaded with technical debt can be difficult to scale and maintain over time.
How to avoid technical debt
There are some key things that you can do in order to minimise technical debt…
Plan time in to deal with it
The first thing is to accept that technical debt will happen to some degree, so plan time in to tackle it. For instance you can plan some time within a sprint to work on reduce the debt.
Consider every decision
It’s important to weigh the pros and cons of every decision that you make, in order to ensure that you are not trading short-term gain for long-term pain.
Clarify requirements first
In addition, you should try to avoid scope creep by having a clear and concise definition of what the project requirements are. Once the requirements have been defined, they should not be allowed to change during the development process.
By having workshops which set the parameters of the project at the beginning, and user testing early on, you minimise the amount of changes that may be needed later on.
Realistic deadlines
It’s also important to have realistic deadlines, and to ensure that the development team has enough resources to meet them. Unreasonable deadlines can often lead to shortcuts being taken, which can ultimately cause more problems down the road. In general do not use velocity as the only metric for engineering evaluation. Code quality and thinking about the application in the long term should also be part of the picture.
Create a prototype
Finally, a high fidelity prototype can be a valuable tool in avoiding technical debt. At nuom, we use prototypes to ensure that the design is well thought out and free of flaws before we continue.
Prototypes can also provide a clear roadmap for the development process. This helps to avoid shortcuts, as the team will have a clear understanding of what needs to be done and how to do it. It tackles the issues of both design debt and implementation debt as it gives the team a clear goal to work towards.
We can help
Technical debt is a major problem for many software development projects. By being aware of the potential implications of taking shortcuts, and by putting measures in place to avoid it, you can help to ensure that your project stays on track and on budget.
If you would like to know more, or need advice or support on your project, then please get in touch at hello@nuom.co.uk
We create human-centered solutions that drive positive outcomes for users and organisations. Let’s collaborate.
See our work