What is technical debt?

Technical debt is a concept in software engineering that refers to the amount of effort required to fix suboptimal code, design, and architecture. Technical debt makes the work of your developers harder and hinders you from delivering features quickly.

Technical debt (TD) is a metaphor that uses the concept of financial debt to describe poor software quality.  The two main concepts of the metaphor are principal and interest:

  • principal is the amount of effort necessary in order to remove all the problems present in your system that prevent you from going fast;
  • interest is the extra effort that it takes to add new features to the system because of the TD present.

When a software system is affected by technical debt, all the design-time quality attributes of the system are compromised. The system is:

  • hard to maintain (e.g. fix bugs, understand, etc.)
  • hard to evolve (e.g, adding new features),
  • harder to secure

When a software system is affected by technical debt, all the design-time quality attributes of the system are compromised.

What are the causes of technical debt?

There are many causes that lead to the increase of technical debt in a software system. First of all, the time-to-market pressure. When developers are required to release new features in a short amount of time they create a quick-and-dirty solution that may meet the urgent needs of the moment but it is not solid enough to provide a strategical advantage in the long run.

It is of paramount importance that the quick-and-dirt solution is fixed at the first available moment.

time-to-market pressure is one of the most common causes of technical debt.

Another common source of TD is the adoption of overly complex design. If the code is too difficult to comprehend due to intricate design constructs and patterns, adding new features may take an excessive amount of time to develop. This, together with a lack of system documentation, can be more harmful than actual bad design.

Last but not the least, delayed refactorings can be one of the causes. Refactoring is a term indicating the actions needed to fix a design problem while preserving the expected software behavior. A good practice to avoid the growth of technical debt is to schedule refactoring from the very early phases of software development.

Refactoring is a term indicating the actions needed to fix a design problem while preserving the expected software behavior.

How can you prevent the accumulation of technical debt?

Technical debt naturally accumulates in software systems, however, planned refactorings to fix quick-and-dirty solutions and the careful monitoring of its evolution can prevent most of the deterioration.

Arcan integrates with Continuous Integration (CI) pipelines and allows to continuously detect and monitor technical debt. Ask us for a trial to learn how to prevent technical debt.