Top Banner
Credit Crunch Code Paying Back the Technical Debt By Gary Short 1
56

Technical Debt

May 11, 2015

Download

Technology

Gary Short

A presentation on Technical Debt covering definition, anti-patterns, metrics, quantifying and managing.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Technical Debt

1

Credit Crunch Code

Paying Back the Technical DebtBy Gary Short

Page 2: Technical Debt

2

Agenda

• Defining Technical Debt• Why Managing Technical Debt is Important• Quantifying Technical Debt• Technical Debt Anti-Patterns & Fixes• Finding Technical Debt Using Metrics• Summary• Further Reading• Questions.

Page 3: Technical Debt

3

Defining Technical Debt #1

• Term coined by Ward Cunningham in 1992

• Analogous to financial debt– Financial debt = borrow money

against a future date– Technical debt = borrow time

against a future date.

Page 4: Technical Debt

4

Defining Technical Debt #2

• With financial debt– “Virtual debt” by not having the best interest rate

• With Technical Debt– Not making savings against time where possible.

Page 5: Technical Debt

5

Is There Interest On Technical Debt?

• Just as there is interest on financial debt...• So there is interest on technical debt too:– Cost later – cost now– Financial value of damage to your brand– Loss of market share– Low staff morale.

Page 6: Technical Debt

6

Just As Not All Financial Debt Is Bad

Borrow

BuildSell

Repay

Page 7: Technical Debt

7

Nor Is All Technical Debt

Borrow

BuildDeploy

Repay

Page 8: Technical Debt

8

But Financial Debt Can Be Dangerous

Page 9: Technical Debt

9

And So Can Technical Debt

Page 10: Technical Debt

10

Why Is Managing Technical Debt Important?

January February March April May June0

1

2

3

4

5

6

7

8

9

Unmanaged Technical Debt Over Time

Page 11: Technical Debt

11

Reduce Effort by Keeping it Under Control

January February March April May June0

1

2

3

4

5

6

Managed Technical Debt Over Time

Page 12: Technical Debt

12

Quantifying Technical Debt

Page 13: Technical Debt

13

Basic Formula To Get You Started

Bba

XSLHIHPHi

Ti

1i

EOC..HRi

Where:T = Total number of employees involved in paying back the debti = The individual employeeHRi = Hourly rate of pay for that individualHi = The hours that an individual worked in paying back the debtEOC = Employer’s on cost – estimated at 40% of salary = 140% of salaryHP = Purchase cost of any hardware requiredHI = Installation cost of any hardware requiredSL= Cost of any software licencesX/Bba = An estimate of the damage to brand image.

Page 14: Technical Debt

14

Rate Card

• Project Manager = 32 Euros / hour• Architect = 33 Euros / hour• Lead Developer = 30 Euros / hour• Developer = 26 Euros / hour• Tester = 20 Euros / hour• Tech. Support = 15 Euros / hour• Business Analyst = 32 Euros / hour.

*Hourly rate = average annual salary / (52 – 5wks AL * 5 – 9 days PH * 8 hrs)**UK hourly rate converted to Euros via Google ***Correct as of November ’09. YMMV

Page 15: Technical Debt

15

Case Study #1

• The Anti-Pattern: Waterfall Methodology

Page 16: Technical Debt

16

The Main Weakness of Waterfall

1 2 3 4 5 6 7 8 9 10

Cost of Change Over Time

Page 17: Technical Debt

17

Where Does Change Come From?

1 2 3 4 5 6 7 8 9 10

SME Knowledge Over Time

Page 18: Technical Debt

18

Why is Change So Costly?

1 2 3 4 5 6 7 8 9 10

SME Knowledge Over Time

1 2 3 4 5 6 7 8 9 10

Cost of Change Over Time

Page 19: Technical Debt

19

Why Is This Technical Debt?

• Borrow time now, repay later• Take advantages now– Ease in analysing potential changes– Ease of coordinating large teams– Precise budgeting

• Repay later– Extra cost of change.

Page 20: Technical Debt

20

Quantify the Technical Debt: Agile

• Assume a small error caught during the “paper prototype” phase of an iteration

• Resources deployed– Architect spends 1 hour fixing design– Tester spends 1/2 hour verifying the fix– Apply those figures to our formula and:

