In their haste to deliver software capabilities, developers sometimes engage less-than-optimal practices. Unfortunately, this can lead to unexpected rework costs that offset the benefits of rapid delivery. Technical debt is a metaphor that conceptualizes the tradeoff between short-term and long-term value. Taking shortcuts to expedite the delivery of features in the short term incurs debt, analogous to financial debt, that must be paid off later to optimize long-term success. Managing technical debt is an increasingly critical aspect of producing cost-effective, timely, and high-quality software products. A delicate balance is needed between the desire to release new software features rapidly to satisfy users and the desire to practice sound software engineering that reduces rework. The notion of technical debt creates a concrete way for software development teams to discuss the value and priority of system quality, maintainability, evolvability, and time-to market issues. Our current work advances research in managing architectural technical debt by investigating how to measure, monitor, and control it so as to balance short-term value delivery with longer term effects.
The SEI's early efforts in this area focused on providing software engineers visibility into technical debt from strategic and architectural perspectives. This work produced a release planning framework that clarifies how to integrate architectural concerns with Agile project management methods, such as Scrum, and lean software development. It also helps users relate requirements with architectural decisions. Understanding these dependencies helps software developers make informed decisions about architectural technical debt.
One major theme of the SEI's research on technical debt is identifying metrics that can be extracted from the code and module structures of software systems and using them to provide insights into architectural dependencies that impact system-wide architectural rework. By applying such metrics, researchers at the SEI hope to enhance the state of the art in integrating architectural information within development environments and contribute to increasing developer productivity, efficiency, and system quality.
So that others can benefit from our research and experience, the SEI