The Technical Debt Trap - Michael "Doc" Norton
Upcoming SlideShare
Loading in...5
×
 

The Technical Debt Trap - Michael "Doc" Norton

on

  • 3,459 views

Technical Debt has become a catch-all phrase for any code that needs to be re-worked. Much like Refactoring has become a catch-all phrase for any activity that involves changing code....

Technical Debt has become a catch-all phrase for any code that needs to be re-worked. Much like Refactoring has become a catch-all phrase for any activity that involves changing code.

These fundamental misunderstandings and comfortable yet mis-applied metaphors have resulted in a plethora of poor decisions.

What is technical debt?

What is not technical debt?

Why should we care?

What is the cost of misunderstanding?

What do we do about it?

Statistics

Views

Total Views
3,459
Views on SlideShare
2,373
Embed Views
1,086

Actions

Likes
1
Downloads
36
Comments
0

14 Embeds 1,086

http://www.javiergarzas.com 536
http://leandog.com 167
http://cloud.feedly.com 134
http://localhost 116
http://www.leandog.com 108
http://summary 7
http://feeds.feedburner.com 5
https://twitter.com 3
http://www.linkedin.com 3
http://localhost:4567 3
http://digg.com 1
http://127.0.0.1 1
http://www.feedspot.com 1
https://www.linkedin.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • Design decisions that allow for more rapid delivery / illicit quick feedback / gather data necessary to correct design <br />
  • - Sales site for complex product. Create product configuration views. <br /> - Plan to sell several different products. Starting with just one. Don&#x2019;t extract interface yet. <br /> <br /> <br />
  • - Sales site for complex product. Create product configuration views. <br /> - Plan to sell several different products. Starting with just one. Don&#x2019;t extract interface yet. <br /> <br /> <br />
  • - Sales site for complex product. Create product configuration views. <br /> - Plan to sell several different products. Starting with just one. Don&#x2019;t extract interface yet. <br /> <br /> <br />
  • <br />
  • <br /> <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • Not acceptable to violate accounting practices, violate safety laws, or risk patient&#x2019;s health <br /> <br />
  • Not acceptable to violate accounting practices, violate safety laws, or risk patient&#x2019;s health <br /> <br />
  • Not acceptable to violate accounting practices, violate safety laws, or risk patient&#x2019;s health <br /> <br />
  • Not acceptable to violate accounting practices, violate safety laws, or risk patient&#x2019;s health <br /> <br />
  • Not acceptable to violate accounting practices, violate safety laws, or risk patient&#x2019;s health <br /> <br />
  • Not acceptable to violate accounting practices, violate safety laws, or risk patient&#x2019;s health <br /> <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • NDepend <br /> JDepend <br /> <br />
  • NDepend <br /> JDepend <br /> <br />
  • NDepend <br /> JDepend <br /> <br />
  • NDepend <br /> JDepend <br /> <br />
  • NDepend <br /> JDepend <br /> <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />

The Technical Debt Trap - Michael "Doc" Norton The Technical Debt Trap - Michael "Doc" Norton Presentation Transcript

  • 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)