09 April 2020

What is Technical Debt and How to Avoid It?


There’s no such thing as a shortcut. Everything you avoid now will come back to bill you – with interest.

Maybe it’s possible, if you’re extremely clever, experienced, a trickster – or all the above. But I have my doubts. I’m talking about the practice of coding. There are faster ways of getting things done. But most of the time, we need to knuckle down and put in the hard work before deploying.

Sometimes, individuals, consumers, clients etc. – sometimes they need something completed ‘yesterday’. We all know this sensation. That idea that everything can come immediately, fuels our carelessness. The IT world faces this problem frequently. And, there’s a metaphor for that.

Technical Debt

Avoiding the necessary work in many technical fields results in technical debt. This is the cost of additional re-working of code, due to the choice of applying a limited solution.

The idea of technical debt was coined by Ward Cunningham, an American programmer responsible for the development of the first wiki. He is also credited as the co-author of the Manifesto for Agile Software Development.

You can also watch this interesting talk from Einar W. Høst, who argues that technical debt is being caused more by organizational inertia and miscommunication, that it is a human error.

Build-up of Cruft

In a military operation, nothing ever goes completely to plan. Thankfully, when working on software systems, some planning will go a long way. But it’s good to know which tasks might need some extra attention.

When working on a software project, there are several essential tasks. But not all software is created equal. These tasks form the core, with many accumulating Cruft. These are deficiencies within the internal quality of a component. In several cases, these are things requiring fixing, and which come up at the last minute.

So, when problems like this arise, we must act on them. The act of dealing with Cruft, however, entails extra effort, time, and resources.

A person wants a new TV. But they won’t wait to reach a reasonable financial situation to make their purchase.

Instead, they take out a high-interest instant loan – advertised on their old television. With the new funds awarded from their loan, they purchase their brand-new TV.

With the interest accrued from this loan, that person will have eventually paid the equivalent of 10 new TV.

The same principle applies to time. In this aspect, technical debt relates in many ways to financial debt. It’s that additional amount that needs to be repaid.

What You Should Avoid

In finance, debt will almost certainly consist of interest, and the obligatory payments associated with that. Technical debt works the same way. Additional work can accumulate and worsen if untended to. Leaving these items can make it harder to implement changes, keep things on-time, and remain on-budget.

There are many ways to get caught up in technical debt. Even the most experienced software developer can miss some key problem areas. For this reason, I will explain these to you.

Reactive Behaviour

By failing to address the debt upfront, you’re facing the most basic of errors. This leads to Software entropy. In this case, your project will be plagued by a consistent problem within the closed system.

What to do:

Fortunately, your remedy is a simple one. If this problem arises – take the necessary steps and mitigate any potential conflicts.

No Initial Definition

This is a common situation resulting in technical debt. In some cases, you may choose to define requirements throughout development. This may save time initially, however, will almost certainly require re-working later.

What to do:

Spare some time on the onset to set requirements at the beginning of your project. You may need to re-work the definitions to a minor degree. However, that would not entail as much time as would a complete lack of planning.

Premature Deployment

Another textbook foundation for error is releasing a product before completion of prerequisites. These can be due to many things, such as failing to conduct a complete product test or failing to supply documentation. Inexperience is another culprit, with insufficient knowledge of good code a significant problem.

What to do:

A premature release can be riddled with incomplete changes. In this case, the product can result in bugs or deficiencies – also requiring further attention. Be mindful of code smell to maintain product integrity. When conducting your tests, look out for any ‘symptoms’ of bad code.

Stubborn Development

Customer or business needs of the end-user will probably change. However, if the product cannot adapt to changes, the inflexibility will result in a complete re-work of the project.

What to do:

Always be prepared for last-minute specification changes. With an inflexible process or end product, you lay the groundwork for future problems. Unless otherwise agreed to, it is infeasible to expect consistent requirements.

Organisational Issues

Some organisations fail to understand the notion of teamwork. When there is no collaboration, then there is no sharing of knowledge or mentorship. Such scenarios mean departments operate in ‘silos’ parallel to one another. The issue with this is the labour associated with the subsequent merging of tasks.

What to do:

The main issue to address is deficient leadership. Ensure your team takes advantages of good expertise from the senior level. Ensure open channels of communication as badly-relayed commands are a primary source of error.

Expecting A Flawless Process

A good strategist should anticipate some deviations! By ignoring the contingencies that come from a major project, you may find yourself unprepared for sudden responsibilities.

What to do:

Make way for possible changes, because they can happen. Planning for ‘technical debt’ and ‘hotfix’ sprints should be a given.

In our experience, we planned a sprint to address and overcome the possibility of technical debt. This was a 2-week sprint, just before release. Additionally, there was a 1-week sprint allocated for the handover stage. This referred to post-release considerations, such as hot-fixing.

Summing Up

It’s a simple matter of quality vs quantity.

When carrying out a task, through haphazard attempts to curtail expenses, you end up spending additional resources for your organisation in the long run. The simple fix is dedication. Be sure to invest in quality and make the necessary planning.

Nothing exists in a vacuum, of course. Sometimes projects will expand too. Cruft will accumulate, requirements may change, or command will be mistaken. Prepare for any eventualities.

When reading this, you may have already noticed that you’ve created some form of technical debt. My best advice, in this case, is to address it head-on, and document its instance for next time.

This is, of course, the territory of the considerably experienced. I highly recommend you find the necessary expertise to extend your team. An acclaimed software house will provide the tools you need to carry out the planning and execution of your project.

Therefore, be prepared, be proactive, and always ask for help.

Get your project right with support of experience IT professionals

Marcin Skoczylas
Project Manager

Image processing specialist and expert in machine learning technologies, PhD in technical sciences. Senior Project Manager since 2011, with IT experience over 15 years. He successfully carried out and deployed several projects, including enterprise EMIS Mobile and highly-scalable Tengi and multiple technologies. He is also official movie director with screenings in national TV, and also a lecturer at the Bialystok University of Technology. Scientific work deals with various aspects of signal processing and imaging, in particular, the recognition of live images of unstained cancer cells to be irradiated by heavy-ion accelerators, real-time image analysis of flying unmanned aerial vehicles (drones) and others, mainly based on the key point descriptors.