2 § It is the result of prioritizing speedy delivery over perfect code. § It is a metaphor to raise awareness: A debt requires interest payment (extra development effort). § A little debt speeds development so long as it is paid back promptly. The danger occurs when the debt is not repaid. Every minute spent on not-quite-right code counts as interest on debt – R. Cunningham (1992) Technical Debt
5 § Unpredictable tipping point. Debt grows in an unpredictable nonlinear fashion. § Increased time to delivery. The greater the debt today, the slower the velocity tomorrow. § Defects. Debt increase complexity; therefore, it is harder to do things correctly. § Rising Cost of Change. Built + Repair § Product Atrophy. Product ceases to be a viable option. § Decreased predictability. Any prediction is nearly impossible. Estimates become bad estimates even for the most experienced team members. § Underperformance (teamwork). Increment of technical debt lower development performance and therefore reduce expectations of what is possible. § Frustration. People burn out. Consequences
6 Technical Debt Bad design Defects Insufficient test coverage Excessive manual testing Poor integration management Definition 1. Naïve Debt 2. Unavoidable Debt 3. Strategic Debt bad things that plague systems
7 § Not originally intended to be referred to as technical debt (Cunningham). Unintentional debt (McConnell 2007). Just mess (Martin 2008) Reckless debt (Fowler 2009). § Origin: Team members or business immaturity or process deficiencies that lead to sloppy design, poor engineering practices, and a lack of testing. § Solution: Proper training. Good understanding of technical practices. Naïve Debt
8 § Unpredictable and unpreventable. § Product and product design evolution over time. § Origin: Design and implementation decisions. § Solution: No big deal, just payback, sooner the better Unavoidable Debt
9 § Debt can be a tool that can be used to better quantify and leverage the economics of important time-sensitive decisions. § Origin: Shortcuts during product development to achieve a short-term goal. § Solution: It is a tool, but as with any debt, it should be repaid. Strategic Debt
11 1. Avoid accrual, i.e., the accumulation or increase of debt over time. 2. Make debt visible, i.e., do not ignore it or try to hide it. Experts could assume you are naïve. 3. Repay periodically, i.e., schedule your payments as a routine. Each sprint uses some resources (time) to pay selected (targeted technical debt). Activities for managing technical debt
12 § No product is debt free. So how much technical debt can we take on? § As a team, balance business and technical perspectives to make trade-offs. § But, Do Not add naïve debt. Do TDD, automating testing, continuous integration, refactoring, etc. • Track velocity over time Key ideas
13 • Boy Scout rule Leave the campground cleaner than you found it Clean up until you reach a predefined threshold. And classify the rest, adding entries into the product backlog, such as a [known technical debt] Key Ideas
19 Let’s Work Do you have Technical Debt? Which one (Naïve, Unavoidable, Strategic)? What is the plan for managing technical debt (including but not limited to REPAY)? What is your current velocity (Sprint zero)?
Winter 2023 Copyright. These slides can only be used as study material for the class CSC308 at Cal Poly. They cannot be distributed or used for another purpose.