This document discusses how to keep product development teams moving fast while managing technical debt. It describes two types of technical debt: intentional debt from conscious tradeoffs and unintentional debt from poor practices. Technical debt leads to long delivery times, defects, and frustrated teams in a vicious cycle. The document recommends continuous integration, test automation, refactoring, and peer review to manage debt. It includes an exercise where teams plan iterations considering feature work and technical debt remediation to maximize throughput over time. The key lessons are to capture, visualize and estimate technical debt, invest time in remediation while allowing team slack, in order to maintain a fast and steady development pace.
We’re used to seeing and investing in Features and Bugs, but there are other investments needed too.http://pkruchten.wordpress.com/
Sometimes due to process, etc. but very often due to technical issues. We have a way of describing this called Technical Debt, which is based on a financial metaphor.Simpler or delayed design and implementation choices are like borrowing money. (I like "writing code" better than "skipping design" here -- JimLittle)Refactoring, implementing practices, or otherwise “doing it right” is like repaying principalSlower development due to complexity is like paying interest[a later addition] When the whole project caves in under the mess, is that like when the big guys come round and slam your hands in the car door for not paying up?
Photo by Jessica Spenglerhttp://www.flickr.com/photos/wordridden/6357610039/
http://eightvo.files.wordpress.com/2011/11/koelewijnwerk02.jpgContinuous Integration:DefinitionWithout it:Team finds issues late, rushes to fix, prone to cut cornersRisk of some work getting stale and needing to be abandonedAttribution: http://www.archersafetysigns.co.uk/prod.php?prod=7402
http://www.flickr.com/photos/jurvetson/6219463656/sizes/o/in/photolist-atAnS1-dhZrKM-atHJJo-9mvMsP-bs52Uo-bvcbis-bEWnc2-chEjh3-asg29e-biGH9K-7NJQbS-7NESvF-awbMMT-9ANyUd-9mqRC4-aXuibg-9M2QU4-7zxwmK-bdbY5i-dPuGGx/Photo by Steve JurvetsonThe photo is a Tesla – it’s not slow ;-)Automated TestingDefinitionWithout it:Defects found late, potentially not during the development processTeam less confident in making changes that introduce unintended behaviorMay push back or sandbag unnecessarilyRequires more manual testing effort to changeHigher level of bugs, reworkImplementation less testable, and often poorly designedAttribution: http://commons.wikimedia.org/wiki/File:Advanced_Automation_for_Space_Missions_figure_5-29.gif
http://www.flickr.com/photos/jollyuk/4143795151
Photo by Alex Hunghttp://www.flickr.com/photos/40077210@N00/3667199868
Phase 1: Lower cost for new featuresPhase 2: Accumlating Debt
Features backlogTech debt has accrued and the technical team has identified it and estimated the work and estimated the business impact
DebriefWhat did you learn?Technical Debt GrowsShare results (explain interesting ones)
Debrief- What did you learn
Stop digging the holeDon’t add new problemsDon’t make existing problems worseBoy Scout RuleLeave it cleaner than you found itIncremental improvementPhoto by AbhisekSardahttp://www.flickr.com/photos/reallynuts/4385681932/sizes/o/in/photolist-7FxLrJ-aL2Ngz-aN2VCP-7HYeMi-cpF5YC-7HYjKK-9k5K4T-cEcaKU-cEciJu-cEc9E3-cEc8Bf-cEceiG-cEcdbA-cEcfwm-cEcgDN-7yFDdK-ctkvPm-8vEXcj-8vBWhi-e6co5M-87q3Uk-86XQkY-ancyYm-7JDYGF-8itvxq-7H6R6f-8itvBU-7H6QTw-7H6QZj-7An2T3-7Fpg6m-8nkuqi/
Visualize your debt, make it explicitPhoto by Oliver Hammondhttp://www.flickr.com/photos/olivander/58499153/
Photo by Kristi Johnsonhttp://www.flickr.com/photos/46142663@N03/4451325321