It’s been a while! A few weeks ago I wrote about work in progress limits and software delivery frequency. Today, I’ll be writing about technical debt or (tech debt) and why it’s important to manage as you scale. Tech debt isn’t just a large business problem to solve. It impacts startups and mid sizes organizations just as much. Let’s start off with some basics. What is technical debt?
What is technical debt?
Technical debt is a concept in software development that refers to the cost of making shortcuts or suboptimal decisions during the development process, which can lead to increased maintenance costs, reduced code quality, or a slower development process in the future. The term was coined by Ward Cunningham in 1992 and is often used as a metaphor to compare financial debt to the trade-offs made in software development. The clearest example would be the following. You and your team are building software and there’s a hard technical choice to be made. Do you go the long drawn out route that offers a proper long term solution? Or do you got the shorter path that’ll let you get code out the door quicker. Depending on where you are in your journey, there may be no good answer immediately.
Where does technical debt come from?
Technical debt can arise from various sources, such as:
- Hasty development: When teams rush to meet tight deadlines, they may take shortcuts or implement temporary solutions, which can lead to technical debt.
- Lack of documentation: Inadequate or missing documentation can make it difficult for developers to understand and maintain the codebase, resulting in technical debt.
- Insufficient testing: Limited or poor testing can leave bugs or issues undiscovered, leading to technical debt when these issues need to be addressed later.
- Outdated technology: Using outdated technologies or libraries can create technical debt as they become increasingly difficult to maintain or integrate with newer technologies.
- Poor architectural decisions: Suboptimal or poorly planned architecture can lead to technical debt, as the codebase becomes harder to maintain or extend in the future.
- Inconsistent coding standards: A lack of unified coding practices and standards can make the codebase difficult to understand and maintain, creating technical debt.
- Product and tech trade offs. As mentioned previously, do you go the long drawn out route that offers a proper long term solution? Or do you got the shorter path that’ll let you get code out the door quicker. Depending on where you are in your journey, there may be no good answer immediately.
Why does this matter at all? We need to ship products
Technical debt, if not managed properly, can have several negative impacts on software delivery, such as:
- Decreased productivity / development speed: As developers spend more time addressing technical debt, they have less time to work on new features or improvements. This can impact your cycle and lead times along with site stability + throughput. Major impacts to your dora metrics.
- Reduced code quality: The presence of technical debt can lead to increased complexity, making the codebase more difficult to understand, maintain, and extend.
- Increased risk: Accumulated technical debt can make it harder to predict the impact of changes or identify potential issues, increasing the risk of introducing new bugs or errors. This can also lead to increased sevs in production
- Higher maintenance costs: Technical debt often leads to higher maintenance costs over time, as more resources are needed to address the accumulated issues. Ie, increase in AWS / cloud spend due to suboptimal code.
Why does tech debt matter for high growth companies?
A fast-growing company can be particularly impacted by a large amount of technical debt for several reasons:
- Scaling challenges: Rapid growth often involves scaling software systems to accommodate a larger user base, increased data volume, and additional features. The presence of technical debt can make it more difficult to scale these systems efficiently, resulting in performance bottlenecks, system instability, or longer development times for new features. Did you take VC dollars are now under pressure to deliver and grow customer base? How many tradeoffs did you make while building your minimum product that customers can use? All questions you need to plan for down the road.
- Resource allocation: As a company grows, its development team must balance the need to deliver new features and improvements with the need to address technical debt. The presence of significant technical debt can consume a large portion of the team’s time and resources, leaving less room for innovation and growth-related tasks. Your team reached critical mass and is going wild growth. Congratulations! Now you must tackle the technical debt your team accrued previously.
- Development speed: Technical debt can slow down the development process, making it harder for a fast-growing company to quickly respond to market demands, customer needs, or competitive pressures. Need to pivot quickly? Not so easy if you didn’t allocate or budget for tech debt for the last few months. This can impact the company’s ability to maintain its growth trajectory.
- Attracting and retaining talent: Technical debt can lead to a less enjoyable work environment for developers, who may find it frustrating to work with a codebase that is difficult to maintain or extend. This can make it harder to attract and retain top talent, which is crucial for a fast-growing company to sustain its growth.
- Impact on product quality: Accumulated technical debt can negatively impact the overall quality of a company’s product or service, leading to increased bugs, poor performance, or user dissatisfaction. This can hinder customer acquisition and retention, ultimately affecting the company’s growth. No one wants unhappy customers as a result of broken code that’s impacting your users.
- Risk management: As a company grows, the complexity of its software systems increases, and unmanaged technical debt can make it harder to predict the impact of changes or identify potential issues. This increases the risk of introducing new bugs, security vulnerabilities, or other errors, which can be damaging to a company’s reputation and growth prospects.
How do you manage it then?
To manage technical debt effectively, teams should adopt strategies such as:
- Prioritizing debt reduction: Treat technical debt as a priority and allocate time and resources to address it regularly. For example, allocate each sprint or each week a percent allocation to tech debt.
- Example of a theoretical work breakdown each week that will allow you to sustainably maintain your codebase while keeping customers happy
- 50% new work
- 25% re-work / tech debt
- 15% unplanned work (work always comes up that isn’t planned for)
- 10% other
- If you are a high growth company it might be 70% new work and that’s OK. As long as there’s some sort of consistency in regards to maintaining code and unplanned work you should be OK.
- Example of a theoretical work breakdown each week that will allow you to sustainably maintain your codebase while keeping customers happy
- Continuous refactoring: Regularly review and refactor the codebase
- Implementing coding standards: Establish and enforce coding standards and best practices to maintain consistency and code quality.
- Regular code reviews: Conduct regular code reviews to identify and address technical debt early.
- Investing in documentation and testing: Ensure adequate documentation and testing practices are in place to minimize technical debt accumulation.
- Evaluating technology choices: Regularly review and update technology choices to ensure they remain relevant and efficient.
Explain it to me like I’m watching hunter x hunter.
OK, for you anime fans (specifically hunter x hunter). Knuckle Bine is a character from the anime and manga series “Hunter x Hunter”. He is a skilled Beast Hunter and is known for his unique Nen ability called “Hakoware,” which can be translated to “Bankruptcy” or “Chapter 7 Bankruptcy.”
Hakoware is an ability that allows Knuckle to lend his opponent some of his aura, which acts like a debt. This debt accrues interest over time, and if the opponent’s debt exceeds their total aura capacity, they go “bankrupt” and are unable to use their Nen abilities. The ability is activated when Knuckle lands a punch on his opponent, and he can monitor the debt and interest using a small mascot-like creature called “A.P.R” (Amortizing Power Redirector) that appears near the opponent.
Here’s how Hakoware can be related to technical debt:
- Accumulation of debt: Just like how Knuckle’s ability allows the opponent’s aura debt to accumulate over time, technical debt accumulates in a software project when shortcuts or suboptimal decisions are made during the development process.
- Interest: In Hakoware, the aura debt accrues interest, which grows over time. Similarly, technical debt accrues “interest” in the form of increased maintenance costs, reduced code quality, and slower development speed.
- Negative consequences: If the opponent’s debt in Hakoware exceeds their total aura capacity, they become unable to use their Nen abilities. Likewise, if technical debt is not managed and grows unchecked, it can have significant negative consequences on a software project, such as reduced productivity, increased risk, and higher maintenance costs.
- Monitoring and managing debt: Knuckle monitors the opponent’s debt using A.P.R, which helps him make informed decisions during a fight. In software development, teams need to monitor and manage technical debt proactively by implementing strategies such as code reviews, refactoring, and adhering to best practices.
In conclusion, Knuckle Bine’s Hakoware ability in “Hunter x Hunter” serves as a creative analogy to help understand the concept of technical debt in software development. Just as Knuckle’s opponents must be cautious of the accumulating debt and its consequences, development teams must be mindful of technical debt and actively manage it to ensure the long-term success of their projects.
There you have it, I’ll write up an in depth guide on unplanned work + tech debt soon. If you have any questions feel free to contact me and we can set something up!