• Cost of fixing the error = 60 Euros.

Page 21: Technical Debt

21

Quantify the Technical Debt: BDUF

• Now the same error found in waterfall...• Resources deployed– Architect 1 hour fixing design– Developer spends 4 hours coding solution– Lead developer spends ½ hour peer review– Tester spends 2 hours verifying fix– Apply those figures to our formula and:

• Cost of fixing the error = 208 Euros• Value of the technical debt = 148 Euros.

Page 22: Technical Debt

22

Potential Cost Per Project

• So the TD / defect = 148 Euros• The av. number of defects / project = 283*

• Potential TD / project = 41,884 Euros.

*Source: Scan 2006 Benchmark (as of March 2008)

Page 23: Technical Debt

23

Fixing The Technical Debt

• I’m not saying prefer Agile over Waterfall• I am saying:– Be aware of the impact that might have on TD• Think about how you are going to combat that:

– Review earlier in the process where change is cheap– Ensure the SME has peer review– Regular, early checks on design vs coded solution

• Don’t leave all testing to the last phase.

Page 24: Technical Debt

24

Case Study #2

• The Anti – Pattern: Not Invented Here

Page 25: Technical Debt

25

Symptoms

• Development team spend time developing software which is not core the problem they are trying to solve

• Instead of buying in a third party solution• They justify this by saying things like:– It doesn’t work the way we need it to– It would take me as long to write as to learn API– The 3rd party may go bust– The code isn’t good enough quality.

Page 26: Technical Debt

26

Concrete Example

• Developers for a national bank are tasked with creating a new MIS tool

• They dedicate 1 developer full time to creating a charting component

• This sucks in testing and PM time too• Charting component not core to task at hand• Spent 3 months getting nowhere• Before buying a charting component.

Page 27: Technical Debt

27

Why Is This Technical Debt?

• Savings against time not made• Chose to develop a component• Should have bought from a third party.

Page 28: Technical Debt

28

Quantifying The Technical Debt

• The component was bought in the end:– Disregard the cost of the component– And the time spent learning the API

• Resources deployed:– 1 X developer 3 months– 1 X tester 1.5 months– 1 X lead developer 1 day– 1 X PM 1 day

• Cost of technical debt : 24,886 Euros

Page 29: Technical Debt

29

Fixing The Technical Debt

• Identify non core functional aspects of project– For each of those:• Can a component be bought in to achieve it?• If so, buy it• If not

– Does your enterprise allow open source?– If so use it

» Beware of licence implications– Only after evaluating and discounting alternatives should you

consider writing your own.

Page 30: Technical Debt

30

Case Study #3

• Anti-Pattern: Code that plays together stays together

Page 31: Technical Debt

31

Symptoms

• Let’s imagine a “Car” object• What properties should it have?– Make– Model– Colour

• What behaviour should it have?– None!– It’s an inanimate object!

• A “Car” will have things done to it by “actors”.

Page 32: Technical Debt

32

What Is The Problem?

1 2 3 4 5 6 7 8 9 10

Difficulty in adding Features Over Time

Page 33: Technical Debt

33

Example of Class Pollution

