SlideShare a Scribd company logo
1 of 63
The Technical Debt Trap
Michael J Norton
@DocOnDev
LeanDog LLC*

*The views expressed are not necessarily the views of LeanDog LLC
 (but they could be)
Rant.begin
What is Technical Debt?
What is Technical Debt?
Ward Cunningham




           oopsla’92
What is Technical Debt?
Ward Cunningham
Shipping first time code is
like going into debt.




                   oopsla’92
What is Technical Debt?
Ward Cunningham
Shipping first time code is
like going into debt.
 A little debt speeds
development so long
as it is paid back
promptly with a
rewrite.
                   oopsla’92
What is Technical Debt?
Ward Cunningham
The danger occurs
when the debt is not
repaid.

Every minute spent on not-
quite-right code counts as
interest on that debt.

                   oopsla’92
What is Technical Debt?
Ward Cunningham
The danger occurs
when the debt is not
repaid.

Every minute spent on not-
quite-right code counts as
interest on that debt.

                   oopsla’92
Technical Debt is a Good Idea
Technical Debt is a Good Idea



 WTF?
Technical Debt is a Good Idea
Strategic Design Decision
Technical Debt is a Good Idea
Strategic Design Decision
Allow for Rapid Delivery
To Ellicit Quick Feedback
And Correct Design
Technical Debt is a Metaphor
Here Be Danger
Metaphors Rock
 We reason by analogy

Can’t keep running
   at this pace

       Building on a weak foundation
                         Puts pressure on
 It’s raining men          our design
Metaphors Rock
 We reason by analogy

Can’t keep running
   at this pace

       Building on a weak foundation
                         Puts pressure on
 It’s raining men          our design
      (hallelujah)
Metaphorphosis
When Metaphors go wrong




    Prudent
Metaphorphosis
 When Metaphors go wrong

     Return on Investment
Short-Term Fraudulent       Credit Card
          Inadvertent RecklessScheme
                         Pyramid    Debt
   Auto Loan
High Interest in the Third Quadrant
                      Home Loan Voluntary
  Intentional Loan Shark Long-Term
        Prudent Student Loan
Pragmatic Leverage             Operational
Metaphorphosis
Metaphorphosis
 When Metaphors go wrong
“cut a lot of corners”
      James Shore
    http://jamesshore.com/Blog/CardMeeting/Voluntary-Technical-Debt.html




       “quick and dirty”
                                                                     Martin Fowler
      “sloppy”
                                                                      http://www.martinfowler.com/bliki/TechnicalDebt.html




      David Laribee                                                                                                           “just hack it in”
   http://msdn.microsoft.com/en-us/magazine/ee819135.aspx
                                                                                                                             Steve McConnell
                                                                                                                        http://blogs.construx.com/blogs/stevemcc/archive/2007/11/01/technical-debt-2.aspx
That’s not what I said
Ward Cunningham

[Many] have explained the debt metaphor
and confused it with the idea that
you could write code poorly with
the intention of doing a good job later.
http://www.youtube.com/watch?v=pqeJFYwnkjE&feature=player_embedded   youtube.com 2009
That’s not what I said
Ward Cunningham

[Many] have explained the debt metaphor
and confused it with the idea that
you could write code poorly with
the intention of doing a good job later.
http://www.youtube.com/watch?v=pqeJFYwnkjE&feature=player_embedded   youtube.com 2009
That’s not what I said
Ward Cunningham

... confused it with
the idea that you
could write code
poorly ...            youtube.com 2009
Clean Code is Required
Ward Cunningham

The ability to pay back debt [...]
depends upon you writing code that
is clean enough to be able to refactor
as you come to understand your
problem.                     youtube.com 2009
Clean Code is Required
Ward Cunningham

The ability to pay back debt [...]
depends upon you writing code that
is clean enough to be able to
refactor as you come to
understand your problem.  youtube.com 2009
Dirty Code is a Bad Idea
Ward Cunningham
Dirty code is to technical debt as the
pawn broker is to financial debt.

Don't think you are ever going to get
your code back.
http://twitter.com/WardCunningham/status/3742903303   twitter 2009
Is it Technical Debt?
Ask yourself...
Is the code clean?
Is the code tested?
Is there a learning objective?
Is there a plan for payback?
Is the business truly informed?
Is it Technical Debt?
If you said no to even one
Is the code clean?
Is the code tested?
Is there a learning objective?
Is there a plan for payback?
Is the business truly informed?
       Then you don’t have Technical Debt
