Technical Debt
What is Technical Debt?
Technical debt is a type of debt that is imposed as a result of choosing a simple approach against a professional or more appropriate approach to the technical funds of a company, team, etc. Technical debt is one of the most important issues in the field of software development, which of course can be extended to other fields as well. Terms such as design debt and code debt are equivalent titles for technical debt.
Technical debt can be caused by ignorance and insufficient knowledge or skill in producing a product, or by preferring a quick and cheap method over a better method or an ideal approach. Actions that intentionally or unintentionally give priority to project constraints (such as time and budget), ease of development or apparent customer satisfaction compared to technical issues and Standard design also cause technical debt. These actions may lead to problems that will have to be paid more to solve in the future.
If technical debt is not recognized and paid, similar to financial debt, it can cause interest (or debt-related costs) to accumulate. This debt may make it more difficult to change the software or product through the cost of additional rework.
Examples of technical debt
Imagine you want to form a programming team to start a project. This is your first experience and the people you are hiring are not very skilled. Finally, the result of the team’s work is a product that does not reach the competition in terms of features and quality. In such a case, you may have to pay this debt with the cost of software redesign or code reconstruction to reach the right position in the market.
As another example, suppose you have a low budget or little time to build an online store. In this case, you may prefer to use a weak host for quick site preparation at a low cost. Suddenly, the popularity of your store experiences a significant increase with an online ad. Your service does not have the necessary scalability. The host will not be able to respond to the huge volume of your customers and the store will be down. On the other hand, handling orders and responding to customer calls will cause you trouble due to the lack of a membership and ticketing system. Now, in addition to the damage to your brand, you have to spend more time and money to solve the problems.
Types of technical debt
Technical debt can be divided into two categories, intentional and unintentional. Intentional technical debts are debts that are created consciously. For example, the manager of a company may only consider the minimum features to speed up the software development process with the knowledge of its results; While these minimums make it more difficult to add more features to the software. On the other hand, unintentional technical debts are unwanted results that are usually caused by poor work, insufficient knowledge and skills, etc.
From another aspect, technical debt can be divided into types of design debt, code debt, infrastructure debt, architecture debt, Requirements analysis debt, test debt, etc.
Managing and dealing with technical debt
First of all, it is better to know that technical debt is not always considered a negative point. Sometimes it may be necessary to create controlled technical debt to advance the product development process and build prototypes. However, not paying enough attention to this debt and its consequences can still lead to high costs. Being aware of the existence of these debts is the first step in managing and paying them.
As much as possible, it is necessary to consider things such as scalability, documentation, the possibility of changing and adding new features during software development and product production to avoid creating technical debt. Clean and principled coding, compliance with current standards and complete testing scenarios are necessary to prevent and reduce these debts.
With every change in the code of a software or product, the possible required changes should be applied in other parts as well. Related parts in the software code, documentation and comments are among the things that should be changed if necessary. If any necessary change is not applied on time, it is considered a technical debt.
At the same time, it is necessary to have a documented plan for identifying technical debt. After identifying a technical debt, it is necessary to plan, prioritize and design a proper road map to pay off the debt. In the following, debt payment and making changes in the software codes are done according to the desired plan.
Reasons for technical debt
Various reasons are involved in creating technical debt. Among these reasons, the following can be mentioned:
Business issues
The shortest way is not always the best way! This also applies to product development and software development. Some business issues may cause an inappropriate solution to be used to produce a product faster or to produce a product at a cheaper price. This can lead to many additional problems and costs in the future.
Continuous software development
Continuous development of software to change and improve it or add new features is considered a natural issue in this field. However, software development over time can cause old solutions to lose their original quality and need to be changed. Old code, written by someone else in the distant past and left alone without adequate documentation, fuels this issue.
Starting to develop and produce the product before fully measuring the requirements
Starting the development of a software immediately can save time. However, starting the work before accurately measuring the requirements can lead to rework and create technical debt. In addition, last minute changes can also cause debt due to lack of time and budget.
Lack of technical documentation
Coding and producing a product without documentation can make doing so a debt.
Lack of cooperation and proper communication between team members
Lack of collaboration between team members and insufficient guidance for novice members can lead to poor code and additional costs due to rework.
Inflexibility of the product against changes
Using modular and object-oriented programming may facilitate future changes.
Insufficient attention to the current standards
The use of inappropriate and deteriorating or low supported programming languages, technologies or frameworks can make product development more expensive in the future. On the other hand, if you use programming languages with multiple libraries and proper support in software development, you can count on changing the software in the future according to the standards of the day.
Insufficient knowledge and skills
Insufficient knowledge and experience or skills in clean and professional coding is one of the common factors of creating technical debt. The same applies to other technical aspects such as product design, accurate requirement analysis, etc.
Inadequate testing
Failure to test or incomplete and rapid testing of a software or product may result in debt. Solving multiple software problems and bugs after release will cost more than on-time troubleshooting and debugging.
Delayed code refactoring
Sometimes it is necessary to restructure parts of the code to develop the software, improve the design, and support future needs. Delaying code refactoring can cause debt accumulation by increasing code volume.
Lack of familiarity with technical debt
The lack of understanding and sufficient knowledge about technical debt and making decisions without considering its concepts is another factor in creating these debts.
Term Link in Wikipedia