University of Southern California Center for Systems and Software Engineering Technical Debt CS 577 Software Engineering Supannika Koolmanojwong
University of Southern California Center for Systems and Software Engineering Wednesday Oct 30 Team Presentation Each team will briefly introduce your project Team 3 – OCD: Boundary Diagram, Business Workflow, Project plan (5 minutes) Team 4 – Prototype (10 minutes) Team 6 – Prototype (10 minutes) Team 13 – Prototype (10 minutes) Team 14 – Prototype (10 minutes) Team 16 – Prototype (10 minutes) Team 15 – Risks & Configuration Management & Quality Management Strategy (5 minutes) 2
University of Southern California Center for Systems and Software Engineering Outline Total Cost of Ownership Technical Debt 3
University of Southern California Center for Systems and Software Engineering What are the cost of a software? Think about the whole life cycle 4
University of Southern California Center for Systems and Software Engineering Total cost of ownership a financial estimate whose purpose is to help consumers and enterprise managers determine direct and indirect costs of a product or system. –including the costs to research, develop, acquire, own, operate, maintain, and dispose of a system 5
University of Southern California Center for Systems and Software Engineering Potential total cost of ownership Computer hardware and programs Operation expensesLong term expenses HW and SW Network Server Workstation Installation & integration Purchasing research Warranties and licenses License tracking - compliance Migration expenses Risks: susceptibility to vulnerabilities, availability of upgrades, patches and future licensing policies, etc. Infrastructure Electricity Testing costs Downtime, outage and failure expenses Diminished performance Security (including breaches, loss of reputation, recovery & prevention) Backup and recovery process Technology training Audit Insurance IT personnel Replacement Future upgrade or scalability expenses Decommissioning 6
University of Southern California Center for Systems and Software Engineering 7
University of Southern California Center for Systems and Software Engineering Relative* Total Ownership Cost (TOC) For single system life cycle (TOC-SS) ~5% architecture investment ~25% architecture investment * Cumulative architecting and rework effort relative to initial development effort
University of Southern California Center for Systems and Software Engineering Technical Debt coined by Ward Cunningham
University of Southern California Center for Systems and Software Engineering Technical Debt “is a measure of how untidy or out-of-date the development work area for a product is” Not the deferred requirements 10
University of Southern California Center for Systems and Software Engineering Technical Debt “I don’t know what happened, I just changed one line” “We can’t upgrade, It will break” “We can’t upgrade the code, we don’t have time” “We can’t upgrade the code, no one understands it” “Just put in the comment XXX, we will do it later” “Just put in the TODO comment” 11
University of Southern California Center for Systems and Software Engineering Interest paymentsextra effort in future development because of the quick and dirty design choice continue paying the interest suffer for performance, problem is still there pay down the principalrefactoring the quick and dirty design into the better design; also reduce interest payments in the future 12
University of Southern California Center for Systems and Software Engineering 13
University of Southern California Center for Systems and Software Engineering Technical Debt intentional technical debt –cost to taking short cuts unintentional technical debt –making mistakes –Conscious decision to optimize for the “present” rather than the “future” cost of not dealing with these short cuts and mistakes will increase over time. Read more: 14
University of Southern California Center for Systems and Software Engineering Common causes of technical debt Business pressures Lack of process or understanding Lack of building loosely coupled components (hard-coded) Lack of documentation Parallel Development Delayed Refactoring 15
University of Southern California Center for Systems and Software Engineering Technical Debt Architecture or the platform technology mistake Scalability, reliability Foundations are poorly design you don’t find out until too late (operations phase) no choice but to start again or rewrite big chunk to keep it working Read more: 16
University of Southern California Center for Systems and Software Engineering Technical Debt Error-prone code “.. If I change X, it is going to break Y, I think..” “ Don’t touch that code, last time we did, we spent a week fixing it…” 20% of the code where 80% of bugs are found Hard to understand Dangerous to change because done poorly one in the first place Not rewriting this code is one of the most expensive mistakes that developers make Read more:
University of Southern California Center for Systems and Software Engineering Technical Debt Not easily tested “.. I thought we had a test for that..” Don’t have good automated tests Tests keep falling apart when you change the code Testing costs tend to go up over time as you write more code Read more: 18
University of Southern California Center for Systems and Software Engineering Technical Debt Code that mysteriously works nobody is sure how or why Might be written by the geek who left the company if nobody on the team understands it, it’s a time bomb Read more: 19
University of Southern California Center for Systems and Software Engineering Technical Debt Others Forward and backward compatibility –Short term debt Duplicate, copy-and-paste code –How many ? Trackable ? Hard coding Out of date documentation –“We just lost the drive, where are the backups” –If nobody is using it, get rid of it. If people are using it, why isn’t it up to date? Read more: 20
University of Southern California Center for Systems and Software Engineering Technical Debt Cost Debt (in man days) cost_to_fix_duplications + cost_to_fix_violations + cost_to_comment_public_API + cost_to_fix_uncovered_complexity + cost_to_bring_complexity_below_threshold + cost_to_cut_cycles_at_package_level average $3.61 to $5.42 per line of code. Example of Technical Debt Calculation 21
University of Southern California Center for Systems and Software Engineering Technical Debt Observations “Agile Project Management”, Jim Highsmith, second edition 22
University of Southern California Center for Systems and Software Engineering Types of Debt “M anaging Software Debt: Building for Inevitable Change”, Chris Sterling Technical Debt –These are activities that a team or team members choose not to do well now and will impede future development if left undone Quality Debt –There is a diminishing ability to verify the functional and technical quality of software Configuration Management Debt –Integration and release management becomes more risky, complex and error-prone Design Debt –The cost of adding features is increasing toward the point where it is more than the cost of writing from scratch. Platform Debt –The availability of people to work on software changes is becoming limited or cost-prohibitive. 23
University of Southern California Center for Systems and Software Engineering 70% 85% 95% Committed Costs Cost to Extract Defects 3X-6X 20X-100X 500X-1,000X The Cost of Undetected Defects 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% Cumulative Percentage of Life-Cycle Cost 15% Design 20% Development 50% Production/ Test 100% Operation Disposal Concept 8% Reference: Defense Systems Management College (DAU) Time 24
University of Southern California Center for Systems and Software Engineering Analysis DesignImplementation TestIntegration Development Cost(Perfect World) % Effort per Phase 25
University of Southern California Center for Systems and Software Engineering Analysis DesignImplementation TestIntegration Defect InsertionDefect detection & Removal Design Defects Integration Defects Typical Defect Profiles Implementation Defects Classification of Defects 26
University of Southern California Center for Systems and Software Engineering Analysis DesignImplementation TestIntegration Development Cost(Real World) % Effort per Phase 27
University of Southern California Center for Systems and Software Engineering Analysis DesignImplementation TestIntegration Development Cost % Effort per Phase Real worldPerfect World 28
University of Southern California Center for Systems and Software Engineering Analysis DesignImplementation TestIntegration Development Cost % Effort per Phase Technical Debt? Technical Debt? Technical Debt? Technical Debt? Real worldPerfect World 29
University of Southern California Center for Systems and Software Engineering Analysis DesignImplementation TestIntegration Development Cost % Effort per Phase Technical Debt? Technical Debt? Real worldPerfect World 30
University of Southern California Center for Systems and Software Engineering Analysis DesignImplementation TestIntegration COTS Integration % Effort per Phase Technical Debt? Real worldPerfect World 31
University of Southern California Center for Systems and Software Engineering Fixing technical debt 80/20 rule –20% initial build –80% clean up 32
University of Southern California Center for Systems and Software Engineering Fixing technical debt Big Bang –no new features for a year? Really? –spend some time cleaning up the mess –Good ? Dedicated Team –Have another team dedicated –Good ? 80/20 rule ? Boy Scout –remove technical debt little and often –If no tests, add some. If poor test, improve them. If bad code, refactor it –The boy scout rule – leave the camp cleaner than you found it 33
University of Southern California Center for Systems and Software Engineering Fixing technical debt $$$Think time & risk & $$$ No gold-plating –Unnecessary task that no one wants BigResearchUpFront vs BigDesignUpFront 34
University of Southern California Center for Systems and Software Engineering Technical Debt vs Agile : Bad Quick and dirty approach Scalability vs DoTheSimplestThingThatCouldPossiblyWork –Just-in-time Scalability change the architecture in response to actual customer demand –Wasted Code 35
University of Southern California Center for Systems and Software Engineering Technical Debt vs Agile : Good Get feedback faster Smaller batches 36
University of Southern California Center for Systems and Software Engineering Technical Debt vs Lean : Good Less waste, less debt Just-in-time nature 37
University of Southern California Center for Systems and Software Engineering Technical Debt vs NDI : Bad Product Development Leverage –Your product is fortified by others Open-source, COTS, Services Pros: Faster Cons –Code understanding –Different coding styles, architecture, quality –No direct control 38
University of Southern California Center for Systems and Software Engineering 39
University of Southern California Center for Systems and Software Engineering 40
University of Southern California Center for Systems and Software Engineering 41
University of Southern California Center for Systems and Software Engineering Enablers and Inhibitors of Technical Debt For a new single system For an existing single system A system of systems 42
University of Southern California Center for Systems and Software Engineering Top 10 Inhibitors – Similarities 43 A New Single SystemAn Existing Single SystemA System of Systems Requirements Volatility Lack of Interoperability UnprecedentednessHigh numbers of external interfaces Lack of / incompatible standard & protocol Delayed authority to proceed/start with fixed milestone UnprecedentednessRequirements Volatility Infeasible schedule/staffing profileVague RequirementsUnprecedentedness Lack of Domain ExperienceEmbedded poor quality softwareHigh numbers of external interfaces Technology VolatilityConflicting StakeholdersInfeasible schedule/staffing profile High numbers of external interfaces Delayed authority to proceed/start with fixed milestone Inability to test across systems Vague RequirementsInfeasible schedule/staffing profile Delayed authority to proceed/start with fixed milestone Under average people / Personnel Capability Technical debtLack of Domain Experience Technology ImmaturityInteroperability / compatibilityTechnology Volatility
University of Southern California Center for Systems and Software Engineering Top 10 Inhibitors – Differences 44 A New Single SystemAn Existing Single SystemA System of Systems Requirements Volatility Lack of Interoperability UnprecedentednessHigh numbers of external interfaces Lack of / incompatible standard & protocol Delayed authority to proceed/start with fixed milestone UnprecedentednessRequirements Volatility Infeasible schedule/staffing profileVague RequirementsUnprecedentedness Lack of Domain ExperienceEmbedded poor quality softwareHigh numbers of external interfaces Technology VolatilityConflicting StakeholdersInfeasible schedule/staffing profile High numbers of external interfaces Delayed authority to proceed/start with fixed milestone Inability to test across systems Vague RequirementsInfeasible schedule/staffing profile Delayed authority to proceed/start with fixed milestone Under average people / Personnel Capability Technical debtLack of Domain Experience Technology ImmaturityInteroperability / compatibilityTechnology Volatility
University of Southern California Center for Systems and Software Engineering Top 10 Enablers - Similarities 45 A New Single SystemAn Existing Single SystemA System of Systems Rapid Prototyping Target hardware lab / test like you fly & simulation Customer /tech requirements flexibility Target hardware lab / test like you fly & simulation Incremental test and feedbackRapid Prototyping Customer /tech requirements flexibilityIncremental Delivery & feedback Target hardware lab / test like you fly & simulation Incremental test and feedbackFlexible / Tailorable rulesIncremental test and feedback Incremental Delivery & feedbackAgile/lean approachCommon standard and protocol Decision making authorityRapid PrototypingReusing assets Best people / personnel capabilityCommon standard, interfaceTools and automation Agile/lean approachCustomer /tech requirements flexibilityCommon standard, interface Less context switching when doing multiple projects Domain knowledgeBest people / Personnel Capability Tools and automation Understanding of the existing system and interfaces Team cohesion
University of Southern California Center for Systems and Software Engineering Top 10 Enablers - Differences 46 A New Single SystemAn Existing Single SystemA System of Systems Rapid Prototyping Target hardware lab / test like you fly & simulation Customer /tech requirements flexibility Target hardware lab / test like you fly & simulation Incremental test and feedbackRapid Prototyping Customer /tech requirements flexibilityIncremental Delivery & feedback Target hardware lab / test like you fly & simulation Incremental test and feedbackFlexible / Tailorable rulesIncremental test and feedback Incremental Delivery & feedbackAgile/lean approachCommon standard and protocol Decision making authorityRapid PrototypingReusing assets Best people / personnel capabilityCommon standard, interfaceTools and automation Agile/lean approachCustomer /tech requirements flexibilityCommon standard, interface Less context switching when doing multiple projects Domain knowledgeBest people / Personnel Capability Tools and automation Understanding of the existing system and interfaces Team cohesion
University of Southern California Center for Systems and Software Engineering Observations Flip side of a coin 47 EnablersInhibitors Best peopleUnder average people Decision making authorityLack of decision making authority Team CohesionConflicting stakeholders Incremental Test and FeedbackInability to test across systems
University of Southern California Center for Systems and Software Engineering Observations Grey Area Common standard Flexible rules Requirements Volatility Requirements Flexibility Agile/lean approach Constituent Documentation 48
University of Southern California Center for Systems and Software Engineering Observations Overlap & Similar but not the same Lack of Domain Experience Unprecedentedness Technology Immaturity Technology Volatility Lack of decision making at lower levels Lack of decision making authority 49
University of Southern California Center for Systems and Software Engineering The bottom line Trade off between –Technical Debt –Flexibility (Design for Reuse) –Expedition 50
University of Southern California Center for Systems and Software Engineering References 10/kruchten techdebt.pdfhttp://pkruchten.files.wordpress.com/2011/ 10/kruchten techdebt.pdf 51