What is technical debt? (How to properly manage it)
When battling the triple constraint of time, cost, and quality, projects often opt for faster or more cost-effective solutions to get things done. One of the consequences of this choice is technical debt — issues or suboptimal code that needs to be addressed at a later point.
But what’s the impact of taking on technical debt in the name of shipping faster?
Studies show that companies often end up spending 23%-42% of their time addressing software built on suboptimal solutions.
Still, technical debt isn’t inherently bad. After all, winning the go-to-market race with a tactical solution can be highly rewarding, so long as you record, manage, and regularly address your technical debt moving forward.
Jump to a section:
With the right approach, technical debt can be a tool you can use to your advantage — so long as you understand the trade-off you’re making and have a plan for handling it in the future.
What is technical debt?
Put simply, Technical Debt occurs when companies decide to go for a fast or low-cost design, which will have to be upgraded, re-worked, or completely re-built later on.
Technical Debt is the consequence of decisions that prioritize speed or cost over the optimal technical design.
For example, you’ll most likely take on technical debt when:
- Choosing a technology the team knows well to implement a solution quickly, rather than taking additional time to learn a new market-leading alternative.
- Upgrading existing systems with a limited lifespan rather than investing in new long-term solutions.
- Completing limited testing to push features into production quickly, even though they have known bugs or defects.
Every business in the world has some level of technical debt. Given companies have limited budgets and are racing against competitors to win customers, it’s inevitable that speed and cost will beat out technical excellence in certain situations.
But not all technical debt is a conscious decision. Instead, developers often face two types of technical debt:
- Intentional. This is technical debt that is accepted as part of delivering a solution, project, or product within other constraints, e.g., time or cost.
- Unintentional. This is technical debt that teams don’t realize they’ve taken on due to opting for an error-prone or poor-quality solution.
Outside of being intentional or unintentional, technical debt can also be characterized by the IT domain it relates to, such as infrastructure, software, test, or middleware debt.
Categorizing technical debt in this way enables teams to understand where debt is concentrated, the root cause, and ways to address it.
Like financial debt, holding a level of technical debt is not always a bad thing — it can be a great tool to help businesses grow, scale, and achieve their objectives. But, like with financial debt, holding too much debt is a problem, leading to risk, uncertainty, and instability in your technical performance.
Here’s a quick summary of what technical debt is and isn’t, and how it can be used to achieve successful outcomes:
Technical debt is… | Technical debt is not… |
---|---|
A tool — the same way you may take on financial debt to fund a purchase before you have all the money. | Inherently bad — it can be a tool to help you ship faster, beat competitors, and learn from users. |
Always growing — as the technical landscape changes and the assumptions you built your original code on go out of date. | A mess — poor work is different from technical debt decisions based on project constraints. |
Something to be controlled — too much technical debt can cause risk and instability for your business. | A free for all — taking on technical debt should be a conscious decision that’s planned and managed. |
Free — technical debt has a cost, as you’ll need to invest time and money to fix it later down the line. | Avoidable — even if you make the best technical decisions, technology grows out-of-date, creating debt as it ages. |
Because technical debt is everywhere, it can be easy to feel lost at where to start when trying to get it under control. Like many things, getting technical debt under control starts by identifying it, so let’s take a look at some of the most common root causes.
What causes technical debt?
While intentional technical debt comes from conscious decisions, the unintentional burden can be harder to spot.
Here are some of the other ways technical debt occurs organically within your day-to-day development process:
- Changing assumptions. Writing code requires assumptions. Assumptions are essentially the best guess for the future, and you’re unlikely to get it 100% right. When things change relative to your assumptions, it generates technical debt.
- Pressure to ship quickly. Whether it’s getting to a go-to-market position, gaining market share, or responding to user feedback, there’s always pressure to move quickly. When you do, you’ll inevitably miss things that go on to become technical debt.
- Outdated libraries and frameworks. Your development is only as good as the information available to it, and over time technologies, frameworks, and libraries become out of date. When they do, that becomes technical debt that you need to go back and update.
- Lack of clear processes. When teams don’t have a defined development process, it leads to inconsistencies. Those inconsistencies lead to varying standards that might conflict, causing debt you may have to re-align in the future.
- Missing documentation. Stepping away from the code itself, the lack of comprehensive documentation is, in itself, technical debt. Without documentation, the next time a team comes to work on a particular area of code, they’ll have to spend time investigating how it works, leading to lost time and money.
- Poor work and/or lack of knowledge. If your teams aren’t suitably skilled on technologies, there’s a good chance they’ll create technical debt without even knowing it.
- Failure to test properly. Bugs are the main cause of technical debt, and many bugs make it through the net into production because of poor testing. Poor testing can be due to lack of testers, lack of expertise, or lack of time and resources to complete testing to a high quality.
- Limited budgets. If budgets are always squeezed, teams have to look for workarounds to save on costs. Whether that’s less experienced team members, inadequate resources, or cheap technology, tightening the purse upfront can lead to increased costs later on.
Technical debt can be a tool — if you use it correctly.
How to track, manage, and reduce your technical debt: 6 steps
Now that you know where technical debt comes from, it’s time to start putting plans in place to manage it — note the key word there was ‘manage’, not ‘eliminate’.
Remember, technical debt is inevitable. Use these steps to balance using technical debt to your advantage without creating too much risk.
1. Create a shared definition technical debt
To get started, everyone in the team must understand what technical debt is, how it comes about, and the impact it can have on an organization. Once everyone’s on the same page, you have the perfect foundation to begin tracking and managing technical debt.
Some resources to help:
- Understanding the project management lifecycle. Start by educating the team on the typical IT project management lifecycle. This will help understand how to detect technical debt in each stage of the process, especially in phases such as planning, building, and testing.
- Weighing quantity vs. quality. Trying to do too much in a short space of time is one of the main causes of technical debt. As a team, make sure you understand the fine balance between quantity and quality to ensure you’re not tipping into technical debt territory.
Real-life example:
Johan is a Product Owner for Tick, a time tracking app used by lawyers to monitor their billable hours. Johan is concerned about the level of technical debt the app is accumulating, so he explains the concept of technical debt to the product team to help them better manage it going forward.
2. Include risk analysis in your sprint planning process
When you boil it down, every technical debt decision is actually a risk management decision. With most development teams running some sort of sprint-based development cycle, ensure you bake risk analysis into your sprint process to consider the consequences of each development cycle.
Some resource to help:
- Perfect your sprint planning process. The sprint planning process is essential for selecting and designing the features you’ll develop. Whether it’s a roadmap review, user story selection, or defining your sprint goal, make sure you’ve defined your sprint planning process so that everyone is clear on steps.
- Bake in risk management. All good projects have a risk management plan, so make sure you’ve got one too. To avoid technical debt, define clear risk management roles and responsibilities. When you identify any technical debt risks, ensure you have a plan in place to mitigate them as best you can.
Real-life example:
During their next sprint, Johan’s team plan to implement an AI-driven auto-timer that removes the need for users to manually start and stop work timers. This will be the first in the market, but Johan knows AI technology is new and untested, so may create risk in the future. He documents these risks and actions he can take to mitigate them.
3. Create a technical design authority forum
To ensure they’re intentional with their technical debt, the best teams set up technical design authorities to discuss, critique, and approve technical solutions to ensure they align to strategy, meet objectives, and don’t generate unnecessary risk.
Some resources to help:
- Read up on technical design authorities. This great article gives a full breakdown on what a Technical Design Authority (TDA) is, and how it helps technical teams make the right decisions. Not only does it help make decisions, but sets quality standards, choose technology frameworks, and upskills technical teams.
- Try out RAPID decision-making. All good design authorities use a standard decision-making process to evaluate options and select a path ahead. RAPID is the perfect framework for complex problems with many stakeholders, helping to gather information, present solutions, and choose the best way forward.
Real-life example:
Johan takes several solution options for the AI timer to Tick’s technical design authority. The group considers the different AI frameworks and which one would be best to use on the app. They choose one which is relatively easy to implement, but has a major version upgrade planned in 12 months time.
4. Make sure you have comprehensive test plans in place
Another giant culprit of technical debt is poor testing, allowing poor code and bugs to fall through the net into your production environment. To avoid this, make sure you build a test plan that includes all different types of testing, including functional, technical, systems, and user testing. This gives you full insight into what works and what doesn’t, reducing the chance of unintentional technical debt.
Real-life example:
Johan’s team builds the new AI feature using their chosen framework, testing that it achieves the desired results. They’re concerned about security, so focus extra testing effort to ensure user data is securely stored in the app’s database.
5. Track your technical debt and bugs in a project management tool
As you make your way through your development process, if you consciously decide to take on some technical debt, it’s good practice to record it in a central system. This will help you visualize your overall level of technical debt, as well as begin making plans for how you’ll manage it in the future.
Here’s how Planio can help:
Planio is the perfect tool to track and manage technical debt, thanks to its development-focused features such as repositories, allowing you to link issues to commits, drag and drop backlog planning, email and chat notifications, and Wikis for making sure your workflows are well documentated.
From here you can assign technical debt to the team to fix, tracking its progress through to remediation. You can even use Planio as a robust bug tracking solution.
Real-life example:
Knowing that the AI framework is due a major upgrade in 12 months, Johan ensures his technical team clearly document how they’ve implemented the AI model within the Tick app. This includes detailed technical designs, developer notes, and results from their testing.
6. Ringfence time, budget, and effort for Technical Debt in every sprint
With your technical debt identified and logged, you now need to plan for managing it. Where many companies go wrong is in trying to squeeze technical debt remediation into the sides of their other big projects.
For the best results, dedicate time, budget, and sprint effort to technical debt to ensure it gets the attention it deserves.
Some resources to help:
- Schedule technical debt releases. Re-think your release planning process by including dedicated releases for bug-fixes and resolving technical debt. This sets stakeholder expectations while also giving you the budget and resources you need to properly address technical debt.
- Use data to tell the story. It’s always difficult to secure funding to fix errors rather than create shiny new features, so use Agile metrics to persuade stakeholders of the risks, and the value of addressing technical debt.
Real-life example:
Johan ringfences some of the team’s technical capacity in 10 months time to upgrade the AI framework to the new version. This helps Tick reduce their technical debt and instability risk, while also unlocking new functionalities to improve the app moving forwards.
Final thoughts: Technical debt can be a tool — if you use it correctly
When companies are new and exciting, the focus is on growing and scaling as quickly and cost-effectively as possible. While there are benefits to this, making cheap decisions can lead to expensive fixes when addressing technical debt in the future.
While technical debt isn’t all bad, like financial debt, it needs to be managed. That’s why development teams should learn about technical debt, and consider it throughout the planning, development, and testing phases of their projects.
To help you manage your technical debt, we recommend using tools like Planio to document your solutions and plan your remediation in the future.
Handy repository hosting, document storage, and issue tracking help with this, making Planio the perfect partner to enable you and your team to stay organized and keep technical debt under control!
Try Planio with your team — free for 30 days (no credit card required!)