You have cruft
Cruft (noun)
1. An unpleasant substance
2. The result of shoddy construction
3. Redundant, old or improperly written code
You have a mess
Mess (noun)
1. Disorderly accumulation, heap, or jumble
2. A state of embarrassing confusion
3. An unpleasant or difficult situation
Chill. It’s just semantics, man.
Chill. It’s just semantics, man.
JUST Semantics?

Technical Debt is Good
Chill. It’s just semantics, man.
JUST Semantics?

            Technical Debt is Good
Chill. It’s just semantics, man.
JUST Semantics?

Quick and Dirty is Technical Debt is Good
Chill. It’s just semantics, man.
JUST Semantics?

Quick and Dirty is Good
Chill. It’s just semantics, man.
JUST Semantics?

Quick and Dirty is Good
Messy Code is a Bad Decision
Every Time
Messy Code is a Bad Decision
Every Time
 You are a professional developer
             (Professionals behave ethically)
Messy Code is a Bad Decision
Every Time
 You are a professional developer
               (Professionals behave ethically)

 You are going to create unintentional cruft
             (You can’t help it. It’s unintentional.)
Messy Code is a Bad Decision
Every Time
 You are a professional developer
               (Professionals behave ethically)

 You are going to create unintentional cruft
             (You can’t help it. It’s unintentional.)

 You have to clean up the existing cruft
             (Intent doesn’t alter Responsibility)
Grammy Doesn’t Love Me!
Setting Expectations
The Trap
Mess begets mess
The Trap
Mess begets mess
 Precedent for Speed over Quality
 Expectation of increased velocity
 Mess slows you down
 Must generate more mess to keep up
The Trap
Mess begets mess
 Precedent for Speed over Quality
 Expectation of increased velocity
 Mess slows you down
 Must generate more mess to keep up
 Ask permission to do your job correctly
Avoid The Trap
Incremental Fixes Fail




      http://www.jacoozi.com/blog/wp-content/uploads/2007/01/refactoring_coc_big.jpg
Avoid The Trap
Clean Constantly
Avoid The Trap
Clean Constantly
 Never make an intentional mess
 Monitor your “Technical Debt”
 Follow the Boy Scout Rule
 Quality is your responsibility
Avoid The Trap
Clean Constantly
 Never make an intentional mess
 Monitor your “Technical Debt”
 Follow the Boy Scout Rule
 Quality is your responsibility
 NEVER ask permission to do your job correctly
Monitoring Cruft/Debt
A few key metrics
Monitoring Cruft/Debt
A few key metrics
 Code Coverage
 Cyclomatic Complexity
 Coupling
Monitoring Cruft/Debt
Code Coverage
Monitoring Cruft/Debt
Code Coverage
 Code exercised by automated tests
 Monitor test types separately
 Don’t set a coverage target
 100% Coverage is a smell
Monitoring Cruft/Debt
Code Coverage
 Code exercised by automated tests
 Monitor test types separately
 Don’t set a coverage target
 100% Coverage is a smell
 Monitor trends, not points
Monitoring Cruft/Debt
Cyclomatic Complexity
Monitoring Cruft/Debt
Cyclomatic Complexity
 Number of logical branches in code
 Direct relationship with bugs
 Typically high in concentrated areas
 Reduce Conditionals
Monitoring Cruft/Debt
Cyclomatic Complexity
 Number of logical branches in code
 Direct relationship with bugs
 Typically high in concentrated areas
 Reduce Conditionals
 Monitor trends, not points
Monitoring Cruft/Debt
Coupling
Monitoring Cruft/Debt
Coupling
 Interconnectedness of systems
 High Coupling = Difficult to Change
 Afferent (Toward) and Efferent (Away)
 Dependency Injection
Monitoring Cruft/Debt
Coupling
 Interconnectedness of systems
 High Coupling = Difficult to Change
 Afferent (Toward) and Efferent (Away)
 Dependency Injection
 Monitor trends, not points
Lean Start-Ups
No exceptions
Lean Start-Ups
No exceptions
 Quick Does NOT Mean Crappy
 You must have a plan for payback
 Be careful of the precedent you set
 Quality is STILL your responsibility
Lean Start-Ups
No exceptions
 Quick Does NOT Mean Crappy
 You must have a plan for payback
 Be careful of the precedent you set
 Quality is STILL your responsibility
 NEVER ask permission to do your job correctly
Rant.end
Thank You!
The Technical Debt Trap
Michael J Norton
@DocOnDev
LeanDog LLC*
doc@leandog.com

*The views expressed are not necessarily the views of LeanDog LLC
 (but they could be)

