Managing Technical Debt with Data-Driven Analysis
Created September 2017 • Updated February 2022
Almost every software project carries some technical debt, but its causes and consequences can be elusive. We develop tools and techniques that identify technical debt and provide a complete view of the debt that you need to manage.
Technical Debt: A Compounding Problem
Technical debt is a term that conceptualizes the tradeoff between the short-term benefits of rapid delivery and the long-term value of developing a software system that is easy to evolve, modify, repair, and sustain. Like financial debt, technical debt can be a burden or an investment. Technical debt can be a burden when it is taken on unintentionally without a solid plan to manage it. Technical debt can also be part of an intentional investment strategy that speeds up development … as long as you have a plan to pay it back before the interest swamps your principal.
The U.S. Department of Defense (DoD) must constantly manage the dual challenges of budget constraints and the need to accelerate capability delivery. These challenges have encouraged the DoD to adopt incremental approaches to software development and to shift from the acquisition of new systems to the more cost-effective evolution and sustainment of existing systems. In this context, accumulated design and implementation decisions made for expediency, in the absence of structural quality requirements or without due consideration for sustainment and evolution, often result in systems that become prohibitively expensive to maintain or extend. In other words, these systems have a lot of technical debt.
Current tools for quantifying debt focus primarily on code quality and implementation decisions, such as complexity and cyclicity metrics. Our research has shown that key contributors to technical debt are design and architectural decisions that are not managed in terms of their consequences for system quality and rework. Existing tools cannot detect technical debt that results from design and architectural decisions. Moreover, the DoD and industry have started to invest heavily in model-driven and compositional software development approaches that existing technical debt identification techniques do not address. These types of debt are harder to recognize and occur earlier in system development, so the consequences can accrue for longer periods of time before they become visible.
Our Solution: Measure It and Manage It
The SEI is making software more sustainable through a comprehensive approach to managing technical debt. We are developing tools and techniques for uncovering technical debt that integrate data from multiple commonly available sources to reveal problematic decisions and quantify their consequences in a repeatable and reliable way. Together, the tools and techniques provide a complete view of the technical debt that you need to manage.
Our tooling approach combines existing code-oriented analysis tools with techniques that uncover and analyze architectural abstractions to reveal the structural causes of technical debt. It provides a more accurate scope for technical debt that exists in the system and assists both ongoing development and difficult sustainment decisions such as how to balance system improvements, early delivery, and upgrades.
Our Approach: Automating Technical Debt Analysis Through Software Analytics
We combine techniques from machine learning, refactoring and code analysis, and data mining with multiple data sources to describe technical debt items that identify problematic design issues.
- Create a technical debt classifier: Apply topic-modeling algorithms to issue tracker data to extract topics related to rework; extract categories of design related to technical debt.
- Correlate analysis rules with technical debt topics: Identify recurring design concepts and their mappings to code analysis rules; run code analyzers to detect quality violations to identify candidate technical debt items.
- Consolidate technical debt items: Run criteria for consolidations, and extract additional affected files with related violations.
- Rank technical debt items: Identify defects, change, and bug churn and locations in the code base that require changes; run causal analysis, and create an initial ranking.
This project will deliver a suite of tools and techniques for technical debt analytics, including
- a prototype tool that demonstrates clustering and ranking of technical debt items
- an extraction technique and a description template for technical debt items
- data set exemplars for organizations and researchers
Learn More
5 Recommendations to Help Your Organization Manage Technical Debt
March 25, 2024 Blog Post
Ipek Ozkaya, Brigid O'Hearn
This SEI Blog post summarizes recommendations arising from an SEI study that apply to the Department of Defense and other development organizations seeking to analyze, manage, and reduce technical...
readReport to the Congressional Defense Committees on National Defense Authorization Act (NDAA) for Fiscal Year 2022 Section 835 Independent Study on Technical Debt in Software-Intensive Systems
December 07, 2023 Technical Report
Ipek Ozkaya, Forrest Shull, Julie B. Cohen, Brigid O'Hearn
This independent study of technical debt in software-intensive systems was sent to Congress in December 2023 to satisfy the requirements of NDAA Section...
readAn Exploration of Enterprise Technical Debt
April 18, 2023 Podcast
Stephany Bellomo
Stephany Bellomo, a principal engineer in the SEI’s Software Solutions Division, talks with principal researcher Suzanne Miller about identifying and remediating enterprise technical...
learn moreExperiences Documenting and Remediating Enterprise Technical Debt
December 19, 2022 Blog Post
Stephany Bellomo
This SEI Blog post provides examples of enterprise technical debt and the risk it represents taken from real-world...
read10 Years of Research in Technical Debt and an Agenda for the Future
August 22, 2022 Blog Post
Robert Nord, Ipek Ozkaya
This post reviews the evolution of the field of technical debt and identifies open research questions that will drive future...
readManaging Technical Debt: Reducing Friction in Software Development
April 19, 2019 Book
Philippe Kruchten, Robert Nord, Ipek Ozkaya
This book is for every software professional who wants to accelerate innovation in existing systems or build new systems that will be easier to maintain and...
read