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?
Boost Fertility New Invention Ups Success Rates.pdf
The Technical Debt Trap
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)
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
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
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)
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
46. Avoid The Trap
Clean Constantly
Never make an intentional mess
Follow the Boy Scout Rule
Monitor your “Technical Debt”
Quality is your responsibility
47. Avoid The Trap
Clean Constantly
Never make an intentional mess
Follow the Boy Scout Rule
Monitor your “Technical Debt”
Quality is your responsibility
NEVER ask permission to do your job correctly
49. 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
50. 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
52. 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
Design decisions that allow for more rapid delivery / illicit quick feedback / gather data necessary to correct design
- Sales site for complex product. Create product configuration views.
- Plan to sell several different products. Starting with just one. Don’t extract interface yet.
- Sales site for complex product. Create product configuration views.
- Plan to sell several different products. Starting with just one. Don’t extract interface yet.
- Sales site for complex product. Create product configuration views.
- Plan to sell several different products. Starting with just one. Don’t extract interface yet.
Not acceptable to violate accounting practices, violate safety laws, or risk patient’s health
Not acceptable to violate accounting practices, violate safety laws, or risk patient’s health
Not acceptable to violate accounting practices, violate safety laws, or risk patient’s health
Not acceptable to violate accounting practices, violate safety laws, or risk patient’s health
Not acceptable to violate accounting practices, violate safety laws, or risk patient’s health
Not acceptable to violate accounting practices, violate safety laws, or risk patient’s health