More Related Content

What's hot

Acceptance testfurureinmind
Acceptance testfurureinmindAcceptance testfurureinmind
Acceptance testfurureinmind
LeanDog
 
Technical Debt - Why should you care? (Agiles Buenos Aires 2011)
Technical Debt - Why should you care?  (Agiles Buenos Aires 2011)Technical Debt - Why should you care?  (Agiles Buenos Aires 2011)
Technical Debt - Why should you care? (Agiles Buenos Aires 2011)
CI&T
 

What's hot (20)

Technical Debt 101
Technical Debt 101Technical Debt 101
Technical Debt 101
 
Managing Technical Debt
Managing Technical DebtManaging Technical Debt
Managing Technical Debt
 
Acceptance testfurureinmind
Acceptance testfurureinmindAcceptance testfurureinmind
Acceptance testfurureinmind
 
The Technical Debt Trap - NDC Oslo 2014
The Technical Debt Trap - NDC Oslo 2014The Technical Debt Trap - NDC Oslo 2014
The Technical Debt Trap - NDC Oslo 2014
 
Technical Debt and Requirements
Technical Debt and RequirementsTechnical Debt and Requirements
Technical Debt and Requirements
 
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
 
Delivering Technical Debt
Delivering Technical DebtDelivering Technical Debt
Delivering Technical Debt
 
Technical Debt - osbridge
Technical Debt - osbridgeTechnical Debt - osbridge
Technical Debt - osbridge
 
Technical debt
Technical debtTechnical debt
Technical debt
 
Technical Debt Management
Technical Debt ManagementTechnical Debt Management
Technical Debt Management
 
Technical Debt
Technical DebtTechnical Debt
Technical Debt
 
Measure It, Manage It, Ignore It - Software Practitioners and Technical Debt
Measure It, Manage It, Ignore It - Software Practitioners and Technical Debt Measure It, Manage It, Ignore It - Software Practitioners and Technical Debt
Measure It, Manage It, Ignore It - Software Practitioners and Technical Debt
 
Technical Debt - Why should you care? (Agiles Buenos Aires 2011)
Technical Debt - Why should you care?  (Agiles Buenos Aires 2011)Technical Debt - Why should you care?  (Agiles Buenos Aires 2011)
Technical Debt - Why should you care? (Agiles Buenos Aires 2011)
 
Working with Technical Debt
Working with Technical DebtWorking with Technical Debt
Working with Technical Debt
 
Common Sense Software Development
Common Sense Software DevelopmentCommon Sense Software Development
Common Sense Software Development
 
Extreme programming
Extreme programmingExtreme programming
Extreme programming
 
Big guns for small guys (reloaded)
Big guns for small guys (reloaded)Big guns for small guys (reloaded)
Big guns for small guys (reloaded)
 
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
 
10 Big Ideas from Industry
10 Big Ideas from Industry10 Big Ideas from Industry
10 Big Ideas from Industry
 
Why care about technical debt?
Why care about technical debt?Why care about technical debt?
Why care about technical debt?
 

Viewers also liked

Viewers also liked (16)

