Technical Debt
 Elizabeth Naramore
     PHPBenelux
  January 28, 2011




                      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
What is technical debt?
  Code or practices
  that will hinder your progress
  in the future.




                                   6
Why should we care?
   Too much technical debt
   can cripple your team
   or organization.




                             7
You have technical debt
      if you have:
 lack of documentation
 untested code
 suppressed errors
 unshared knowledge between teams or people
 confusing code, inconsistencies, "workarounds"
 local changes you've not committed

                                                  8
Or, if you have:
code that doesn't follow coding standards
non-existent or improperly used version control
unstable deployment process
duplicate code blocks
individual code ownership
3rd party software that needs updated or patched



                                                   9
Guess what?



              10
We all have it.


                  11
Don't panic.




               12
Some technical debt
       is ok.



                      13
It might make sense if:
It lets you hit a deadline
It lets you test an experimental feature
The code is rarely touched
You are coding based on reasonable expectations
It allows you to extend startup money
Your code is at the end of the life-cycle


                                              14
This is also known as
       prudent
   technical debt.



                        15
So when is
technical debt
   not ok?



                 16
So when is
  technical debt
     not ok?

All the other times.
                       17
This is also known as
       reckless
   technical debt.



                        18
Sometimes we know
we are taking shortcuts,
 but we do it anyway.


                       19
This is also known as
      deliberate
   technical debt.



                        20
Sometimes we don't
  know any better, or
the debt is not our fault.


                         21
This debt could
       come from:
inexperienced team members
changing project requirements
post-release retrospectives
                                  rd
security patches or updates from 3 parties



                                             22
This is also known as
     inadvertent
   technical debt.



                        23
4 ways to classify
    technical debt:

  Prudent vs. Reckless
Deliberate vs. Inadvertent

                             24
Martin Fowler's Quadrant




                           25
Martin Fowler's Quadrant




                           26
By minimizing
 deliberate debt,
you make it easier
    to handle
inadvertent debt.
                     27
So now that we know
      what it is,
what do we do with it?


                         28
We tackle our debt
      with

    D.E.B.T.
  (see what I did there?)
                            29
Discover
Estimate
Break Down
Task & Track

               30
Discover


Where is our technical debt?




                               31
Discover
    Where is our technical debt?

Ask the developers on your team
Use the checklist mentioned earlier
Use software like PHPUnderControl or Sonar



                                        32
Discover

lack of documentation
untested code
suppressed errors
unshared knowledge between teams or people
confusing code, inconsistencies, "workarounds"
local changes you've not committed



                                                 33
Discover

code that doesn't follow coding standards
non-existent or improperly used version control
unstable deployment process
duplicate code blocks
individual code ownership
3rd party software that needs updated or patched



                                                   34
Discover
    Where is our technical debt?

Ask the developers on your team
Use the checklist mentioned earlier
Use software like PHPUnderControl or Sonar



                                        35
Discover


http://phpundercontrol.org/




                              36
Discover

PhpUnderControl uses:
- PHPUnit
- phpDocumentor
- PHP_CodeSniffer


                        37
Discover


http://sonarsource.com




                         38
Discover
    Sonar uses:
- PHPUnit
- PHP_CodeSniffer
- PHPDepend
- PHPMD
- phpcpd

                    39
Estimate

What will it take to pay it off?

 How badly is it hurting us?



                                   40
Estimate
           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
                                                41
Estimate
The Sonar Formula




                    42
Estimate


http://nemo.sonarsource.org




                              43
Estimate




           44
Estimate
    But how much is it costing us?

          The Simple-ish Formula

        Amount of the “loan” = cost to fix
“Interest Rate” = Adverse impact on development



                                              45
Estimate
          Quantifying is hard.

OK to use other techniques to generalize
            the interest rate.




                                           46
Estimate

Use estimation technique that works for you
Get input and buy-in from the team




                                          47
Break it Down


What do we do with it?



                         48
Break Down
       What do we do with it?

Every task breaks down into 2 categories:
1. Debts where we continue paying interest
2. Debts where we pay the principal



                                         49
Task and Track


How can we make it visible?




                              50
Task and Track
  How can we make it visible?

Add it to bug tracker, task board, etc.




                                          51
Paying it Off



                52
Paying it Off
Focus on higher interest rate items first

                   OR

   Focus on small ticket items first.


                                            53
Paying it Off
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
                                         54
Paying it Off

Keep track of your progress.




                               55
Preventing Technical Debt

●
  Break past habits
●
  Group consensus & commitment
●
  Teach your “children” well
●
  Never file for bankruptcy
●
  Live within your means
●
  Anticipate your needs

                                 56
A Few Words About


  CHANGE
MANAGEMENT

                    57
Change Management




                    58
Change Management




                    59
Change Management


1. Direct the Rider


                      60
Change Management


2. Motivate the Elephant


                       61
Change Management


3. Shape the Path


                    62
Make sure to see:

PHP UnderControl:
http://phpundercontrol.org

Sonar:
http://www.sonarsource.com/
(plus tech debt plugin)
                              63
http://joind.in/talk/view/2418



                                 64
Want to contact me?
   http://naramore.net/blog
          @ElizabethN
   elizabeth@naramore.net
   Freenode IRC: ElizabethN

                   THANKS!

 Image used with permission from Martin Fowler

                                                 65

Technical Debt - PHPBenelux