Credit: Phil Winstanley (http://weblogs.asp.net/Plip/)

Page 34: Technical Debt

34

Why Is This Technical Debt?

• Borrow time now, repay later• Borrowed time now– Simpler object graph

• Repay later in cost of adding functionality.

Page 35: Technical Debt

35

Concrete Example

• Online provider wants to be first to market• Ships service with monolithic object graph• Effort required to add new features grows• Development slows to a crawl• Management demand a fix.

Page 36: Technical Debt

36

Quantifying the Technical Debt

• 1 monthly iteration to fix this debt• Resources deployed:– 5 X Developers– 1 X lead developer– 2 X testers

• Apply these figures to our formula and:• Cost of technical debt: 44,800 Euros.

Page 37: Technical Debt

37

Fixing The Technical Debt

• Understand that– Monolithic object graph has a limited lifespan– Prefer separation of concerns– If first to market is important• Understand the value of the technical debt accrued• Decide when the debt will be paid off• Decide if commercial gain outweighs cost of debt

• Refactoring tools can reduce “interest” on debt.

Page 38: Technical Debt

38

Case Study #4

• The Anti-Pattern: Sensitive Tests

Page 39: Technical Debt

39

Symptoms

• Test which are sensitive to– Context– Interface– Data

• Pass in one iteration• Fail in the next due to changes.

Page 40: Technical Debt

40

Why Is This Technical Debt?

• Borrow time now, repay later• Borrowed time in the form of easy to write

tests• Repay later in form of fixing sensitive tests.

Page 41: Technical Debt

41

Concrete Example

• Tester testing code which uses data from development database

• Developer adds new functionality– Shape of the database changes– Values in the database change

• Previously passing tests fail• Tests rewritten using current dev. database.

Page 42: Technical Debt

42

Quantifying the Technical Debt

• Take previous 283 defects per project• Assume 10% of tests for those defects are

data dependant• Assume it takes tester 30 minutes to fix each

test• 28 * 0.5 = 14 hours• Apply those figures to our formula and:• Technical debt = 392 Euros.

Page 43: Technical Debt

43

Fixing The Technical Debt

• Test must use independent data– Don’t run tests against development data– Either• Have a dedicated test database• Or it may be possible to mock data access • Or have the set up code for each test or suite of tests

generate the data it requires and drop it during the tear down code.

Page 44: Technical Debt

44

How Do We Spot Technical Debt?

Page 45: Technical Debt

45

We Are Used to Charting Progress

1 2 3 4 5 6 7 8 9 1011121314151617181920212223242526272829300

102030405060708090

100

Burndown Graph

Days

% T

ask

Rem

aini

ng

Page 46: Technical Debt

46

Time Budget Failures Are Obvious

1 2 3 4 5 6 7 8 9 1011121314151617181920212223242526272829300

102030405060708090

100

Burndown Graph

Days

% T

ask

Rem

aini

ng

Page 47: Technical Debt

47

Effect #1 – Loss of Productivity

0 2 4 6 8 10 12 140

2

4

6

8

10

12

14

16

Items of Functionality per Iteration

Iteration Number

Item

s of

Fun

ction

ality

Com

plet

ed

Page 48: Technical Debt

48

Effect #1 – Loss of Productivity

0 2 4 6 8 10 12 140

2

4

6

8

10

12

14

Items of Functionality per Iteration

Iteration Number

Item

s of

Fun

ction

ality

Com

plet

ed

Page 49: Technical Debt

49

Effect #2 – Increase In Testing

0 2 4 6 8 10 12 140

2

4

6

8

10

12

14

16

Tests per Item of Functionality

Iteration Number

# Te

sts

per I

tem

of F

uncti

onal

ity

Page 50: Technical Debt

50

Effect #2 – Increase In Testing

0 2 4 6 8 10 12 1402468

1012141618

Tests per Item of Functionality

Iteration Number

# Te

sts

per I

tem

of F

uncti

onal

ity

Page 51: Technical Debt

51

Effect #3 – Decrease In Morale

0 2 4 6 8 10 12 140

1

2

3

4

5

Team Morale

Iteration Number

Ave

rage

Tea

m M

oral

e

Page 52: Technical Debt

52

Effect #3 – Decrease In Morale

0 2 4 6 8 10 12 140

1

2

3

4

5

Team Morale

Iteration Number

Ave

rage

Tea

m M

oral

e

Page 53: Technical Debt

53

Summary

• In this presentation you learned:– What technical debt is– That it is important to manage technical debt– Some common anti-patterns and how to fix them– Metrics to spot hidden technical debt– How to quantify technical debt.

Page 54: Technical Debt

54

Take Away

• If you only take away one thing– Know that technical debt is• the silent killer that stalks all projects

– Don’t let it kill your projects!

Page 55: Technical Debt

55

Further Reading

• http://c2.com/cgi/wiki?WardExplainsDebtMetaphor• http://c2.com/cgi/wiki?TechnicalDebt• http://blogs.construx.com/blogs/stevemcc/

archive/2007/11/01/technical-debt-2.aspx• http://www.martinfowler.com/bliki/TechnicalDebt.html

Page 56: Technical Debt

56

Questions?

• There wasn’t time for my question• Where can I contact you?– [email protected]– www.garyshort.org– On Twitter as @garyshort.