Managing Technical Debt: Reducing Friction in Software Development
Total Page:16
File Type:pdf, Size:1020Kb
Managing Technical Debt Managing Technical Debt Reducing Friction in Software Development Philippe Kruchten Robert Nord Ipek Ozkaya Executive Editor Kim Spenceley The SEI Series in Software Engineering Development Editor Kiran Kumar Panigrahi Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in this book, Managing Editor and the publisher was aware of a trademark claim, the designations have been printed Sandra Schroeder with initial capital letters or in all capitals. No warranty. This Carnegie Mellon University and Software Engineering Institute Senior Project Editor material is furnished on an “as-is” basis. Carnegie Mellon University makes no warranties Lori Lyons of any kind, either expressed or implied, as to any matter including, but not limited to, warranty of fitness for purpose or merchantability, exclusivity, or results obtained from Copy Editor use of the material. Carnegie Mellon University does not make any warranty of any kind Catherine D. Wilson with respect to freedom from patent, trademark, or copyright infringement. Indexer Special permission to reproduce portions of the texts and images was granted by the Ken Johnson Software Engineering Institute. CMM, CMMI, Capability Maturity Model, Capability Maturity Modeling, Proofreader Carnegie Mellon, CERT, and CERT Coordination Center are registered in the U.S. Abigail Manheim Patent and Trademark Office by Carnegie Mellon University. Cover Designer The authors and publisher have taken care in the preparation of this book, but make no Chuti Prasertsith expressed or implied warranty of any kind and assume no responsibility for errors or omissions. No liability is assumed for incidental or consequential damages in connection Compositor with or arising out of the use of the information or programs contained herein. codeMantra For information about buying this title in bulk quantities, or for special sales opportunities (which may include electronic versions; custom cover designs; and content particular to your business, training goals, marketing focus, or branding interests), please contact our corporate sales department at [email protected] or (800) 382-3419. For government sales inquiries, please contact [email protected]. For questions about sales outside the U.S., please contact [email protected]. Visit us on the Web: informit.com/aw Library of Congress Control Number: 2019931698 Copyright © 2019 Pearson Education, Inc. All rights reserved. This publication is protected by copyright, and permission must be obtained from the publisher prior to any prohibited reproduction, storage in a retrieval system, or transmission in any form or by any means, electronic, mechanical, photocopying, recording, or likewise. For information regarding permissions, request forms and the appropriate contacts within the Pearson Education Global Rights & Permissions Department, please visit www.pearsoned.com/permissions/. ISBN-13: 978-0-13-564593-2 ISBN-10: 0-13-564593-X 1 19 To Sylvie, Nicolas, Alice, Zoé, Harmonie, Claire, and Henri —PK To Victoria and Richard —RN To Ibrahim, Zeynep, and Zehra —IO Contents at a Glance Foreword . xiii Preface . xv Acknowledgments . xix About the Authors . xxi About the Contributors . xxiii Acronyms . xxv SEI Figures for Managing Technical Debt . .xxvii Part I: Exploring the Technical Debt Landscape . 1 Chapter 1: Friction in Software Development . 3 Chapter 2: What Is Technical Debt? . 19 Chapter 3: Moons of Saturn—The Crucial Role of Context . 37 Part II: Analyzing Technical Debt . 49 Chapter 4: Recognizing Technical Debt . 51 Chapter 5: Technical Debt and the Source Code . 65 Chapter 6: Technical Debt and Architecture . 83 Chapter 7: Technical Debt and Production . 103 Part III: Deciding What Technical Debt to Fix . 115 Chapter 8: Costing the Technical Debt . 117 Chapter 9: Servicing the Technical Debt . 131 vi Contents at a Glance vii Part IV: Managing Technical Debt Tactically and Strategically . 149 Chapter 10: What Causes Technical Debt? . 151 Chapter 11: Technical Debt Credit Check . 167 Chapter 12: Avoiding Unintentional Debt . 179 Chapter 13: Living with Your Technical Debt . 195 Glossary . 207 References . 209 Index . 217 This page intentionally left blank Contents Foreword . xiii Preface . xv Acknowledgments . xix About the Authors . xxi About the Contributors . xxiii Acronyms . xxv SEI Figures for Managing Technical Debt . .xxvii Part I: Exploring the Technical Debt Landscape . 1 Chapter 1: Friction in Software Development . 3 The Promise of Managing Technical Debt . 3 Technical Debt A-B-C . 5 Examples of Technical Debt . 6 Your Own Story About Technical Debt? . 11 Who Is This Book For? . 12 Principles of Technical Debt Management . 13 Navigating the Concepts of the Book . 14 What Can You Do Today? . 16 For Further Reading . 17 Chapter 2: What Is Technical Debt? . 19 Mapping the Territory . 19 The Technical Debt Landscape . 20 Technical Debt Items: Artifacts, Causes, and Consequences . 22 Principal and Interest . 24 Cost and Value . 27 Potential Debt versus Actual Debt . 32 The Technical Debt Timeline . 33 What Can You Do Today? . 35 For Further Reading . 35 ix x Contents Chapter 3: Moons of Saturn—The Crucial Role of Context . 37 “It Depends…” . 37 Three Case Studies: Moons of Saturn . 39 Technical Debt in Context . 44 What Can You Do Today? . 48 For Further Reading . 48 Part II: Analyzing Technical Debt . 49 Chapter 4: Recognizing Technical Debt . 51 Where Does It Hurt? . 51 What Are the Visible Consequences of Technical Debt? . 54 Writing a Technical Debt Description . 55 Understanding the Business Context for Assessing Technical Debt . 58 Assessing Artifacts Across the Technical Debt Landscape . 60 What Can You Do Today? . 63 For Further Reading . 64 Chapter 5: Technical Debt and the Source Code . 65 Looking for the Magic Wand . 65 Understand Key Business Goals . 68 Identify Questions About the Source Code . 70 Define the Observable Measurement Criteria . 72 Select and Apply an Analysis Tool . 75 Document the Technical Debt Items . 76 Then Iterate . 78 What Happens Next? . 79 What Can You Do Today? . 80 For Further Reading . 81 Chapter 6: Technical Debt and Architecture . 83 Beyond the Code . 83 Ask the Designers . ..