Modern Prospecting Techniques for Connecting with Prospects (from Sales Hacke...
Modern Prospecting Techniques for Connecting with Prospects (from Sales Hacke...Modern Prospecting Techniques for Connecting with Prospects (from Sales Hacke...
Modern Prospecting Techniques for Connecting with Prospects (from Sales Hacke...
 
10 Things You Didn’t Know About Mobile Email from Litmus & HubSpot
 10 Things You Didn’t Know About Mobile Email from Litmus & HubSpot 10 Things You Didn’t Know About Mobile Email from Litmus & HubSpot
10 Things You Didn’t Know About Mobile Email from Litmus & HubSpot
 
25 Discovery Call Questions
25 Discovery Call Questions25 Discovery Call Questions
25 Discovery Call Questions
 
HubSpot Diversity Data 2016
HubSpot Diversity Data 2016HubSpot Diversity Data 2016
HubSpot Diversity Data 2016
 
Class 1: Email Marketing Certification course: Email Marketing and Your Business
Class 1: Email Marketing Certification course: Email Marketing and Your BusinessClass 1: Email Marketing Certification course: Email Marketing and Your Business
Class 1: Email Marketing Certification course: Email Marketing and Your Business
 
What is Inbound Recruiting?
What is Inbound Recruiting?What is Inbound Recruiting?
What is Inbound Recruiting?
 
Behind the Scenes: Launching HubSpot Tokyo
Behind the Scenes: Launching HubSpot TokyoBehind the Scenes: Launching HubSpot Tokyo
Behind the Scenes: Launching HubSpot Tokyo
 
Why People Block Ads (And What It Means for Marketers and Advertisers) [New R...
Why People Block Ads (And What It Means for Marketers and Advertisers) [New R...Why People Block Ads (And What It Means for Marketers and Advertisers) [New R...
Why People Block Ads (And What It Means for Marketers and Advertisers) [New R...
 
Add the Women Back: Wikipedia Edit-a-Thon
Add the Women Back: Wikipedia Edit-a-ThonAdd the Women Back: Wikipedia Edit-a-Thon
Add the Women Back: Wikipedia Edit-a-Thon
 
Intelligence Augmentation - The Next-Gen AI
Intelligence Augmentation - The Next-Gen AIIntelligence Augmentation - The Next-Gen AI
Intelligence Augmentation - The Next-Gen AI
 
Launch Communication Plan
Launch Communication PlanLaunch Communication Plan
Launch Communication Plan
 
WCAG 2.1 Mobile Accessibility
WCAG 2.1 Mobile AccessibilityWCAG 2.1 Mobile Accessibility
WCAG 2.1 Mobile Accessibility
 
So you want to be a wizard
So you want to be a wizardSo you want to be a wizard
So you want to be a wizard
 
How to Earn the Attention of Today's Buyer
How to Earn the Attention of Today's BuyerHow to Earn the Attention of Today's Buyer
How to Earn the Attention of Today's Buyer
 
Design in Tech Report 2017
Design in Tech Report 2017Design in Tech Report 2017
Design in Tech Report 2017
 
3 Proven Sales Email Templates Used by Successful Companies
3 Proven Sales Email Templates Used by Successful Companies3 Proven Sales Email Templates Used by Successful Companies
3 Proven Sales Email Templates Used by Successful Companies
 

Similar to The Technical Debt Trap - Michael "Doc" Norton

Getting Through the Tough Times - Tim Bray
Getting Through the Tough Times - Tim BrayGetting Through the Tough Times - Tim Bray
Getting Through the Tough Times - Tim Bray
Carsonified Team
 
Os Nightingale
Os NightingaleOs Nightingale
Os Nightingale
oscon2007
 

Similar to The Technical Debt Trap - Michael "Doc" Norton (20)

Getting Through the Tough Times - Tim Bray
Getting Through the Tough Times - Tim BrayGetting Through the Tough Times - Tim Bray
Getting Through the Tough Times - Tim Bray
 
Eugene Pilyankevich - Getting Secure Against Challenges Or Getting Security C...
Eugene Pilyankevich - Getting Secure Against Challenges Or Getting Security C...Eugene Pilyankevich - Getting Secure Against Challenges Or Getting Security C...
Eugene Pilyankevich - Getting Secure Against Challenges Or Getting Security C...
 
JsDay - It's not you, It's me (or how to avoid being coupled with a Javascrip...
JsDay - It's not you, It's me (or how to avoid being coupled with a Javascrip...JsDay - It's not you, It's me (or how to avoid being coupled with a Javascrip...
JsDay - It's not you, It's me (or how to avoid being coupled with a Javascrip...
 
Beyond Fast Good and Cheap
Beyond Fast Good and CheapBeyond Fast Good and Cheap
Beyond Fast Good and Cheap
 
Taming scary production code that nobody wants to touch
Taming scary production code that nobody wants to touchTaming scary production code that nobody wants to touch
Taming scary production code that nobody wants to touch
 
Arrows
ArrowsArrows
Arrows
 
DevOpsDays Warsaw 2015: Placebo of Progress – Caoimhin Graham
DevOpsDays Warsaw 2015: Placebo of Progress – Caoimhin GrahamDevOpsDays Warsaw 2015: Placebo of Progress – Caoimhin Graham
DevOpsDays Warsaw 2015: Placebo of Progress – Caoimhin Graham
 
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
 
FFWD.PRO - It's not you, It's me (or how to avoid being coupled with a Javasc...
FFWD.PRO - It's not you, It's me (or how to avoid being coupled with a Javasc...FFWD.PRO - It's not you, It's me (or how to avoid being coupled with a Javasc...
FFWD.PRO - It's not you, It's me (or how to avoid being coupled with a Javasc...
 
The Technical Debt Trap
The Technical Debt TrapThe Technical Debt Trap
The Technical Debt Trap
 
Philly ETE - Are Your Developers Bull$h!tt!ng You? And why that's the wrong q...
Philly ETE - Are Your Developers Bull$h!tt!ng You? And why that's the wrong q...Philly ETE - Are Your Developers Bull$h!tt!ng You? And why that's the wrong q...
Philly ETE - Are Your Developers Bull$h!tt!ng You? And why that's the wrong q...
 
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
 
Oli Gardner SMD Warsaw 2014 - Advanced Landing Page Optimization With Conve...
Oli Gardner  SMD Warsaw 2014  - Advanced Landing Page Optimization With Conve...Oli Gardner  SMD Warsaw 2014  - Advanced Landing Page Optimization With Conve...
Oli Gardner SMD Warsaw 2014 - Advanced Landing Page Optimization With Conve...
 
Startupfest 2012 - Coefficients of friction
Startupfest 2012 - Coefficients of frictionStartupfest 2012 - Coefficients of friction
Startupfest 2012 - Coefficients of friction
 
Everything you Wanted to Know About Refactoring
Everything you Wanted to Know About RefactoringEverything you Wanted to Know About Refactoring
Everything you Wanted to Know About Refactoring
 
Agile Resiliency: How CMMI can make Agile thrive and survive
Agile Resiliency: How CMMI can make Agile thrive and surviveAgile Resiliency: How CMMI can make Agile thrive and survive
Agile Resiliency: How CMMI can make Agile thrive and survive
 
Product Management - pitfalls of Data Driven Development
Product Management - pitfalls of Data Driven DevelopmentProduct Management - pitfalls of Data Driven Development
Product Management - pitfalls of Data Driven Development
 
Os Nightingale
Os NightingaleOs Nightingale
Os Nightingale
 
mri-bp2015
mri-bp2015mri-bp2015
mri-bp2015
 
Crypto-Currency - Strategic Review v3
Crypto-Currency  - Strategic Review  v3Crypto-Currency  - Strategic Review  v3
Crypto-Currency - Strategic Review v3
 

More from LeanDog

No one reads anything designing for users on the move
No one reads anything  designing for users on the move No one reads anything  designing for users on the move
No one reads anything designing for users on the move
LeanDog
 
Practical introduction to dev ops with chef
Practical introduction to dev ops with chefPractical introduction to dev ops with chef
Practical introduction to dev ops with chef
LeanDog
 
Key lean principles for organizational change
Key lean principles for organizational changeKey lean principles for organizational change
Key lean principles for organizational change
LeanDog
 
Pair programming-agile2012
Pair programming-agile2012Pair programming-agile2012
Pair programming-agile2012
LeanDog
 
Collaboration
CollaborationCollaboration
Collaboration
LeanDog
 
Qa team sport
Qa team sportQa team sport
Qa team sport
LeanDog
 

More from LeanDog (18)

Product Design and Organization Design: Two sides of the same coin (1)
Product Design and Organization Design: Two sides of the same coin (1)Product Design and Organization Design: Two sides of the same coin (1)
Product Design and Organization Design: Two sides of the same coin (1)
 
Cadenced flow overview
Cadenced flow overviewCadenced flow overview
Cadenced flow overview
 
Design studio-method-industry2016 (1)
Design studio-method-industry2016 (1)Design studio-method-industry2016 (1)
Design studio-method-industry2016 (1)
 
Using flow based road mapping and options
Using flow based road mapping and optionsUsing flow based road mapping and options
Using flow based road mapping and options
 
Value Focused Prioritization & Decision-Making
Value Focused Prioritization & Decision-MakingValue Focused Prioritization & Decision-Making
Value Focused Prioritization & Decision-Making
 
Formula 1 Lean by Jon Stahl
Formula 1 Lean by Jon StahlFormula 1 Lean by Jon Stahl
Formula 1 Lean by Jon Stahl
 
Servant Leadership with Moral Authority @LeanDog by Jon R. Stahl
Servant Leadership with Moral Authority @LeanDog by Jon R. StahlServant Leadership with Moral Authority @LeanDog by Jon R. Stahl
Servant Leadership with Moral Authority @LeanDog by Jon R. Stahl
 
No one reads anything designing for users on the move
No one reads anything  designing for users on the move No one reads anything  designing for users on the move
No one reads anything designing for users on the move
 
Practical introduction to dev ops with chef
Practical introduction to dev ops with chefPractical introduction to dev ops with chef
Practical introduction to dev ops with chef
 
Key lean principles for organizational change
Key lean principles for organizational changeKey lean principles for organizational change
Key lean principles for organizational change
 
Pair programming-agile2012
Pair programming-agile2012Pair programming-agile2012
Pair programming-agile2012
 
Collaboration
CollaborationCollaboration
Collaboration
 
Qa team sport
Qa team sportQa team sport
Qa team sport
 
Agile & UX What changes and other C.R.A.P.
Agile & UX What changes and other C.R.A.P.Agile & UX What changes and other C.R.A.P.
Agile & UX What changes and other C.R.A.P.
 
Falling in love_with_bad_news
Falling in love_with_bad_newsFalling in love_with_bad_news
Falling in love_with_bad_news
 
Agile From the Top Down: Executives & Leadership Living Agile by Jon Stahl
Agile From the Top Down: Executives & Leadership Living Agile  by Jon StahlAgile From the Top Down: Executives & Leadership Living Agile  by Jon Stahl
Agile From the Top Down: Executives & Leadership Living Agile by Jon Stahl
 
Agile Explained by LeanDog
Agile Explained by LeanDogAgile Explained by LeanDog
Agile Explained by LeanDog
 
Seeing Constraints, Kanban Explained by Jon Stahl
Seeing Constraints, Kanban Explained by Jon StahlSeeing Constraints, Kanban Explained by Jon Stahl
Seeing Constraints, Kanban Explained by Jon Stahl
 

Recently uploaded

Recently uploaded (20)

IESVE for Early Stage Design and Planning
IESVE for Early Stage Design and PlanningIESVE for Early Stage Design and Planning
IESVE for Early Stage Design and Planning
 
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdfSimplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
 
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
 
Syngulon - Selection technology May 2024.pdf
Syngulon - Selection technology May 2024.pdfSyngulon - Selection technology May 2024.pdf
Syngulon - Selection technology May 2024.pdf
 
AI presentation and introduction - Retrieval Augmented Generation RAG 101
AI presentation and introduction - Retrieval Augmented Generation RAG 101AI presentation and introduction - Retrieval Augmented Generation RAG 101
AI presentation and introduction - Retrieval Augmented Generation RAG 101
 
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptxUnpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
 
Demystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John StaveleyDemystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John Staveley
 
Where to Learn More About FDO _ Richard at FIDO Alliance.pdf
Where to Learn More About FDO _ Richard at FIDO Alliance.pdfWhere to Learn More About FDO _ Richard at FIDO Alliance.pdf
Where to Learn More About FDO _ Richard at FIDO Alliance.pdf
 
Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...
Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...
Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...
 
ECS 2024 Teams Premium - Pretty Secure
ECS 2024   Teams Premium - Pretty SecureECS 2024   Teams Premium - Pretty Secure
ECS 2024 Teams Premium - Pretty Secure
 
The UX of Automation by AJ King, Senior UX Researcher, Ocado
The UX of Automation by AJ King, Senior UX Researcher, OcadoThe UX of Automation by AJ King, Senior UX Researcher, Ocado
The UX of Automation by AJ King, Senior UX Researcher, Ocado
 
Free and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
Free and Effective: Making Flows Publicly Accessible, Yumi IbrahimzadeFree and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
Free and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
 
How we scaled to 80K users by doing nothing!.pdf
How we scaled to 80K users by doing nothing!.pdfHow we scaled to 80K users by doing nothing!.pdf
How we scaled to 80K users by doing nothing!.pdf
 
Strategic AI Integration in Engineering Teams
Strategic AI Integration in Engineering TeamsStrategic AI Integration in Engineering Teams
Strategic AI Integration in Engineering Teams
 
Top 10 Symfony Development Companies 2024
Top 10 Symfony Development Companies 2024Top 10 Symfony Development Companies 2024
Top 10 Symfony Development Companies 2024
 
Speed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in MinutesSpeed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in Minutes
 
IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024
 
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
 
Powerful Start- the Key to Project Success, Barbara Laskowska
Powerful Start- the Key to Project Success, Barbara LaskowskaPowerful Start- the Key to Project Success, Barbara Laskowska
Powerful Start- the Key to Project Success, Barbara Laskowska
 
Extensible Python: Robustness through Addition - PyCon 2024
Extensible Python: Robustness through Addition - PyCon 2024Extensible Python: Robustness through Addition - PyCon 2024
Extensible Python: Robustness through Addition - PyCon 2024
 

The Technical Debt Trap - Michael "Doc" Norton

  • 1. The Technical Debt Trap Michael J Norton @DocOnDev LeanDog LLC* *The views expressed are not necessarily the views of LeanDog LLC (but they could be)
  • 4. What is Technical Debt? Ward Cunningham oopsla’92
  • 5. What is Technical Debt? Ward Cunningham Shipping first time code is like going into debt. oopsla’92
  • 6. What is Technical Debt? Ward Cunningham Shipping first time code is like going into debt. A little debt speeds development so long as it is paid back promptly with a rewrite. oopsla’92
  • 7. What is Technical Debt? Ward Cunningham The danger occurs when the debt is not repaid. Every minute spent on not- quite-right code counts as interest on that debt. oopsla’92
  • 8. What is Technical Debt? Ward Cunningham The danger occurs when the debt is not repaid. Every minute spent on not- quite-right code counts as interest on that debt. oopsla’92
  • 9. Technical Debt is a Good Idea
  • 10. Technical Debt is a Good Idea WTF?
  • 11. Technical Debt is a Good Idea Strategic Design Decision
  • 12. Technical Debt is a Good Idea Strategic Design Decision Allow for Rapid Delivery To Ellicit Quick Feedback And Correct Design
  • 13. Technical Debt is a Metaphor Here Be Danger
  • 14. Metaphors Rock We reason by analogy Can’t keep running at this pace Building on a weak foundation Puts pressure on It’s raining men our design
  • 15. Metaphors Rock We reason by analogy Can’t keep running at this pace Building on a weak foundation Puts pressure on It’s raining men our design (hallelujah)
  • 17. Metaphorphosis When Metaphors go wrong Return on Investment Short-Term Fraudulent Credit Card Inadvertent RecklessScheme Pyramid Debt Auto Loan High Interest in the Third Quadrant Home Loan Voluntary Intentional Loan Shark Long-Term Prudent Student Loan Pragmatic Leverage Operational
  • 19. Metaphorphosis When Metaphors go wrong “cut a lot of corners” James Shore http://jamesshore.com/Blog/CardMeeting/Voluntary-Technical-Debt.html “quick and dirty” Martin Fowler “sloppy” http://www.martinfowler.com/bliki/TechnicalDebt.html David Laribee “just hack it in” http://msdn.microsoft.com/en-us/magazine/ee819135.aspx Steve McConnell http://blogs.construx.com/blogs/stevemcc/archive/2007/11/01/technical-debt-2.aspx
  • 20. That’s not what I said Ward Cunningham [Many] have explained the debt metaphor and confused it with the idea that you could write code poorly with the intention of doing a good job later. http://www.youtube.com/watch?v=pqeJFYwnkjE&feature=player_embedded youtube.com 2009
  • 21. That’s not what I said Ward Cunningham [Many] have explained the debt metaphor and confused it with the idea that you could write code poorly with the intention of doing a good job later. http://www.youtube.com/watch?v=pqeJFYwnkjE&feature=player_embedded youtube.com 2009
  • 22. That’s not what I said Ward Cunningham ... confused it with the idea that you could write code poorly ... youtube.com 2009
  • 23. Clean Code is Required Ward Cunningham The ability to pay back debt [...] depends upon you writing code that is clean enough to be able to refactor as you come to understand your problem. youtube.com 2009
  • 24. Clean Code is Required Ward Cunningham The ability to pay back debt [...] depends upon you writing code that is clean enough to be able to refactor as you come to understand your problem. youtube.com 2009
  • 25. Dirty Code is a Bad Idea Ward Cunningham Dirty code is to technical debt as the pawn broker is to financial debt. Don't think you are ever going to get your code back. http://twitter.com/WardCunningham/status/3742903303 twitter 2009
  • 26. Is it Technical Debt? Ask yourself... Is the code clean? Is the code tested? Is there a learning objective? Is there a plan for payback? Is the business truly informed?
  • 27. Is it Technical Debt? If you said no to even one Is the code clean? Is the code tested? Is there a learning objective? Is there a plan for payback? Is the business truly informed? Then you don’t have Technical Debt
  • 28. You have cruft Cruft (noun) 1. An unpleasant substance 2. The result of shoddy construction 3. Redundant, old or improperly written code
  • 29. You have a mess Mess (noun) 1. Disorderly accumulation, heap, or jumble 2. A state of embarrassing confusion 3. An unpleasant or difficult situation
  • 30. Chill. It’s just semantics, man.
  • 31. Chill. It’s just semantics, man. JUST Semantics? Technical Debt is Good
  • 32. Chill. It’s just semantics, man. JUST Semantics? Technical Debt is Good
  • 33. Chill. It’s just semantics, man. JUST Semantics? Quick and Dirty is Technical Debt is Good
  • 34. Chill. It’s just semantics, man. JUST Semantics? Quick and Dirty is Good
  • 35. Chill. It’s just semantics, man. JUST Semantics? Quick and Dirty is Good
  • 36. Messy Code is a Bad Decision Every Time
  • 37. Messy Code is a Bad Decision Every Time You are a professional developer (Professionals behave ethically)
  • 38. Messy Code is a Bad Decision Every Time You are a professional developer (Professionals behave ethically) You are going to create unintentional cruft (You can’t help it. It’s unintentional.)
  • 39. Messy Code is a Bad Decision Every Time You are a professional developer (Professionals behave ethically) You are going to create unintentional cruft (You can’t help it. It’s unintentional.) You have to clean up the existing cruft (Intent doesn’t alter Responsibility)
  • 40. Grammy Doesn’t Love Me! Setting Expectations
  • 42. The Trap Mess begets mess Precedent for Speed over Quality Expectation of increased velocity Mess slows you down Must generate more mess to keep up
  • 43. The Trap Mess begets mess Precedent for Speed over Quality Expectation of increased velocity Mess slows you down Must generate more mess to keep up Ask permission to do your job correctly
  • 44. Avoid The Trap Incremental Fixes Fail http://www.jacoozi.com/blog/wp-content/uploads/2007/01/refactoring_coc_big.jpg
  • 45. Avoid The Trap Clean Constantly
  • 46. Avoid The Trap Clean Constantly Never make an intentional mess Monitor your “Technical Debt” Follow the Boy Scout Rule Quality is your responsibility
  • 47. Avoid The Trap Clean Constantly Never make an intentional mess Monitor your “Technical Debt” Follow the Boy Scout Rule Quality is your responsibility NEVER ask permission to do your job correctly
  • 49. Monitoring Cruft/Debt A few key metrics Code Coverage Cyclomatic Complexity Coupling
  • 51. Monitoring Cruft/Debt Code Coverage Code exercised by automated tests Monitor test types separately Don’t set a coverage target 100% Coverage is a smell
  • 52. Monitoring Cruft/Debt Code Coverage Code exercised by automated tests Monitor test types separately Don’t set a coverage target 100% Coverage is a smell Monitor trends, not points
  • 54. Monitoring Cruft/Debt Cyclomatic Complexity Number of logical branches in code Direct relationship with bugs Typically high in concentrated areas Reduce Conditionals
  • 55. Monitoring Cruft/Debt Cyclomatic Complexity Number of logical branches in code Direct relationship with bugs Typically high in concentrated areas Reduce Conditionals Monitor trends, not points
  • 57. Monitoring Cruft/Debt Coupling Interconnectedness of systems High Coupling = Difficult to Change Afferent (Toward) and Efferent (Away) Dependency Injection
  • 58. Monitoring Cruft/Debt Coupling Interconnectedness of systems High Coupling = Difficult to Change Afferent (Toward) and Efferent (Away) Dependency Injection Monitor trends, not points
  • 60. Lean Start-Ups No exceptions Quick Does NOT Mean Crappy You must have a plan for payback Be careful of the precedent you set Quality is STILL your responsibility
  • 61. Lean Start-Ups No exceptions Quick Does NOT Mean Crappy You must have a plan for payback Be careful of the precedent you set Quality is STILL your responsibility NEVER ask permission to do your job correctly
  • 63. Thank You! The Technical Debt Trap Michael J Norton @DocOnDev LeanDog LLC* doc@leandog.com *The views expressed are not necessarily the views of LeanDog LLC (but they could be)

Editor's Notes

  1. Design decisions that allow for more rapid delivery / illicit quick feedback / gather data necessary to correct design
  2. - Sales site for complex product. Create product configuration views. - Plan to sell several different products. Starting with just one. Don’t extract interface yet.
  3. - Sales site for complex product. Create product configuration views. - Plan to sell several different products. Starting with just one. Don’t extract interface yet.
  4. - Sales site for complex product. Create product configuration views. - Plan to sell several different products. Starting with just one. Don’t extract interface yet.
  5. Not acceptable to violate accounting practices, violate safety laws, or risk patient’s health
  6. Not acceptable to violate accounting practices, violate safety laws, or risk patient’s health
  7. Not acceptable to violate accounting practices, violate safety laws, or risk patient’s health
  8. Not acceptable to violate accounting practices, violate safety laws, or risk patient’s health
  9. Not acceptable to violate accounting practices, violate safety laws, or risk patient’s health
  10. Not acceptable to violate accounting practices, violate safety laws, or risk patient’s health
  11. NDepend JDepend
  12. NDepend JDepend
  13. NDepend JDepend
  14. NDepend JDepend
  15. NDepend JDepend