jgs CSC 309 Software Engineering II Lecture 07: Technical Debt Dr. Javier Gonzalez-Sanchez [email protected] www.javiergs.com Building 14 -227 Office Hours: By appointment
jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 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
jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 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
jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 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
jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 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
jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 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
jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 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
jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 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
jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 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
jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 16 Office Hours Tuesday and Thursday 3 - 5 pm But an appointment required Sent me an email – [email protected]
jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 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)?
jgs CSC 309 Software Engineering II Javier Gonzalez-Sanchez, Ph.D. [email protected] 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.