Elizabeth NaramorePHPBenelux
January 28, 2011
Technical Debt
1
Technical Debt:
What is it?
2
Technical Debt:
Why should we care?
3
"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...
The danger occurs when the debt is not repaid. Every minute spent on non-quite-right code counts as interest on that debt.
--Ward Cunningham, 1992
4
"I think that there were plenty of cases where people would rush software out the door and learn things but never put
that learning back into the program, and that by analogy, was borrowing money
thinking that you never had to pay it back.... eventually all your income
goes to interest and your purchasing power goes to zero."
5
Code or practicesthat will hinder your progressin the future.
What is technical debt?
6
Too much technical debtcan cripple your teamor organization.
Why should we care?
7
lack of documentationuntested codesuppressed errorsunshared knowledge between teams or peopleconfusing code, inconsistencies, "workarounds"local changes you've not committed
You have technical debt if you have:
8
code that doesn't follow coding standardsnon-existent or improperly used version controlunstable deployment processduplicate code blocksindividual code ownership3rd party software that needs updated or patched
Or, if you have:
9
Guess what?
10
We all have it.
11
Don't panic.
12
Some technical debtis ok.
13
It lets you hit a deadlineIt lets you test an experimental featureThe code is rarely touchedYou are coding based on reasonable expectations It allows you to extend startup moneyYour code is at the end of the life-cycle
It might make sense if:
14
This is also known asprudent
technical debt.
15
So when istechnical debt
not ok?
16
So when istechnical debt
not ok?
All the other times.
17
This is also known asreckless
technical debt.
18
Sometimes we knowwe are taking shortcuts,
but we do it anyway.
19
This is also known asdeliberate
technical debt.
20
Sometimes we don't know any better, or
the debt is not our fault.
21
inexperienced team memberschanging project requirementspost-release retrospectivessecurity patches or updates from 3rd parties
This debt could come from:
22
This is also known asinadvertent
technical debt.
23
4 ways to classifytechnical debt:
Prudent vs. RecklessDeliberate vs. Inadvertent
24
Martin Fowler's Quadrant
25
Martin Fowler's Quadrant
26
By minimizingdeliberate debt,
you make it easierto handle
inadvertent debt.
27
So now that we knowwhat it is,
what do we do with it?
28
We tackle our debtwith
D.E.B.T.
(see what I did there?)29
DiscoverEstimateBreak DownTask & Track
30
Where is our technical debt?
Discover
31
Where is our technical debt?
Ask the developers on your team Use the checklist mentioned earlier Use software like PHPUnderControl or Sonar
Discover
32
lack of documentationuntested codesuppressed errorsunshared knowledge between teams or peopleconfusing code, inconsistencies, "workarounds"local changes you've not committed
Discover
33
code that doesn't follow coding standardsnon-existent or improperly used version controlunstable deployment processduplicate code blocksindividual code ownership3rd party software that needs updated or patched
Discover
34
Where is our technical debt?
Ask the developers on your team Use the checklist mentioned earlier Use software like PHPUnderControl or Sonar
Discover
35
http://phpundercontrol.org/
Discover
36
PhpUnderControl uses:- PHPUnit- phpDocumentor- PHP_CodeSniffer
Discover
37
http://sonarsource.com
Discover
38
Sonar uses:- PHPUnit- PHP_CodeSniffer- PHPDepend- PHPMD- phpcpd
Discover
39
What will it take to pay it off?
How badly is it hurting us?
Estimate
40
The Sonar Formula
Debt(in man days)= cost_to_fix_duplications +cost_to_fix_violations +
cost_to_comment_public_API +cost_to_fix_uncovered_complexity +
cost_to_bring_complexity_below_threshold +cost_to_cut_cycles_at_package_level
Estimate
41
The Sonar Formula
Estimate
42
http://nemo.sonarsource.org
Estimate
43
Estimate
44
But how much is it costing us?
The Simple-ish Formula
Amount of the “loan” = cost to fix“Interest Rate” = Adverse impact on development
Estimate
45
Quantifying is hard.
OK to use other techniques to generalizethe interest rate.
Estimate
46
Use estimation technique that works for youGet input and buy-in from the team
Estimate
47
What do we do with it?
Break it Down
48
What do we do with it?
Every task breaks down into 2 categories:1. Debts where we continue paying interest2. Debts where we pay the principal
Break Down
49
How can we make it visible?
Task and Track
50
How can we make it visible?
Add it to bug tracker, task board, etc.
Task and Track
51
Paying it Off
52
Focus on higher interest rate items first
OR
Focus on small ticket items first.
Paying it Off
53
Dedicate time for technical debt reduction.
● Use time right after a release● Tech debt iteration ● Time each day for tech debt● Refactor as you go● Use off-season time
Paying it Off
54
Keep track of your progress.
Paying it Off
55
● Break past habits ● Group consensus & commitment● Teach your “children” well● Never file for bankruptcy● Live within your means● Anticipate your needs
Preventing Technical Debt
56
CHANGE MANAGEMENT
A Few Words About
57
Change Management
58
Change Management
59
1. Direct the Rider
Change Management
60
2. Motivate the Elephant
Change Management
61
3. Shape the Path
Change Management
62
PHP UnderControl: http://phpundercontrol.org
Sonar: http://www.sonarsource.com/(plus tech debt plugin)
Make sure to see:
63
http://joind.in/talk/view/2418
64
Want to contact me?
http://naramore.net/blog@ElizabethN
[email protected] IRC: ElizabethN
THANKS!
Image used with permission from Martin Fowler
65
Recommended