Technical debt is an important — but often unclear — concept for engineering teams. In software development, technical debt, also called code debt or tech debt, is defined as the cost of refactoring a piece of code or system to keep it working efficiently.
It can be caused by outdated architecture, a change in requirements, or the result of choosing an easier solution instead of a better, but more difficult one. It is the additional rework that results when an engineering team takes shortcuts due to project constraints.
Technical debt has unique significance for businesses building products and services in the cloud. The flexibility of cloud platforms (and their cost structure) introduces a new consequence of tech debt: burgeoning cloud costs. Poorly engineered systems with high code debt can lead to increasing cloud costs. For example, choosing a NAT Gateway instead of a VPC endpoint when a VPC endpoint would work just fine can significantly drive up your data transfer costs.
In this article, we’ll discuss some of the best technical debt metrics and ways to manage technical debt, especially in the cloud.
Measuring technical debt is important for two main reasons:
Tech debt decreases productivity. Technical debt is an ongoing tax on the cost of operating and extending a system. If you're working on a system with a lot of technical debt, more time is spent on circumventing the debt than on innovating and advancing new product features.
Tech debt grows if left unchecked. Unless you make a concerted effort to manage technical debt, it will undoubtedly grow. Over time, for the same amount of effort, you’ll achieve fewer outcomes for your business. Given the constant growth rate of technical debt in the systems your team is operating and enhancing, it's incumbent on engineering teams to have a strategy to manage that debt.
How To Measure Technical Debt
Technical debt is difficult to measure — there’s no single metric that could tell the full story. The solution is to measure the second-order effects of technical debt.
Instead of measuring how many units of technical debt you have (which is impossible) you often have to look at its impact on other business metrics.
The most important second-order metrics for technical debt calculation are:
Cycle time: Cycle time is the length of time it takes to accomplish a task. In programming, it’s the time between a developer’s first commit in a section of code and when that code is deployed. Shorter cycle times indicate an optimized process and low technical debt. The opposite is true for longer cycle times.
Stability and quality: If it takes a longer time to make a change — and solve a problem for good vs. just implementing a workaround — then you probably have a tech debt problem. An indication of instability is when a change in one part of a system leads to changes in other parts unrelated to the system.
Developer happiness: If your developers are increasingly unhappy when they work on a particular system compared to others, that's an indicator that there might be higher tech debt in that system.
TDR is a ratio of the cost to fix a software system (remediation cost) to the cost of developing it (development cost). For example, if the chosen metric is time, TDR measures the amount of time it will take to fix the problem. For steps to calculate, you can read more here.
However, the technical debt ratio is not a standardized formula used widely across engineering teams.
How To Manage Technical Debt
Technical debt can easily snowball into a problem that requires considerable resources to fix. To avoid this, below are some of the ways to effectively manage it.
Monitor technical debt regularly. Keep an eye continuously on the second-order metrics that are directly impacted by technical debt. Tech debt usually becomes a problem when left unmonitored.
Dedicate a percentage of engineering output to evaluating existing technical debt. Set aside time every month or quarter. For instance, you could focus 20% of your engineering output on technical debt. It’s also a good idea to split such projects into two categories: small and large.
The small ones engineering can tackle quickly without necessarily making it a large roadmap priority and going through the process of getting buy in from the rest of the business. The larger ones will have a big enough impact on your deliverables for a period of time that it should be scheduled and visible to the entire business.
Add business context when communicating technical debt. Communicating the need for technical debt projects to other business leaders is crucial, but often a challenge for engineering leaders.
Instead of saying, “We need to refactor our SSO,” you should say something like, “20% of our outages last quarter were due to our SSO service straining under scale constraints. Given our focus on the enterprise segment, we're taking some time this quarter to ensure that part of the system is ready for us to continue to scale up this segment.”
By linking technical debt projects to measurable business outcomes, you make it easier to boost their priority, get approval for such projects, and make sure everyone understands the outcomes and why they are relevant to the entire company.
Managing Cloud Cost Debt With CloudZero
If you have hundreds of engineers building in the cloud without clear visibility into how their technical decisions impact your cloud spend, they may build products with high tech debt, leaving you with considerable cloud bills at the end of the day.
CloudZero is a cost intelligence solution that makes it easy for engineering teams to see how their technical decisions affect cloud spend. It provides a clear picture of how each team, product, or feature is contributing to costs. By delivering relevant cost data directly to engineers, CloudZero helps them make better technical decisions, making it easier to keep tech-debt-related costs as low as possible.
Want to see how it works? to see CloudZero in action.
STAY IN THE LOOP
Join thousands of engineers who already receive the best AWS and cloud cost intelligence content.