What is technical debt? How it affects your business? How can you prevent it, and how can you deal with it once it has arisen? This is what we will try to explain in this two-part series of articles.
Technical debt. Sounds scary, doesn't it? We'll show you the bad, the good and everything in between. This part will be more theoretical, but no less important. At the end of the article we have also prepared a real life example of technical debt and its implications. Now that we've said that, we can get on with it.
Wikipedia describes it like this:
In software development, technical debt (also known as design debt or code debt) is the implied cost of additional rework caused by choosing an easy (limited) solution now instead of using a better approach that would take longer.
While the description is generally somewhat correct, it is not that simple. Technical debt is a hidden cost of every IT project, but not every case is dangerous or caused by bad decisions of your development team (as you will see in the explanation below).
The word “debt” is no coincidence, as it has many attributes in common with economical debt. It is absolutely important to “pay” it back regularly. Ignoring and accumulating the technical debt can lead to fatal consequences, in worst case scenarios even bankruptcy. In the software development world that means such a software, that doesn't work or can't be further developed which leads to significant investment losses.
Fun fact: In the American study "The cost of poor quality software in the US" from 2018, Herb Krasner calculates that the overall cost of poorly made software is approximately $2.8 trillion. By comparison, that's more than the GDP values of most of the world's countries.
So, let's see what types of technical debt you can usually encounter. Martin Fowler has great article, which we agree with. There are basically 4 types of technical debt.
Now we know most common types of technical debt, but what are the most common causes beside the ones mentioned above?
Business world has couple of "golden rules" and here is one of them. From the well-known trinity of Time - Cost - Quality, you can have only two. If you push your development team to build something cheap and fast, you won't get quality. If you want quality and fast delivery, it won't be cheap. That stands in custom software development as much as anywhere else, if not more. The wrong choice of two of these three options can often cause the technical debt.
We are not nerds and we understand that sometimes technical debt is unavoidable and is something that even makes sense in a particular case (e.g.: rapid MVP development for market validation). In this case, when you have limited resources and want to test the whole project as soon as possible, it may not make sense to build a complex architecture ready to scale to millions of users, prepare great automated tests, different sandboxes, whole CI/CD pipeline and other important aspects of modern development. You just focus on getting it done as quickly as possible. And that's okay as long as you understand the risks and costs involved in the future (even complete rewrite of the first version of the application could be required in some cases).
The thing is, calculated technical debt is sadly usually only a small percentage of projects.
What we usually encounter in Moravio when for example rescuing projects, is the exact opposite or more accurately, reckless & intentional technical debt from the description above. The technical debt is neglected, constantly increasing, undocumented and unmanaged.
There is also one more thing, which should be said. The IT industry is evolving like no other in the world. Technologies that are state-of-the-art this year may have significantly better major versions or alternative technologies next year. That's just how it goes. You should always try to keep your project updated. We are not saying that you need to update on the first day that a new version of the technology is released (on the contrary, we strongly discourage this because of the bugs that usually appear in the first few days), but it is advisable to keep your project on the latest stable and long-term supported version within a reasonable interval. In a way, this can also be called technological debt in itself, which is why at the beginning of the article we talk about the fact that technological debt is part of every project.
Simply put, a lot. Here are just some examples:
It all depends on the nature of your business. All of this can also be directly or indirectly converted into monetary losses.
Think of technical debt as a living part of your project. Set aside time for your developers to address it. Monitor and document it (simple updated JIRA task or Confluence page can do wonders). Work with your technical debt and continuously take chunks out of it. That's the only way to keep it under control in the long run. If you don't, many times higher costs will probably catch up with you sooner or later.
In Moravio, beside providing Dedicated Development Teams, we also do Co-development & Outstaffing and Project Rescue.
It is on one of the projects we rescued that we want to show you today's example. The project was very neglected and the client from abroad approached us very late. The client was also not very experienced at that time. So he didn't notice the problems himself until it became clearly visible that something was wrong. Project was 2-3 major versions of PHP and Laravel framework behind, messy code, wrong architecture, thousands of unnecessary database calls, tenths of unused or not updated NPM packages, six different libraries handling images, one big file for CSS and JavaScript, wrong URL routing, no documentation & tests. You name it.
Don't worry. We've successfully solved all the problems, but the example above is a great way to see the technical and business problems you can potentially run into.
This part was little bit more theoretical. In next part, we will explain what to look out for to discover technical debt, how to deal with the technical debt and few more examples from our personal first-hand experience.
Blog posts you may be interested in
New blog posts you may be interested in
We help startups, IT companies and corporations with digital products.