SlideShare a Scribd company logo
1 of 76
Credit Crunch CodeTechnical Debt By Woody Pewitt woody@pewitt.org @woodyp
Agenda Defining Technical Debt Why Managing Technical Debt is Important Quantifying Technical Debt Technical Debt Anti-Patterns & Fixes Finding Technical Debt Using Metrics Summary Further  Reading Questions.
http://www.flickr.com/photos/robandstephanielevy
Why should do you care?
And who is going to care?
Big ball of mud! A Big Ball of Mud is a haphazardly structured, sprawling, sloppy, duct-tape-and-baling-wire, spaghetti-code jungle. Only those who are unconcerned about architecture, and, perhaps, are comfortable with the inertia of the day-to-day chore of patching the holes in these failing dikes, are content to work on such systems. People who maintain such systems, are often seen wearing socks and sandals.
How to you get them? The Big Ball of Mud and Other Architectural Disasters http://www.codinghorror.com Jeff Atwood On Brian Foote & Joseph Yoder's Big Ball of Mud paper
How to you get them? Shantytown, Spaghetti Code Throwaway Code Piecemeal Growth Keep It Working Shearing Layers Sweeping It Under The Rug Reconstruction
Shantytown, Spaghetti Code
Throwaway Code
Piecemeal Growth
Keep It Working
Shearing Layers
Sweeping It Under The Rug
Reconstruction
Steve McConnell's36 classic mistakes People Mistakes Undermined motivation Weak personnel Uncontrolled problem employees Heroics Adding people to a late project Noisy, crowded offices Friction between developers and customers Unrealistic expectations Lack of effective project sponsorship Lack of stakeholder buy-in Lack of user input Politics placed over substance Wishful thinking
Steve McConnell's36 classic mistakes Process Mistakes Overly optimistic schedules Insufficient risk management Contractor failure Insufficient planning Abandonment of planning under pressure Wasted time during the fuzzy front end Shortchanged upstream activities Inadequate design Shortchanged quality assurance Insufficient management controls Premature or too frequent convergence Omitting necessary tasks from estimates Planning to catch up later Code-like-hell programming
Steve McConnell's36 classic mistakes Product Mistakes Requirements gold-plating Feature creep Developer gold-plating Push me, pull me negotiation Research-oriented development
Steve McConnell's36 classic mistakes Technology Mistakes Silver-bullet syndrome Overestimated savings from new tools or methods Switching tools in the middle of a project Lack of automated source control
So What is Technical Debt?
Defining TechnicalDebt #1 Term coined by Ward Cunningham in 1992 Analogous to financial debt Financial debt = borrow money against a future date Technical debt = borrow time against a future date.
Defining TechnicalDebt #2 With financial debt “Virtual debt” by not having the best interest rate With Technical Debt Not making savings against time where possible.
What is Interest OnTechnical Debt? Cost later – cost now Financial value of damage to your brand Loss of market share Low staff morale
Just As Not All FinancialDebt Is Bad
Nor Is All Technical Debt
But Financial Debt CanBe Dangerous
And So CanTechnical Debt
Technical Debt Quadrant Deliberate "We must ship now and deal with consequences" "We don't have time for design" Prudent Reckless "Now we know how we should have done it" "What's Layering" Inadvertent
Classes of Technical Debt Planned 1 3 Known Unknown 2 4 Unplanned
Why Managing Technical Debt is Important?
Why Is Managing TechnicalDebt Important?
Reduce Effort by Keepingit Under Control
Quantifying Technical Debt
Basic FormulaTo Get You Started Where: T = Total number of employees involved in paying back the debt i = The individual employee HRi = Hourly rate of pay for that individual Hi = The hours that an individual worked in paying back the debt EOC = Employer’s on cost – estimated at 40% of salary = 140%  of salary HP = Purchase cost of any hardware required HI = Installation cost of any hardware required SL= Cost of any software licences X/Bba = An estimate of the damage to brand image.
Rate Card Project Manager = $45 / hour Architect = $46 / hour Lead Developer = $41 / hour Developer = $36 / hour Tester = $27 / hour Tech. Support = $20 / hour Business Analyst = $44 / hour. *Hourly rate = average annual salary / (52 – 4wks AL * 5 – 9 days PH * 8 hrs) ***Correct as of November ’10. YMMV 
Case Study #1 The Anti-Pattern: Waterfall Methodology
The Main Weaknessof Waterfall
Where Does Change Come From?
Why is Change So Costly?
Why Is This Technical Debt? Borrow time now, repay later Take advantages now Ease in analysing potential changes Ease of coordinating large teams Precise budgeting Repay later Extra cost of change.
Quantify the TechnicalDebt: Agile Assume a small error caught during the “paper prototype” phase of an iteration Resources deployed Architect spends 1 hour fixing design Tester spends 1/2 hour verifying the fix Apply those figures to our formula and: Cost of fixing the error = $82
Quantify the TechnicalDebt: WF Now the same error found in waterfall... Resources deployed Architect 1 hour fixing design Developer spends 4 hours coding solution Lead developer spends ½ hour peer review Tester spends 2 hours verifying fix Apply those figures to our formula and: Cost of fixing the error = $285 Value of the technical debt = $203
Potential Cost Per Project So the TD / defect = $202 The av. number of defects / project = 283* Potential TD / project = $57,166  *Source: Scan 2006 Benchmark (as of March 2008)
Fixing The Technical Debt I’m not saying prefer Agile over Waterfall I am saying: Be aware of the impact that might have on TD Think about how you are going to combat that: Review earlier in the process where change is cheap Ensure the SME has peer review Regular, early checks on design vs. coded solution Don’t leave all testing to the last phase.
Case Study #2 The Anti – Pattern: Not Invented Here
Symptoms Development team spend time developing software which is not core the problem they are trying to solve Instead of buying in a third party solution They justify this by saying things like: It doesn’t work the way we need it to It would take me as long to write as to learn API The 3rd party may go bust The code isn’t good enough quality.
Concrete Example Developers for a national bank are tasked with creating a new MIS tool They dedicate 1 developer full time to creating a charting component This sucks in testing and PM time too Charting component not core to task at hand Spent 3 months getting nowhere Before buying a charting component.
Why Is This TechnicalDebt? Savings against time not made Chose to develop a component Should have bought from a third party.
Quantifying The Technical Debt The component was bought in the end: Disregard the cost of the component And the time spent learning the API Resources deployed: 1 X developer 3 months 1 X tester 1.5 months 1 X lead developer 1 day 1 X PM 1 day Cost of technical debt : $34,050
Fixing The Technical Debt Identify non core functional aspects of project For each of those: Can a component be bought in to achieve it? If so, buy it If not Does your enterprise allow open source? If so use it Beware of licence implications Only after evaluating and discounting alternatives should you consider writing your own.
Case Study #3 Anti-Pattern: Code that plays together stays together
Symptoms Let’s imagine a “Car” object What properties should it have? Make Model Colour What behaviour should it have? None! It’s an inanimate object! A “Car” will have things done to it by “actors”.
What Is The Problem?
Example of Class Pollution Credit: Phil Winstanley (http://weblogs.asp.net/Plip/)
Why Is This TechnicalDebt? Borrow time now, repay later Borrowed time now Simpler object graph Repay later in cost of adding functionality.
Concrete Example Online provider wants to be first to market Ships service with monolithic object graph Effort required to add new features grows Development slows to a crawl Management demand a fix.
Quantifying theTechnical Debt 1 monthly iteration to fix this debt Resources deployed: 5 X Developers 1 X lead developer 2 X testers Apply these figures to our formula and: Cost of technical debt: $61,290.
Fixing The Technical Debt Understand that Monolithic object graph has a limited lifespan Prefer separation of concerns If first to market is important Understand the value of the technical debt accrued Decide when the debt will be paid off Decide if commercial gain outweighs cost of debt Refactoring tools can reduce “interest” on debt.
Case Study #4 The Anti-Pattern: Sensitive Tests
Symptoms Test which are sensitive to Context Interface Data Pass in one iteration Fail in the next due to changes.
Why Is ThisTechnical Debt? Borrow time now, repay later Borrowed time in the form of easy to write tests Repay later in form of fixing sensitive tests.
Concrete Example Tester testing code which uses data from development database Developer adds new functionality Shape of the database changes Values in the database change Previously passing tests fail Tests rewritten using current dev. database.
Quantifying theTechnical Debt Take previous 283 defects per project Assume 10% of tests for those defects are data dependant Assume it takes tester 30 minutes to fix each test 28 * 0.5 = 14 hours Apply those figures to our formula and: Technical debt = $536.35.
Fixing TheTechnical Debt Test must use independent data Don’t run tests against development data Either Have a dedicated test database Or it may be possible to mock data access  Or have the set up code for each test or suite of tests generate the data it requires and drop it during the tear down code.
How Do We SpotTechnical Debt?
We Are Used to Charting Progress
Time Budget FailuresAre Obvious
Effect #1Loss of Productivity
Effect #1Loss of Productivity
Effect #2Increase In Testing
Effect #2Increase In Testing
Effect #3Decrease In Morale
Effect #3Decrease In Morale
Summary In this presentation you learned: What technical debt is That it is important to manage technical debt Some common anti-patterns and how to fix them Metrics to spot hidden technical debt How to quantify technical debt.
Take Away If you only take away one thing Know that technical debt is the silent killer that stalks all projects Don’t let it kill your projects!

More Related Content

What's hot

We need to talk about tech debt
We need to talk about tech debtWe need to talk about tech debt
We need to talk about tech debtMatthew Whetton
 
Technical Debt - PHPBenelux
Technical Debt - PHPBeneluxTechnical Debt - PHPBenelux
Technical Debt - PHPBeneluxenaramore
 
Technical Debt: Do Not Underestimate The Danger
Technical Debt: Do Not Underestimate The DangerTechnical Debt: Do Not Underestimate The Danger
Technical Debt: Do Not Underestimate The DangerLemi Orhan Ergin
 
Technical Debt 101
Technical Debt 101Technical Debt 101
Technical Debt 101Intechnica
 
Managing technical debt notes
Managing technical debt notesManaging technical debt notes
Managing technical debt notesFadi Stephan
 
Towards a Technical Debt Management Framework based on Cost-Benefit Analysis
Towards a Technical Debt Management Framework based on Cost-Benefit AnalysisTowards a Technical Debt Management Framework based on Cost-Benefit Analysis
Towards a Technical Debt Management Framework based on Cost-Benefit AnalysisM Firdaus Harun
 
7 Steps to Pay Down the Interest on Your IT Technical Debt
7 Steps to Pay Down the Interest on Your IT Technical Debt7 Steps to Pay Down the Interest on Your IT Technical Debt
7 Steps to Pay Down the Interest on Your IT Technical DebtCAST
 
The Technical Debt Trap - Michael "Doc" Norton
The Technical Debt Trap - Michael "Doc" NortonThe Technical Debt Trap - Michael "Doc" Norton
The Technical Debt Trap - Michael "Doc" NortonLeanDog
 
Identifying and Managing Technical Debt
Identifying and Managing Technical DebtIdentifying and Managing Technical Debt
Identifying and Managing Technical Debtzazworka
 
Technical Debt - The number one reason why technical projects get derailed
Technical Debt - The number one reason why technical projects get derailedTechnical Debt - The number one reason why technical projects get derailed
Technical Debt - The number one reason why technical projects get derailedAccesto
 
The Technical Debt Trap
The Technical Debt TrapThe Technical Debt Trap
The Technical Debt TrapDoc Norton
 
Delivering Technical Debt
Delivering Technical DebtDelivering Technical Debt
Delivering Technical Debtbrendonpage
 
Technical Debt - osbridge
Technical Debt - osbridgeTechnical Debt - osbridge
Technical Debt - osbridgeenaramore
 
Working with Technical Debt
Working with Technical DebtWorking with Technical Debt
Working with Technical DebtSteve Green
 
Managing Technical Debt
Managing Technical DebtManaging Technical Debt
Managing Technical DebtAndre Perkins
 
Interview questions-answers-for-planning-engineers-r.00
Interview questions-answers-for-planning-engineers-r.00Interview questions-answers-for-planning-engineers-r.00
Interview questions-answers-for-planning-engineers-r.00Praveen Krishna
 
Mary Poppendieck: The Aware Organization - Lean IT Summit 2014
Mary Poppendieck: The Aware Organization - Lean IT Summit 2014Mary Poppendieck: The Aware Organization - Lean IT Summit 2014
Mary Poppendieck: The Aware Organization - Lean IT Summit 2014Institut Lean France
 
How To Manage And Reduce Development Techical Debt
How To Manage And Reduce Development Techical DebtHow To Manage And Reduce Development Techical Debt
How To Manage And Reduce Development Techical DebtAbdul Khan
 

What's hot (20)

We need to talk about tech debt
We need to talk about tech debtWe need to talk about tech debt
We need to talk about tech debt
 
Technical Debt - PHPBenelux
Technical Debt - PHPBeneluxTechnical Debt - PHPBenelux
Technical Debt - PHPBenelux
 
Technical Debt: Do Not Underestimate The Danger
Technical Debt: Do Not Underestimate The DangerTechnical Debt: Do Not Underestimate The Danger
Technical Debt: Do Not Underestimate The Danger
 
Technical Debt 101
Technical Debt 101Technical Debt 101
Technical Debt 101
 
Managing technical debt notes
Managing technical debt notesManaging technical debt notes
Managing technical debt notes
 
Managing Technical Debt
Managing Technical DebtManaging Technical Debt
Managing Technical Debt
 
Towards a Technical Debt Management Framework based on Cost-Benefit Analysis
Towards a Technical Debt Management Framework based on Cost-Benefit AnalysisTowards a Technical Debt Management Framework based on Cost-Benefit Analysis
Towards a Technical Debt Management Framework based on Cost-Benefit Analysis
 
7 Steps to Pay Down the Interest on Your IT Technical Debt
7 Steps to Pay Down the Interest on Your IT Technical Debt7 Steps to Pay Down the Interest on Your IT Technical Debt
7 Steps to Pay Down the Interest on Your IT Technical Debt
 
The Technical Debt Trap - Michael "Doc" Norton
The Technical Debt Trap - Michael "Doc" NortonThe Technical Debt Trap - Michael "Doc" Norton
The Technical Debt Trap - Michael "Doc" Norton
 
Identifying and Managing Technical Debt
Identifying and Managing Technical DebtIdentifying and Managing Technical Debt
Identifying and Managing Technical Debt
 
Technical Debt - The number one reason why technical projects get derailed
Technical Debt - The number one reason why technical projects get derailedTechnical Debt - The number one reason why technical projects get derailed
Technical Debt - The number one reason why technical projects get derailed
 
The Technical Debt Trap
The Technical Debt TrapThe Technical Debt Trap
The Technical Debt Trap
 
Delivering Technical Debt
Delivering Technical DebtDelivering Technical Debt
Delivering Technical Debt
 
Technical Debt - osbridge
Technical Debt - osbridgeTechnical Debt - osbridge
Technical Debt - osbridge
 
Working with Technical Debt
Working with Technical DebtWorking with Technical Debt
Working with Technical Debt
 
Managing Technical Debt
Managing Technical DebtManaging Technical Debt
Managing Technical Debt
 
Project Sail Eng245 2017
Project Sail Eng245 2017Project Sail Eng245 2017
Project Sail Eng245 2017
 
Interview questions-answers-for-planning-engineers-r.00
Interview questions-answers-for-planning-engineers-r.00Interview questions-answers-for-planning-engineers-r.00
Interview questions-answers-for-planning-engineers-r.00
 
Mary Poppendieck: The Aware Organization - Lean IT Summit 2014
Mary Poppendieck: The Aware Organization - Lean IT Summit 2014Mary Poppendieck: The Aware Organization - Lean IT Summit 2014
Mary Poppendieck: The Aware Organization - Lean IT Summit 2014
 
How To Manage And Reduce Development Techical Debt
How To Manage And Reduce Development Techical DebtHow To Manage And Reduce Development Techical Debt
How To Manage And Reduce Development Techical Debt
 

Similar to Technical debt

How to justify technical debt mitigations in Software Engineering
How to justify technical debt mitigations in Software EngineeringHow to justify technical debt mitigations in Software Engineering
How to justify technical debt mitigations in Software EngineeringAndré Agostinho
 
Technical Debt for Product Managers by Square Sr PM
Technical Debt for Product Managers by Square Sr PMTechnical Debt for Product Managers by Square Sr PM
Technical Debt for Product Managers by Square Sr PMProduct School
 
Understanding and Managing Technical Debt
Understanding and Managing Technical DebtUnderstanding and Managing Technical Debt
Understanding and Managing Technical DebtDr. Syed Hassan Amin
 
What scrum masters and product owners should know about software quality and ...
What scrum masters and product owners should know about software quality and ...What scrum masters and product owners should know about software quality and ...
What scrum masters and product owners should know about software quality and ...STX Next
 
Why change code that works - On Technical Debt and Refactoring
Why change code that works - On Technical Debt and RefactoringWhy change code that works - On Technical Debt and Refactoring
Why change code that works - On Technical Debt and RefactoringCarsten Windler
 
Why care about technical debt?
Why care about technical debt?Why care about technical debt?
Why care about technical debt?Tushar Sharma
 
From Technical Debt to Technical Health
From Technical Debt to Technical HealthFrom Technical Debt to Technical Health
From Technical Debt to Technical HealthMikael Vesavuori
 
Technical Debt, Unplanned Work and the Toyota Way
Technical Debt, Unplanned Work and the Toyota WayTechnical Debt, Unplanned Work and the Toyota Way
Technical Debt, Unplanned Work and the Toyota WayHans Nygaard
 
How can agile help you in clearing the technical debt
How can agile help you in clearing the technical debtHow can agile help you in clearing the technical debt
How can agile help you in clearing the technical debtManu Pk
 
Technical debt strategy
Technical debt strategyTechnical debt strategy
Technical debt strategyMasas Dani
 
Managing Technical Debt - by Michael Hall
Managing Technical Debt - by Michael HallManaging Technical Debt - by Michael Hall
Managing Technical Debt - by Michael HallSynerzip
 
Why Do So Many Software Projects Fail?
Why Do So Many Software Projects Fail?Why Do So Many Software Projects Fail?
Why Do So Many Software Projects Fail?Phil Comelio
 
Technical stories v1.2
Technical stories v1.2Technical stories v1.2
Technical stories v1.2Jim Brisson
 
Prioritizing technical debt using bcg matrix in agile engagement
Prioritizing technical debt using bcg matrix in agile engagementPrioritizing technical debt using bcg matrix in agile engagement
Prioritizing technical debt using bcg matrix in agile engagementsandeep sapre
 
How to deal with tech debt: Lessons learned from the best engineering teams
How to deal with tech debt: Lessons learned from the best engineering teamsHow to deal with tech debt: Lessons learned from the best engineering teams
How to deal with tech debt: Lessons learned from the best engineering teamsAlexandre Omeyer
 
Debito tecnico? parliamone!
Debito tecnico? parliamone!Debito tecnico? parliamone!
Debito tecnico? parliamone!Renato Brazioli
 
Technical debt a Business Perspective
Technical debt a Business PerspectiveTechnical debt a Business Perspective
Technical debt a Business PerspectiveMichael Vax
 
Taming technical debt
Taming technical debt Taming technical debt
Taming technical debt Panji Gautama
 

Similar to Technical debt (20)

How to justify technical debt mitigations in Software Engineering
How to justify technical debt mitigations in Software EngineeringHow to justify technical debt mitigations in Software Engineering
How to justify technical debt mitigations in Software Engineering
 
Technical Debt for Product Managers by Square Sr PM
Technical Debt for Product Managers by Square Sr PMTechnical Debt for Product Managers by Square Sr PM
Technical Debt for Product Managers by Square Sr PM
 
Understanding and Managing Technical Debt
Understanding and Managing Technical DebtUnderstanding and Managing Technical Debt
Understanding and Managing Technical Debt
 
What scrum masters and product owners should know about software quality and ...
What scrum masters and product owners should know about software quality and ...What scrum masters and product owners should know about software quality and ...
What scrum masters and product owners should know about software quality and ...
 
Why change code that works - On Technical Debt and Refactoring
Why change code that works - On Technical Debt and RefactoringWhy change code that works - On Technical Debt and Refactoring
Why change code that works - On Technical Debt and Refactoring
 
Why care about technical debt?
Why care about technical debt?Why care about technical debt?
Why care about technical debt?
 
From Technical Debt to Technical Health
From Technical Debt to Technical HealthFrom Technical Debt to Technical Health
From Technical Debt to Technical Health
 
Technical debt
Technical debtTechnical debt
Technical debt
 
Technical Debt, Unplanned Work and the Toyota Way
Technical Debt, Unplanned Work and the Toyota WayTechnical Debt, Unplanned Work and the Toyota Way
Technical Debt, Unplanned Work and the Toyota Way
 
How can agile help you in clearing the technical debt
How can agile help you in clearing the technical debtHow can agile help you in clearing the technical debt
How can agile help you in clearing the technical debt
 
Technical debt strategy
Technical debt strategyTechnical debt strategy
Technical debt strategy
 
Managing Technical Debt - by Michael Hall
Managing Technical Debt - by Michael HallManaging Technical Debt - by Michael Hall
Managing Technical Debt - by Michael Hall
 
Why Do So Many Software Projects Fail?
Why Do So Many Software Projects Fail?Why Do So Many Software Projects Fail?
Why Do So Many Software Projects Fail?
 
Technical stories v1.2
Technical stories v1.2Technical stories v1.2
Technical stories v1.2
 
Technical Debt.pptx
Technical Debt.pptxTechnical Debt.pptx
Technical Debt.pptx
 
Prioritizing technical debt using bcg matrix in agile engagement
Prioritizing technical debt using bcg matrix in agile engagementPrioritizing technical debt using bcg matrix in agile engagement
Prioritizing technical debt using bcg matrix in agile engagement
 
How to deal with tech debt: Lessons learned from the best engineering teams
How to deal with tech debt: Lessons learned from the best engineering teamsHow to deal with tech debt: Lessons learned from the best engineering teams
How to deal with tech debt: Lessons learned from the best engineering teams
 
Debito tecnico? parliamone!
Debito tecnico? parliamone!Debito tecnico? parliamone!
Debito tecnico? parliamone!
 
Technical debt a Business Perspective
Technical debt a Business PerspectiveTechnical debt a Business Perspective
Technical debt a Business Perspective
 
Taming technical debt
Taming technical debt Taming technical debt
Taming technical debt
 

More from Woody Pewitt

Developing serverless applications with .NET on AWS
Developing serverless applications with .NET on AWSDeveloping serverless applications with .NET on AWS
Developing serverless applications with .NET on AWSWoody Pewitt
 
Qcon sf - html5 cross-platform mobile solutions
Qcon sf - html5 cross-platform mobile solutionsQcon sf - html5 cross-platform mobile solutions
Qcon sf - html5 cross-platform mobile solutionsWoody Pewitt
 
Using html5 to build offline applications
Using html5 to build offline applicationsUsing html5 to build offline applications
Using html5 to build offline applicationsWoody Pewitt
 
Super quick introduction to html5
Super quick introduction to html5Super quick introduction to html5
Super quick introduction to html5Woody Pewitt
 
Is your C# optimized
Is your C# optimizedIs your C# optimized
Is your C# optimizedWoody Pewitt
 
From port 80 to applications
From port 80 to applicationsFrom port 80 to applications
From port 80 to applicationsWoody Pewitt
 
Mobile Web Best Practices
Mobile Web Best PracticesMobile Web Best Practices
Mobile Web Best PracticesWoody Pewitt
 
Internet protocalls & WCF/DReAM
Internet protocalls & WCF/DReAMInternet protocalls & WCF/DReAM
Internet protocalls & WCF/DReAMWoody Pewitt
 
How To Create Web Sites For Mobile Clients
How To Create Web Sites For Mobile ClientsHow To Create Web Sites For Mobile Clients
How To Create Web Sites For Mobile ClientsWoody Pewitt
 
.Net Garbage Collector 101
.Net Garbage Collector 101.Net Garbage Collector 101
.Net Garbage Collector 101Woody Pewitt
 
San Diego ASP.NET Meeting Oct 21st
San  Diego  ASP.NET Meeting Oct 21stSan  Diego  ASP.NET Meeting Oct 21st
San Diego ASP.NET Meeting Oct 21stWoody Pewitt
 
San Diego Clound Computing Sep 9th
San Diego Clound Computing Sep 9thSan Diego Clound Computing Sep 9th
San Diego Clound Computing Sep 9thWoody Pewitt
 

More from Woody Pewitt (12)

Developing serverless applications with .NET on AWS
Developing serverless applications with .NET on AWSDeveloping serverless applications with .NET on AWS
Developing serverless applications with .NET on AWS
 
Qcon sf - html5 cross-platform mobile solutions
Qcon sf - html5 cross-platform mobile solutionsQcon sf - html5 cross-platform mobile solutions
Qcon sf - html5 cross-platform mobile solutions
 
Using html5 to build offline applications
Using html5 to build offline applicationsUsing html5 to build offline applications
Using html5 to build offline applications
 
Super quick introduction to html5
Super quick introduction to html5Super quick introduction to html5
Super quick introduction to html5
 
Is your C# optimized
Is your C# optimizedIs your C# optimized
Is your C# optimized
 
From port 80 to applications
From port 80 to applicationsFrom port 80 to applications
From port 80 to applications
 
Mobile Web Best Practices
Mobile Web Best PracticesMobile Web Best Practices
Mobile Web Best Practices
 
Internet protocalls & WCF/DReAM
Internet protocalls & WCF/DReAMInternet protocalls & WCF/DReAM
Internet protocalls & WCF/DReAM
 
How To Create Web Sites For Mobile Clients
How To Create Web Sites For Mobile ClientsHow To Create Web Sites For Mobile Clients
How To Create Web Sites For Mobile Clients
 
.Net Garbage Collector 101
.Net Garbage Collector 101.Net Garbage Collector 101
.Net Garbage Collector 101
 
San Diego ASP.NET Meeting Oct 21st
San  Diego  ASP.NET Meeting Oct 21stSan  Diego  ASP.NET Meeting Oct 21st
San Diego ASP.NET Meeting Oct 21st
 
San Diego Clound Computing Sep 9th
San Diego Clound Computing Sep 9thSan Diego Clound Computing Sep 9th
San Diego Clound Computing Sep 9th
 

Recently uploaded

"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 

Recently uploaded (20)

"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 

Technical debt

  • 1. Credit Crunch CodeTechnical Debt By Woody Pewitt woody@pewitt.org @woodyp
  • 2. Agenda Defining Technical Debt Why Managing Technical Debt is Important Quantifying Technical Debt Technical Debt Anti-Patterns & Fixes Finding Technical Debt Using Metrics Summary Further Reading Questions.
  • 4. Why should do you care?
  • 5. And who is going to care?
  • 6.
  • 7. Big ball of mud! A Big Ball of Mud is a haphazardly structured, sprawling, sloppy, duct-tape-and-baling-wire, spaghetti-code jungle. Only those who are unconcerned about architecture, and, perhaps, are comfortable with the inertia of the day-to-day chore of patching the holes in these failing dikes, are content to work on such systems. People who maintain such systems, are often seen wearing socks and sandals.
  • 8. How to you get them? The Big Ball of Mud and Other Architectural Disasters http://www.codinghorror.com Jeff Atwood On Brian Foote & Joseph Yoder's Big Ball of Mud paper
  • 9. How to you get them? Shantytown, Spaghetti Code Throwaway Code Piecemeal Growth Keep It Working Shearing Layers Sweeping It Under The Rug Reconstruction
  • 15. Sweeping It Under The Rug
  • 17. Steve McConnell's36 classic mistakes People Mistakes Undermined motivation Weak personnel Uncontrolled problem employees Heroics Adding people to a late project Noisy, crowded offices Friction between developers and customers Unrealistic expectations Lack of effective project sponsorship Lack of stakeholder buy-in Lack of user input Politics placed over substance Wishful thinking
  • 18. Steve McConnell's36 classic mistakes Process Mistakes Overly optimistic schedules Insufficient risk management Contractor failure Insufficient planning Abandonment of planning under pressure Wasted time during the fuzzy front end Shortchanged upstream activities Inadequate design Shortchanged quality assurance Insufficient management controls Premature or too frequent convergence Omitting necessary tasks from estimates Planning to catch up later Code-like-hell programming
  • 19. Steve McConnell's36 classic mistakes Product Mistakes Requirements gold-plating Feature creep Developer gold-plating Push me, pull me negotiation Research-oriented development
  • 20. Steve McConnell's36 classic mistakes Technology Mistakes Silver-bullet syndrome Overestimated savings from new tools or methods Switching tools in the middle of a project Lack of automated source control
  • 21. So What is Technical Debt?
  • 22. Defining TechnicalDebt #1 Term coined by Ward Cunningham in 1992 Analogous to financial debt Financial debt = borrow money against a future date Technical debt = borrow time against a future date.
  • 23. Defining TechnicalDebt #2 With financial debt “Virtual debt” by not having the best interest rate With Technical Debt Not making savings against time where possible.
  • 24. What is Interest OnTechnical Debt? Cost later – cost now Financial value of damage to your brand Loss of market share Low staff morale
  • 25. Just As Not All FinancialDebt Is Bad
  • 26. Nor Is All Technical Debt
  • 27. But Financial Debt CanBe Dangerous
  • 29. Technical Debt Quadrant Deliberate "We must ship now and deal with consequences" "We don't have time for design" Prudent Reckless "Now we know how we should have done it" "What's Layering" Inadvertent
  • 30. Classes of Technical Debt Planned 1 3 Known Unknown 2 4 Unplanned
  • 31. Why Managing Technical Debt is Important?
  • 32. Why Is Managing TechnicalDebt Important?
  • 33. Reduce Effort by Keepingit Under Control
  • 35. Basic FormulaTo Get You Started Where: T = Total number of employees involved in paying back the debt i = The individual employee HRi = Hourly rate of pay for that individual Hi = The hours that an individual worked in paying back the debt EOC = Employer’s on cost – estimated at 40% of salary = 140% of salary HP = Purchase cost of any hardware required HI = Installation cost of any hardware required SL= Cost of any software licences X/Bba = An estimate of the damage to brand image.
  • 36. Rate Card Project Manager = $45 / hour Architect = $46 / hour Lead Developer = $41 / hour Developer = $36 / hour Tester = $27 / hour Tech. Support = $20 / hour Business Analyst = $44 / hour. *Hourly rate = average annual salary / (52 – 4wks AL * 5 – 9 days PH * 8 hrs) ***Correct as of November ’10. YMMV 
  • 37. Case Study #1 The Anti-Pattern: Waterfall Methodology
  • 38. The Main Weaknessof Waterfall
  • 39. Where Does Change Come From?
  • 40. Why is Change So Costly?
  • 41. Why Is This Technical Debt? Borrow time now, repay later Take advantages now Ease in analysing potential changes Ease of coordinating large teams Precise budgeting Repay later Extra cost of change.
  • 42. Quantify the TechnicalDebt: Agile Assume a small error caught during the “paper prototype” phase of an iteration Resources deployed Architect spends 1 hour fixing design Tester spends 1/2 hour verifying the fix Apply those figures to our formula and: Cost of fixing the error = $82
  • 43. Quantify the TechnicalDebt: WF Now the same error found in waterfall... Resources deployed Architect 1 hour fixing design Developer spends 4 hours coding solution Lead developer spends ½ hour peer review Tester spends 2 hours verifying fix Apply those figures to our formula and: Cost of fixing the error = $285 Value of the technical debt = $203
  • 44. Potential Cost Per Project So the TD / defect = $202 The av. number of defects / project = 283* Potential TD / project = $57,166 *Source: Scan 2006 Benchmark (as of March 2008)
  • 45. Fixing The Technical Debt I’m not saying prefer Agile over Waterfall I am saying: Be aware of the impact that might have on TD Think about how you are going to combat that: Review earlier in the process where change is cheap Ensure the SME has peer review Regular, early checks on design vs. coded solution Don’t leave all testing to the last phase.
  • 46. Case Study #2 The Anti – Pattern: Not Invented Here
  • 47. Symptoms Development team spend time developing software which is not core the problem they are trying to solve Instead of buying in a third party solution They justify this by saying things like: It doesn’t work the way we need it to It would take me as long to write as to learn API The 3rd party may go bust The code isn’t good enough quality.
  • 48. Concrete Example Developers for a national bank are tasked with creating a new MIS tool They dedicate 1 developer full time to creating a charting component This sucks in testing and PM time too Charting component not core to task at hand Spent 3 months getting nowhere Before buying a charting component.
  • 49. Why Is This TechnicalDebt? Savings against time not made Chose to develop a component Should have bought from a third party.
  • 50. Quantifying The Technical Debt The component was bought in the end: Disregard the cost of the component And the time spent learning the API Resources deployed: 1 X developer 3 months 1 X tester 1.5 months 1 X lead developer 1 day 1 X PM 1 day Cost of technical debt : $34,050
  • 51. Fixing The Technical Debt Identify non core functional aspects of project For each of those: Can a component be bought in to achieve it? If so, buy it If not Does your enterprise allow open source? If so use it Beware of licence implications Only after evaluating and discounting alternatives should you consider writing your own.
  • 52. Case Study #3 Anti-Pattern: Code that plays together stays together
  • 53. Symptoms Let’s imagine a “Car” object What properties should it have? Make Model Colour What behaviour should it have? None! It’s an inanimate object! A “Car” will have things done to it by “actors”.
  • 54. What Is The Problem?
  • 55. Example of Class Pollution Credit: Phil Winstanley (http://weblogs.asp.net/Plip/)
  • 56. Why Is This TechnicalDebt? Borrow time now, repay later Borrowed time now Simpler object graph Repay later in cost of adding functionality.
  • 57. Concrete Example Online provider wants to be first to market Ships service with monolithic object graph Effort required to add new features grows Development slows to a crawl Management demand a fix.
  • 58. Quantifying theTechnical Debt 1 monthly iteration to fix this debt Resources deployed: 5 X Developers 1 X lead developer 2 X testers Apply these figures to our formula and: Cost of technical debt: $61,290.
  • 59. Fixing The Technical Debt Understand that Monolithic object graph has a limited lifespan Prefer separation of concerns If first to market is important Understand the value of the technical debt accrued Decide when the debt will be paid off Decide if commercial gain outweighs cost of debt Refactoring tools can reduce “interest” on debt.
  • 60. Case Study #4 The Anti-Pattern: Sensitive Tests
  • 61. Symptoms Test which are sensitive to Context Interface Data Pass in one iteration Fail in the next due to changes.
  • 62. Why Is ThisTechnical Debt? Borrow time now, repay later Borrowed time in the form of easy to write tests Repay later in form of fixing sensitive tests.
  • 63. Concrete Example Tester testing code which uses data from development database Developer adds new functionality Shape of the database changes Values in the database change Previously passing tests fail Tests rewritten using current dev. database.
  • 64. Quantifying theTechnical Debt Take previous 283 defects per project Assume 10% of tests for those defects are data dependant Assume it takes tester 30 minutes to fix each test 28 * 0.5 = 14 hours Apply those figures to our formula and: Technical debt = $536.35.
  • 65. Fixing TheTechnical Debt Test must use independent data Don’t run tests against development data Either Have a dedicated test database Or it may be possible to mock data access Or have the set up code for each test or suite of tests generate the data it requires and drop it during the tear down code.
  • 66. How Do We SpotTechnical Debt?
  • 67. We Are Used to Charting Progress
  • 69. Effect #1Loss of Productivity
  • 70. Effect #1Loss of Productivity
  • 75. Summary In this presentation you learned: What technical debt is That it is important to manage technical debt Some common anti-patterns and how to fix them Metrics to spot hidden technical debt How to quantify technical debt.
  • 76. Take Away If you only take away one thing Know that technical debt is the silent killer that stalks all projects Don’t let it kill your projects!
  • 77. Further Reading http://c2.com/cgi/wiki?WardExplainsDebtMetaphor http://c2.com/cgi/wiki?TechnicalDebt http://blogs.construx.com/blogs/stevemcc/archive/2007/11/01/technical-debt-2.aspx http://www.martinfowler.com/bliki/TechnicalDebt.html
  • 78. Questions? There wasn’t time for my question Where can I contact you? woody@pewitt.org www.woodyp.info @woodyp
  • 79. Thank You! By Woody Pewitt woodyp@devexpress.com www.devexpress.com/woody @woodyp

Editor's Notes

  1. To help management understand the cost of a…
  2. http://www.codinghorror.com/blog/2007/11/the-big-ball-of-mud-and-other-architectural-disasters.html
  3. I've increasingly come to believe the only difference between experienced and inexperienced software developers is that the experienced ones realize when they're making mistakes. The same rule applies to software projects and project managers. If you're not actively scanning through the list of Classic Software Development Mistakes as you run your software project, you have no idea how likely it is you're making one of these mistakes right now.
  4. In the current downturn lots of companies carried low amounts of well managed financial debt and still went bankrupt when their, previously stable, line of credit was withdrawn by the banks.
  5. Unforeseen things happenTeam members get:SickMove to other rolesBetter job offersYour market can:CollapseGain a new competitorExpand faster than you thought
  6. Cost per feature over time
  7. Cost per feature over time
  8. Bad news: Quantifying Technical Debt is hardGood news: Doesn’t matter how you do itProvided:It’s meaningful to your enterpriseYou are consistent.
  9. You can’t see technical debtSo how do spot something you can’t see?Astronomers have the same problemPlanets that could support life can’t be seen:Life supporting planets must be close to starsThe light from the star hides the planetSo how to they spot the planets?They look for the effect the hidden planet hasWe can do the same with technical debt.