Managing Technical Debt
Table of Contents
- 1. Managing Technical Debt
- 1.1. Managing Technical Debt
- 1.2. Reducing Friction in Software Development
- 1.3. Part I: Exploring the Technical Debt Landscape
- 1.3.1. Chapter 1. Friction in Software Development
- 1.3.1.1. The Promise of Managing Technical Debt
- 1.3.1.2. Technical Debt A-B-C
- 1.3.1.3. Examples of Technical Debt
- 1.3.1.4. Your Own Story About Technical Debt?
- 1.3.1.5. Who Is This Book For?
- 1.3.1.6. Principles of Technical Debt Management
- 1.3.1.7. Navigating the Concepts of the Book
- 1.3.1.8. What Can You Do Today?
- 1.3.1.9. For Further Reading
- 1.3.2. Chapter 2. What Is Technical Debt?
- 1.3.2.1. Mapping the Territory
- 1.3.2.2. The Technical Debt Landscape
- 1.3.2.3. Technical Debt Items: Artifacts, Causes, and Consequences
- 1.3.2.4. Principal and Interest
- 1.3.2.5. Cost and Value
- 1.3.2.6. Potential Debt versus Actual Debt
- 1.3.2.7. The Technical Debt Timeline
- 1.3.2.8. What Can You Do Today?
- 1.3.2.9. For Further Reading
- 1.3.3. Chapter 3. Moons of Saturn—The Crucial Role of Context
- 1.3.1. Chapter 1. Friction in Software Development
- 1.4. Part II: Analyzing Technical Debt
- 1.4.1. Chapter 4. Recognizing Technical Debt
- 1.4.1.1. Where Does It Hurt?
- 1.4.1.2. What Are the Visible Consequences of Technical Debt?
- 1.4.1.3. Writing a Technical Debt Description
- 1.4.1.4. Understanding the Business Context for Assessing Technical Debt
- 1.4.1.5. Assessing Artifacts Across the Technical Debt Landscape
- 1.4.1.6. What Can You Do Today?
- 1.4.1.7. For Further Reading
- 1.4.2. Chapter 5. Technical Debt and the Source Code
- 1.4.2.1. Looking for the Magic Wand
- 1.4.2.2. Understand Key Business Goals
- 1.4.2.3. Identify Questions About the Source Code
- 1.4.2.4. Define the Observable Measurement Criteria
- 1.4.2.5. Select and Apply an Analysis Tool
- 1.4.2.6. Document the Technical Debt Items
- 1.4.2.7. Then Iterate
- 1.4.2.8. What Happens Next?
- 1.4.2.9. What Can You Do Today?
- 1.4.2.10. For Further Reading
- 1.4.3. Chapter 6. Technical Debt and Architecture
- 1.4.4. Chapter 7. Technical Debt and Production
- 1.4.1. Chapter 4. Recognizing Technical Debt
- 1.5. Part III: Deciding What Technical Debt to Fix
- 1.5.1. Chapter 8. Costing the Technical Debt
- 1.5.1.1. Shining an Economic Spotlight on Technical Debt
- 1.5.1.2. Refine the Technical Debt Description
- 1.5.1.3. Calculate the Cost of Remediation
- 1.5.1.4. Calculate the Recurring Interest
- 1.5.1.5. Compare Cost and Benefit
- 1.5.1.6. Manage Technical Debt Items Collectively
- 1.5.1.7. What Can You Do Today?
- 1.5.1.8. For Further Reading
- 1.5.2. Chapter 9. Servicing the Technical Debt
- 1.5.1. Chapter 8. Costing the Technical Debt
- 1.6. Part IV: Managing Technical Debt Tactically and Strategically
- 1.6.1. Chapter 10. What Causes Technical Debt?
- 1.6.1.1. The Perplexing Art of Identifying What Causes Debt
- 1.6.1.2. The Roots of Technical Debt
- 1.6.1.3. What Causes Technical Debt?
- 1.6.1.4. Causes Rooted in the Business
- 1.6.1.5. Causes Arising from Change in Context
- 1.6.1.6. Causes Associated with the Development Process
- 1.6.1.7. Causes Arising from People and Team
- 1.6.1.8. To Conclude
- 1.6.1.9. What Can You Do Today?
- 1.6.1.10. For Further Reading
- 1.6.2. Chapter 11. Technical Debt Credit Check
- 1.6.2.1. Identifying Causes: Technical Debt Credit Check
- 1.6.2.2. Four Focus Areas for Understanding the State of a Project
- 1.6.2.3. Diagnosing the Causes of Technical Debt in Phoebe
- 1.6.2.4. Diagnosing the Causes of Technical Debt in Tethys
- 1.6.2.5. What Can You Do Today?
- 1.6.2.6. For Further Reading
- 1.6.3. Chapter 12. Avoiding Unintentional Debt
- 1.6.4. Chapter 13. Living with Your Technical Debt
- 1.6.5. Glossary
- 1.6.6. References
- 1.6.7. Index
- 1.6.8. Technical Debt Description
- 1.6.1. Chapter 10. What Causes Technical Debt?
1. Managing Technical Debt
1.1. Managing Technical Debt
1.2. Reducing Friction in Software Development
1.2.1. Contents at a Glance
1.2.2. Contents
1.2.3. Foreword
1.2.4. Preface
1.2.5. Acknowledgments
1.2.6. About the Authors
1.2.7. About the Contributors
1.2.8. Acronyms
1.2.9. SEI Figures for Managing Technical Debt
1.3. Part I: Exploring the Technical Debt Landscape
1.3.1. Chapter 1. Friction in Software Development
1.3.1.1. The Promise of Managing Technical Debt
1.3.1.2. Technical Debt A-B-C
1.3.1.3. Examples of Technical Debt
1.3.1.4. Your Own Story About Technical Debt?
1.3.1.5. Who Is This Book For?
1.3.1.6. Principles of Technical Debt Management
1.3.1.7. Navigating the Concepts of the Book
1.3.1.8. What Can You Do Today?
1.3.1.9. For Further Reading
1.3.2. Chapter 2. What Is Technical Debt?
1.3.2.1. Mapping the Territory
1.3.2.2. The Technical Debt Landscape
1.3.2.3. Technical Debt Items: Artifacts, Causes, and Consequences
1.3.2.4. Principal and Interest
1.3.2.5. Cost and Value
1.3.2.6. Potential Debt versus Actual Debt
1.3.2.7. The Technical Debt Timeline
1.3.2.8. What Can You Do Today?
1.3.2.9. For Further Reading
1.3.3. Chapter 3. Moons of Saturn—The Crucial Role of Context
1.3.3.1. ``It Depends…’’
1.3.3.2. Three Case Studies: Moons of Saturn
1.3.3.3. Technical Debt in Context
1.3.3.4. What Can You Do Today?
1.3.3.5. For Further Reading
1.4. Part II: Analyzing Technical Debt
1.4.1. Chapter 4. Recognizing Technical Debt
1.4.1.1. Where Does It Hurt?
1.4.1.2. What Are the Visible Consequences of Technical Debt?
1.4.1.3. Writing a Technical Debt Description
1.4.1.4. Understanding the Business Context for Assessing Technical Debt
1.4.1.5. Assessing Artifacts Across the Technical Debt Landscape
1.4.1.6. What Can You Do Today?
1.4.1.7. For Further Reading
1.4.2. Chapter 5. Technical Debt and the Source Code
1.4.2.1. Looking for the Magic Wand
1.4.2.2. Understand Key Business Goals
1.4.2.3. Identify Questions About the Source Code
1.4.2.4. Define the Observable Measurement Criteria
1.4.2.5. Select and Apply an Analysis Tool
1.4.2.6. Document the Technical Debt Items
1.4.2.7. Then Iterate
1.4.2.8. What Happens Next?
1.4.2.9. What Can You Do Today?
1.4.2.10. For Further Reading
1.4.3. Chapter 6. Technical Debt and Architecture
1.4.3.1. Beyond the Code
1.4.3.2. Ask the Designers
1.4.3.3. Examine the Architecture
1.4.3.4. Examine the Code to Get Insight into the Architecture
1.4.3.5. The Case of Technical Debt in the Architecture of Phoebe
1.4.3.6. What Can You Do Today?
1.4.3.7. For Further Reading
1.4.4. Chapter 7. Technical Debt and Production
1.4.4.1. Beyond the Architecture, the Design, and the Code
1.4.4.2. Build and Integration Debt
1.4.4.3. Testing Debt
1.4.4.4. Infrastructure Debt
1.4.4.5. The Case of Technical Debt in the Production of Phoebe
1.4.4.6. What Can You Do Today?
1.4.4.7. For Further Reading
1.5. Part III: Deciding What Technical Debt to Fix
1.5.1. Chapter 8. Costing the Technical Debt
1.5.1.1. Shining an Economic Spotlight on Technical Debt
1.5.1.2. Refine the Technical Debt Description
1.5.1.3. Calculate the Cost of Remediation
1.5.1.4. Calculate the Recurring Interest
1.5.1.5. Compare Cost and Benefit
1.5.1.6. Manage Technical Debt Items Collectively
1.5.1.7. What Can You Do Today?
1.5.1.8. For Further Reading
1.5.2. Chapter 9. Servicing the Technical Debt
1.5.2.1. Weighing the Costs and Benefits
1.5.2.2. Risk Exposure
1.5.2.3. Opportunity Cost
1.5.2.4. Paths for Servicing Technical Debt
1.5.2.5. The Release Pipeline
1.5.2.6. The Business Case for Technical Debt as an Investment
1.5.2.7. What Can You Do Today?
1.5.2.8. For Further Reading
1.6. Part IV: Managing Technical Debt Tactically and Strategically
1.6.1. Chapter 10. What Causes Technical Debt?
1.6.1.1. The Perplexing Art of Identifying What Causes Debt
A suitable description of a cause will enable a team to articulate concrete actions to take, which include eliminating the cause, deciding how to analyze and tackle the debt, and possibly making broader changes in the organization and its processes
1.6.1.2. The Roots of Technical Debt
1.6.1.3. What Causes Technical Debt?
- Unintentional debt causes:
- incompetence and reckless development behavior
- small inadvertent actions that result from lack of discipline and planning
- just not knowing any better.
- incompetence and reckless development behavior
- Intentional Debt
- Can and should be tracked in the backlog, you know it exists
- Can and should be tracked in the backlog, you know it exists
1.6.1.4. Causes Rooted in the Business
- Time and Cost Pressure
- Customers care only about introduce new functionality rapidly, giving almost no thought to what functionalities the users will need in the future (short-sighted and completely focused on tactical, immediate needs)
- Instead of taking the time to do things right, we keep adding things all over the system
- Customers care only about introduce new functionality rapidly, giving almost no thought to what functionalities the users will need in the future (short-sighted and completely focused on tactical, immediate needs)
- Misalignment of Business Goals
Lack of clear business goals will lead to TD when the designed system does not match the expectations of the customers
- Requirements Shortfall
- Not articulating detailed requirements, not implementing expected functionality,
and not understanding architecturally significant, cross-cutting requirements such as security,
performance, and availability will all cause technical debt.
- Developers often react to ambiguous and poorly understood requirements by either making narrow choices for the limited requirements they do understand or making overly general choices in the hope of anticipating the eventual requirements. Both responses add complexity
- Not articulating detailed requirements, not implementing expected functionality,
1.6.1.5. Causes Arising from Change in Context
Not relevant enough yet in our case
1.6.1.6. Causes Associated with the Development Process
- Ineffective Documentation
- architectural design and test documentation
- The documentation must be effective: accessible, pertinent, and up to date, otherwise TD occurs
- feedback loop: under pressure, some developers won’t document, which makes less likely other developers will document later on
- Without effective documentation, the process of bringing in the new team members becomes longer and more error prone
- There is a limit to “the code is the documentation”, e.g. design/architectural decisions such as using X library instead of Y (not explicit in any part of the code)
- architectural design and test documentation
- Insufficient Testing Automation
- Development teams focus on testing what they develop for the current release and not what they developed for previous releases => they introduce inconsistencies throughout the system that cause rework in the codebase, build scripts, and test suites.
- Developers are concerned that refactoring may adversely affect the system’s behavior and introduce undetected defects => they may prefer to live with not-quite-right code that does the job rather than improve the internal structure of the code at the risk of altering its behavior.
- Development teams focus on testing what they develop for the current release and not what they developed for previous releases => they introduce inconsistencies throughout the system that cause rework in the codebase, build scripts, and test suites.
- Misalignment of Processes
1.6.1.7. Causes Arising from People and Team
- Inexperienced Teams
symptoms -> it takes you forever to finish even a simple task, functions are inefficient/nedlessly complex, copy paste and code smells
- Provide the right learning environment to succeed
- Design hiring and training procedures
- Focused analysis tools to identify, prioritize, fix the issues
- Inexperienced managers cause either delays to the dev team explaining what they are doing, or by managing at a high level of abstraction, delays by putting management task on the shoulders of developers
While lack of experience can inject unintentional technical debt into a system, getting caught up in the blame game will take the product or the team nowhere.
- Provide the right learning environment to succeed
- Distributed Teams
- Undedicated Teams
This creates:
- Task switching
- Priority shifts
- Task switching
1.6.1.8. To Conclude
1.6.1.9. What Can You Do Today?
- Identify the root cause
- Take easy low-cost actions:
- Communicate the causes with your dev team
- Describe the rework necessary to reduce TD and its consequences
- Communicate the causes with your dev team
1.6.1.10. For Further Reading
Technical Debt Quadrant
Reckless | Prudent | |
---|---|---|
Deliberate | We don’t have time for design | We must ship now and deal with the consequences |
Inadvertent | What is Layering? | Now we know how we should have done it |