SlideShare uma empresa Scribd logo
1 de 83
1
Agenda




         2
About me




           3
What’s going on?
• Start a little slow
• Quickly pick up - A lot of features are getting developed
• Things start to slow down
• Can’t seem to recover
• These are signs of bad code and technical debt




                                                              4
Adding new features or simple changes take forever


Picture: http://www.flickr.com/photos/49531720@N00/247730111/




                                                                5
Delivery dates are missed

Picture: http://www.flickr.com/photos/89306448@N00/2247180420/




                                                                 6
Bugs increase

Picture: http://www.flickr.com/photos/71962092@N00/2874328851/




                                                                 7
Team is frustrated
Morale is low

Picture: http://www.flickr.com/photos/16857236@N03/2429136239/




                                                                 8
Customer is unhappy




                      9
Uncle Bob provides the following attributes of bad code:
Rigidity – difficult to change. A change causes a cascade of subsequent changes in
dependent modules. Result -> manager fear to fix non critical problems because no
reliability on impact and how long it will take. This lead to rigidity.




                                                                                     10
Fragility – closely related to rigidity. Software tends to break in many places every
time it is changed. Even in areas that are conceptually unrelated. As this increases,
software becomes impossible to maintain because every fix introduces 5 new bugs.
This leads to distrust and a loss of credibility.




                                                                                        11
Developers end up playing whack-a-bug.


Picture: http://www.flickr.com/photos/tpapi/2765541278/




                                                          12
Immobility – inability to reuse software from other parts of the system. Need module
similar to another one already written, however, module has too much baggage. It is
hard and risky to separate desirable part from undesirable part so decide to rewrite
instead of reuse.

Picture: http://www.flickr.com/photos/97041449@N00/5261698908/




                                                                                       13
Viscosity – design (when faced with a change, take easy way(hack) or hard way)
Environment-
• If compile time is long, make changes that do not force large recompile
• If check-in takes a long time, make as few check ins as possible
• If deployment is difficult, make changes in database.
• End up applying the easiest change to avoid environment issues even if change is in
   the wrong place.




                                                                                        14
Reasons for bad code:
Excuses about deadlines – no time to test, no time for design change




                                                                       15
Broken Window Theory:
Police in NYC conducted a study
1. Parked a car in a bad neighborhood and observed
2. Nothing happened for a couple of days
3. Police broke small rear window and observed
4. Within 4 hours, car was stripped

Picture: http://www.flickr.com/photos/7389424@N05/2351559480/




                                                                16
http://www.flickr.com/photos/24293932@N00/1144691293/




                                                        17
Broken window theory also applies to code.
1. Start out and things are clean
2. Once you introduce one sign of bad code, things quickly get out of hand

As developers, we’ll say, well we are already doing things wrong here, so it does not
matter if we do it wrong here as well.
Soon things spread and get out of control.


Picture: http://www.flickr.com/photos/17454738@N00/2245445147/




                                                                                        18
Over architecting:
• Attempt to envision all possible future scenarios
• Create unnecessary layers of complexity to support things that are not really
  requirements
• Tempted to design solutions to problems in advance of their needs
• Program goes in a different direction and code is written without benefit
• Code doesn’t really fit need because written before problem well understood
• Overdesign takes extra time and produces code that is either unused or doesn’t fit
  the needs of the project




                                                                                       19
Sometimes design is bad and instead of stopping to fix we continue building on top of
it and create an even bigger mess.


Picture: http://www.flickr.com/photos/25196025@N00/381877979/




                                                                                        20
Poor skills or lack of proper training is also a major contributor


http://www.flickr.com/photos/25507200@N07/3120849218/




                                                                     21
Technical debt by Ward Cunningham




                                    22
23
Principal: Cost due to amount of time we need to code it the right way
Interest: Cost due to amount of extra time we spend to work with something not
coded the right way

If it costs the same (no interest), it is just differed work and not technical debt




                                                                                      24
Jim Highsmith about technical debt in terms of impact on Cost of Change




                                                                          25
We trade on quality daily. Have option to buy quality watch, but decide to buy cheaper
one with out knowing what is inside. No visibility into internal quality.

Picture: http://www.flickr.com/photos/39516732@N08/4666623572/




                                                                                         26
Looks the same, and cheaper!

Picture: http://www.flickr.com/photos/64211362@N02/6338814898/




                                                                 27
Martin Fowler about design stamina hypothesis:
• Some benefit by ignoring good design
• Soon productivity flattens out
• Good design route starts out slower, but soon becomes almost linear
• Intersection is design pay-off line
• If above the line, no longer makes sense to ignore good design decision
• Trick to know how far from line.
• Martin estimates in most cases this is in magnitude of weeks not months or years




                                                                                     28
Is all technical debt bad?
Quick and dirty or clean? Which one would you choose?
It depends…




                                                        29
30
31
32
33
34
• Not all technical debt is bad
• Loans to buy a house or a car are generally considered good loans
• We want to be responsible in our decisions




                                                                      35
Martin Fowler introduces the technical debt quadrant:
1. Inadvertent/Reckless: Don’t know that they are doing something wrong
2. Deliberate/Reckless: Know it wrong and continue to do it
3. Deliberate/Prudent: Make conscious decision to take on debt due to specific
business need
4. Inadvertent/Prudent: With the best of intentions, things did not go well (rare)

Most people are in quadrant 1 and 2 and we need to move them to 3.

There are good reasons to take on debt like a shorter time to market, preserving
startup capital, delaying development expenses




                                                                                     36
Types of debt

Unintentional debt: careless mistakes, and honest mistakes (bad judgment) – never a
good idea
Intentional debt – short term (focused and unfocused), long term

Only short focused and long term good debt




                                                                                      37
Flower shop website must be live 2 weeks before valentines day
Otherwise business will go under
Must take on debt to meet date
Will spend x weeks paying back debt while preparing for Mother’s day




                                                                       38
•   Make prudent and deliberate decision on debt
•   Have plan to service debt
•   Make our payments
•   Avoid late payment notices




                                                   39
We don’t want to take on debt when we are behind schedule. This causes a vicious
circle




                                                                                   40
If debt not paid back, business shuts down or application will require re-write

Picture: www.flickr.com/photos/66622362@N00/3353570653/




                                                                                  41
42
Step 1 - Register our debt
• Add shortcuts decisions to technical debt backlog
• Include estimated hours to do it the right way
• Add date of estimate because only valid if paid off immediately




                                                                    43
44
45
We want to try to determine
Cost of clean way
Cost of dirty way
Savings now
Impact (interest rate)
Cost of fix later

Beware of Broken Windows
Avoid debt that is untrackable
Avoid low ROI




                                 46
Step 2 – Evaluate existing code
Inspect and assess level of debt and also register it




                                                        47
Sonar – open source tool




                           48
Various metrics with drill down capabilities




                                               49
Various metrics with drill down capabilities




                                               50
Step 3 - monetize the debt
1. Estimate the amount of hours it takes to fix each type of deficit
2. Multiply by rate/hr
3. Multiply by the total number of items




                                                                       51
Technical debt plugin in Sonar calculates it this way




                                                        52
Another plugin is the SQALE metric (Software Quality Assessment based on Life Cycle
Expectations)
that breaks things along characteristics (non functional requirements), sub
characteristics, and source code requirements

Changeability -> loose coupling or related changeability -> code duplication
Maintainability -> understandability -> redundant throws or simplifying Boolean
expressions, or unused variables
Security -> Errors -> preserving track trace, sql injection, or system.exit
Reliability - > unit test or exception handling -> unit test coverage, illegal throws
Testability -> unit level testability -> cyclomatic complexity
Efficiency -> memory usage -> correct data types or static final or string buffering
Portability -> software related portability -> imports, or locale

The method defines 4 key concepts:
1. The Quality Model: The SQALE Quality Model is used for formulating and organizing
the non-functional requirements that relate to code quality. It is organized in three
hierarchical levels. The first level is composed of characteristics, the second of sub-
characteristics. The third level is composed of requirements that relate to the source
code’s internal attributes. These requirements usually depend on the software context
and language.




                                                                                          53
2. The Analysis Model: The SQALE Analysis Model contains on the one hand the rules
that are used for normalizing the measures and the violations relating to the code, and
on the other hand the rules for aggregating the normalized values.

3. The Indices: All indices represent costs. One represents the Technical Debt of the
application. Others are used to analyze that debt.

4. The Indicators: The method defines three summarized indicators. They have been
defined to provide a visual representation of the Technical Debt.




                                                                                          53
54
55
Costs can be customized for own environment

Future work:
Prioritization, based on impact.
Try to link cost vs. impact on business. Example, fixing non-initialized variable is low
cost, however, it can cause large damage




                                                                                           56
57
58
With dollar amount associated with technical debt, we can engage upper management
with a language they understand




                                                                                    59
Agile Triangle by Jim Highsmith




                                  60
Technical debt triangle by Israel Gat




                                        61
Step 4 – Establish debt limit

We can now have a conversation with the business in $$$ and talk about technical
debt and the impact on ROI.
Today about 70% of an organizations IT budget is spent on maintenance instead of
new development.

What is a good amount of debt?
It depends on appetite for risk.
Tension between business and tech
Biz optimistic about benefit and the cost of carrying the debt
Tech pessimistic about benefit and costs
Key is to manage and monitor it.
If reach certain threshold, then make major payments to get back on track and keep
debt under control.




                                                                                     62
Credit rating: based on teams ability to avoid unintentional technical debt
Acquired debt: merger with other companies, decisions made by others
90 day same as cash: if you fix it quickly there will be no interest payment
Low monthly payment: web vs. embedded software – ability to payoff debt depends
on type of software
Retiring debt: Once we retire system, there is no more debt. This is hard with financial
debt
Deficit programming
Technical Inflation: Failing behind in versions to the point where the code is no longer
compatible with the compiler

The key is that technical debt enables a conversation between the technical folks and
the business folks to make informative decision on code quality




                                                                                           63
Step 5 – Pay down debt
Where do we start?




                         64
Tool gives us information on where to focus




                                              65
66
67
68
Step 5a – Pay high interest debt 1st

Don’t quickly jump to fix most complex class. There are long term debt and short term
debt. 1st reduce short term debt which is like credit card debt.
Short term debt has highest interest rate. Tackle 1st the classes that are constantly
changing the most. The more changes we make the more interest we are paying.
Consider high minimum payment & required on going payment.
A class with no test coverage at all, or one that is very complex, but is never or rarely
modified, needs to be left on the side for now and is considered as a low interest debt.
Focus on the high interest 1st.



Picture: http://www.flickr.com/photos/23327787@N08/3027534098/
Picture: http://www.flickr.com/photos/37815348@N00/5398908333/




                                                                                            69
Step 5b – Pay down debt based on team skills
Does the team know how to write tests to increase code coverage?
Does the team know how to reduce complexity?
If not, come up with a training and coaching plan.
Does the team understand the rules they are violating? If so start their.
Do they know how to remove duplications?
It is going to depend, but the key is to put a plan and execute on it.

Also, don’t try to many things at once. This can be overwhelming.
1. Reduce debt while fixing bugs
2. Do not take on additional debt for new code


Picture: http://www.flickr.com/photos/51035555243@N01/155589939/




                                                                            70
Approach:
Immediately after a release
10% of each iteration
Above certain threshold
Rotate individual




                              71
72
73
74
75
77
Research for this presentation based mainly on the work of Robert Martin, Steve
McConnell, Israel Gat, Martin Fowler




                                                                                  78
79
80
81
82
83

Mais conteúdo relacionado

Mais procurados

The Technical Debt Trap - Michael "Doc" Norton
The Technical Debt Trap - Michael "Doc" NortonThe Technical Debt Trap - Michael "Doc" Norton
The Technical Debt Trap - Michael "Doc" NortonLeanDog
 
Measure It, Manage It, Ignore It - Software Practitioners and Technical Debt
Measure It, Manage It, Ignore It - Software Practitioners and Technical Debt Measure It, Manage It, Ignore It - Software Practitioners and Technical Debt
Measure It, Manage It, Ignore It - Software Practitioners and Technical Debt Neil Ernst
 
Technical Debt
Technical DebtTechnical Debt
Technical DebtGary Short
 
Technical Debt: Sources and Impacts
Technical Debt: Sources and ImpactsTechnical Debt: Sources and Impacts
Technical Debt: Sources and ImpactsAgile Velocity
 
The Technical Debt Trap
The Technical Debt TrapThe Technical Debt Trap
The Technical Debt TrapDoc Norton
 
Technical Debt - The number one reason why technical projects get derailed
Technical Debt - The number one reason why technical projects get derailedTechnical Debt - The number one reason why technical projects get derailed
Technical Debt - The number one reason why technical projects get derailedAccesto
 
Agile and Beyond :: The Technical Debt Trap
Agile and Beyond :: The Technical Debt TrapAgile and Beyond :: The Technical Debt Trap
Agile and Beyond :: The Technical Debt TrapDoc Norton
 
Towards a Technical Debt Management Framework based on Cost-Benefit Analysis
Towards a Technical Debt Management Framework based on Cost-Benefit AnalysisTowards a Technical Debt Management Framework based on Cost-Benefit Analysis
Towards a Technical Debt Management Framework based on Cost-Benefit AnalysisM Firdaus Harun
 
Delivering Technical Debt
Delivering Technical DebtDelivering Technical Debt
Delivering Technical Debtbrendonpage
 
Get Smart About Technical Debt
Get Smart About Technical DebtGet Smart About Technical Debt
Get Smart About Technical DebtCAST
 
Technical Debt and Requirements
Technical Debt and RequirementsTechnical Debt and Requirements
Technical Debt and RequirementsNeil Ernst
 
We need to talk about tech debt
We need to talk about tech debtWe need to talk about tech debt
We need to talk about tech debtMatthew Whetton
 
Technical Debt - osbridge
Technical Debt - osbridgeTechnical Debt - osbridge
Technical Debt - osbridgeenaramore
 
Working with Technical Debt
Working with Technical DebtWorking with Technical Debt
Working with Technical DebtSteve Green
 
Technical Debt - Why should you care? (Agiles Buenos Aires 2011)
Technical Debt - Why should you care?  (Agiles Buenos Aires 2011)Technical Debt - Why should you care?  (Agiles Buenos Aires 2011)
Technical Debt - Why should you care? (Agiles Buenos Aires 2011)CI&T
 
The Technical Debt Trap - NDC Oslo 2014
The Technical Debt Trap - NDC Oslo 2014The Technical Debt Trap - NDC Oslo 2014
The Technical Debt Trap - NDC Oslo 2014Doc Norton
 
Why change code that works - On Technical Debt and Refactoring
Why change code that works - On Technical Debt and RefactoringWhy change code that works - On Technical Debt and Refactoring
Why change code that works - On Technical Debt and RefactoringCarsten Windler
 
Why Is Managing Software So Hard?
Why Is Managing Software So Hard?Why Is Managing Software So Hard?
Why Is Managing Software So Hard?Michael Lamont
 

Mais procurados (20)

The Technical Debt Trap - Michael "Doc" Norton
The Technical Debt Trap - Michael "Doc" NortonThe Technical Debt Trap - Michael "Doc" Norton
The Technical Debt Trap - Michael "Doc" Norton
 
Measure It, Manage It, Ignore It - Software Practitioners and Technical Debt
Measure It, Manage It, Ignore It - Software Practitioners and Technical Debt Measure It, Manage It, Ignore It - Software Practitioners and Technical Debt
Measure It, Manage It, Ignore It - Software Practitioners and Technical Debt
 
Technical Debt
Technical DebtTechnical Debt
Technical Debt
 
Technical Debt: Sources and Impacts
Technical Debt: Sources and ImpactsTechnical Debt: Sources and Impacts
Technical Debt: Sources and Impacts
 
The Technical Debt Trap
The Technical Debt TrapThe Technical Debt Trap
The Technical Debt Trap
 
Technical Debt - The number one reason why technical projects get derailed
Technical Debt - The number one reason why technical projects get derailedTechnical Debt - The number one reason why technical projects get derailed
Technical Debt - The number one reason why technical projects get derailed
 
Agile and Beyond :: The Technical Debt Trap
Agile and Beyond :: The Technical Debt TrapAgile and Beyond :: The Technical Debt Trap
Agile and Beyond :: The Technical Debt Trap
 
Technical debt
Technical debtTechnical debt
Technical debt
 
Towards a Technical Debt Management Framework based on Cost-Benefit Analysis
Towards a Technical Debt Management Framework based on Cost-Benefit AnalysisTowards a Technical Debt Management Framework based on Cost-Benefit Analysis
Towards a Technical Debt Management Framework based on Cost-Benefit Analysis
 
Delivering Technical Debt
Delivering Technical DebtDelivering Technical Debt
Delivering Technical Debt
 
Get Smart About Technical Debt
Get Smart About Technical DebtGet Smart About Technical Debt
Get Smart About Technical Debt
 
Technical Debt
Technical DebtTechnical Debt
Technical Debt
 
Technical Debt and Requirements
Technical Debt and RequirementsTechnical Debt and Requirements
Technical Debt and Requirements
 
We need to talk about tech debt
We need to talk about tech debtWe need to talk about tech debt
We need to talk about tech debt
 
Technical Debt - osbridge
Technical Debt - osbridgeTechnical Debt - osbridge
Technical Debt - osbridge
 
Working with Technical Debt
Working with Technical DebtWorking with Technical Debt
Working with Technical Debt
 
Technical Debt - Why should you care? (Agiles Buenos Aires 2011)
Technical Debt - Why should you care?  (Agiles Buenos Aires 2011)Technical Debt - Why should you care?  (Agiles Buenos Aires 2011)
Technical Debt - Why should you care? (Agiles Buenos Aires 2011)
 
The Technical Debt Trap - NDC Oslo 2014
The Technical Debt Trap - NDC Oslo 2014The Technical Debt Trap - NDC Oslo 2014
The Technical Debt Trap - NDC Oslo 2014
 
Why change code that works - On Technical Debt and Refactoring
Why change code that works - On Technical Debt and RefactoringWhy change code that works - On Technical Debt and Refactoring
Why change code that works - On Technical Debt and Refactoring
 
Why Is Managing Software So Hard?
Why Is Managing Software So Hard?Why Is Managing Software So Hard?
Why Is Managing Software So Hard?
 

Semelhante a Managing technical debt notes

Why Cloud Computing Projects Fail
Why Cloud Computing Projects Fail Why Cloud Computing Projects Fail
Why Cloud Computing Projects Fail David Linthicum
 
Managing international software projects interactively using scrum
Managing international software projects interactively using scrumManaging international software projects interactively using scrum
Managing international software projects interactively using scrumPeter Horsten
 
ATC2013-Thiru and Abhishek-How to prevent Agile from becoming Fragile?
ATC2013-Thiru and Abhishek-How to prevent Agile from becoming Fragile?ATC2013-Thiru and Abhishek-How to prevent Agile from becoming Fragile?
ATC2013-Thiru and Abhishek-How to prevent Agile from becoming Fragile?India Scrum Enthusiasts Community
 
Technical Excellence Doesn't Just Happen - AgileIndy 2016
Technical Excellence Doesn't Just Happen - AgileIndy 2016Technical Excellence Doesn't Just Happen - AgileIndy 2016
Technical Excellence Doesn't Just Happen - AgileIndy 2016Allison Pollard
 
Agile Tour 2010 - SCRUM Turning Scum - Ignoring the false negatives
Agile Tour 2010 - SCRUM Turning Scum - Ignoring the false negativesAgile Tour 2010 - SCRUM Turning Scum - Ignoring the false negatives
Agile Tour 2010 - SCRUM Turning Scum - Ignoring the false negativesRavi Kumar
 
Technical debt a Business Perspective
Technical debt a Business PerspectiveTechnical debt a Business Perspective
Technical debt a Business PerspectiveMichael Vax
 
Agile in a Legacy World - Sonik Chopra
Agile in a Legacy World - Sonik ChopraAgile in a Legacy World - Sonik Chopra
Agile in a Legacy World - Sonik ChopraAgileNCR2014
 
LEAP 21 - Extended workshop
LEAP 21 - Extended workshopLEAP 21 - Extended workshop
LEAP 21 - Extended workshopPip Cleaves
 
Agile and Lean Software Development
Agile and Lean Software DevelopmentAgile and Lean Software Development
Agile and Lean Software DevelopmentTathagat Varma
 
Cleaning Code - Tools and Techniques for Large Legacy Projects
Cleaning Code - Tools and Techniques for Large Legacy ProjectsCleaning Code - Tools and Techniques for Large Legacy Projects
Cleaning Code - Tools and Techniques for Large Legacy ProjectsMike Long
 
Software Project management
Software Project managementSoftware Project management
Software Project managementsameer farooq
 
Process Model in Software Engineering.ppt
Process Model in Software Engineering.pptProcess Model in Software Engineering.ppt
Process Model in Software Engineering.pptAtharvaBavge
 
Final spiralmodel97
Final spiralmodel97Final spiralmodel97
Final spiralmodel97akshay8835
 
Supercharge Your Digital Transformation by Establishing a DevOps Platform
Supercharge Your Digital Transformation by Establishing a DevOps PlatformSupercharge Your Digital Transformation by Establishing a DevOps Platform
Supercharge Your Digital Transformation by Establishing a DevOps PlatformXebiaLabs
 
Technical and Product Debt Management
Technical and Product Debt ManagementTechnical and Product Debt Management
Technical and Product Debt ManagementSergey Sundukovskiy
 
An Engineering Approach to Build Websites
An Engineering Approach to Build WebsitesAn Engineering Approach to Build Websites
An Engineering Approach to Build WebsitesAnkur Srivastava
 

Semelhante a Managing technical debt notes (20)

Why Cloud Computing Projects Fail
Why Cloud Computing Projects Fail Why Cloud Computing Projects Fail
Why Cloud Computing Projects Fail
 
Managing international software projects interactively using scrum
Managing international software projects interactively using scrumManaging international software projects interactively using scrum
Managing international software projects interactively using scrum
 
Automation and Technical Debt
Automation and Technical DebtAutomation and Technical Debt
Automation and Technical Debt
 
ATC2013-Thiru and Abhishek-How to prevent Agile from becoming Fragile?
ATC2013-Thiru and Abhishek-How to prevent Agile from becoming Fragile?ATC2013-Thiru and Abhishek-How to prevent Agile from becoming Fragile?
ATC2013-Thiru and Abhishek-How to prevent Agile from becoming Fragile?
 
Technical Excellence Doesn't Just Happen - AgileIndy 2016
Technical Excellence Doesn't Just Happen - AgileIndy 2016Technical Excellence Doesn't Just Happen - AgileIndy 2016
Technical Excellence Doesn't Just Happen - AgileIndy 2016
 
Agile Tour 2010 - SCRUM Turning Scum - Ignoring the false negatives
Agile Tour 2010 - SCRUM Turning Scum - Ignoring the false negativesAgile Tour 2010 - SCRUM Turning Scum - Ignoring the false negatives
Agile Tour 2010 - SCRUM Turning Scum - Ignoring the false negatives
 
Anti patterns part 1
Anti patterns part 1Anti patterns part 1
Anti patterns part 1
 
Tech debt will kill us
Tech debt will kill usTech debt will kill us
Tech debt will kill us
 
Technical debt a Business Perspective
Technical debt a Business PerspectiveTechnical debt a Business Perspective
Technical debt a Business Perspective
 
Agile in a Legacy World - Sonik Chopra
Agile in a Legacy World - Sonik ChopraAgile in a Legacy World - Sonik Chopra
Agile in a Legacy World - Sonik Chopra
 
LEAP 21 - Extended workshop
LEAP 21 - Extended workshopLEAP 21 - Extended workshop
LEAP 21 - Extended workshop
 
Agile and Lean Software Development
Agile and Lean Software DevelopmentAgile and Lean Software Development
Agile and Lean Software Development
 
Cleaning Code - Tools and Techniques for Large Legacy Projects
Cleaning Code - Tools and Techniques for Large Legacy ProjectsCleaning Code - Tools and Techniques for Large Legacy Projects
Cleaning Code - Tools and Techniques for Large Legacy Projects
 
Software Project management
Software Project managementSoftware Project management
Software Project management
 
Process Model in Software Engineering.ppt
Process Model in Software Engineering.pptProcess Model in Software Engineering.ppt
Process Model in Software Engineering.ppt
 
Final spiralmodel97
Final spiralmodel97Final spiralmodel97
Final spiralmodel97
 
Supercharge Your Digital Transformation by Establishing a DevOps Platform
Supercharge Your Digital Transformation by Establishing a DevOps PlatformSupercharge Your Digital Transformation by Establishing a DevOps Platform
Supercharge Your Digital Transformation by Establishing a DevOps Platform
 
Technical and Product Debt Management
Technical and Product Debt ManagementTechnical and Product Debt Management
Technical and Product Debt Management
 
The Waterfall Model
The Waterfall ModelThe Waterfall Model
The Waterfall Model
 
An Engineering Approach to Build Websites
An Engineering Approach to Build WebsitesAn Engineering Approach to Build Websites
An Engineering Approach to Build Websites
 

Mais de Fadi Stephan

The Self Organizing Team Canvas.pdf
The Self Organizing Team Canvas.pdfThe Self Organizing Team Canvas.pdf
The Self Organizing Team Canvas.pdfFadi Stephan
 
Managing Technical Debt
Managing Technical DebtManaging Technical Debt
Managing Technical DebtFadi Stephan
 
Agile Testing - Testing From Day 1
Agile Testing - Testing From Day 1Agile Testing - Testing From Day 1
Agile Testing - Testing From Day 1Fadi Stephan
 
UX in an agile world
UX in an agile worldUX in an agile world
UX in an agile worldFadi Stephan
 
UX in an Agile World
UX in an Agile WorldUX in an Agile World
UX in an Agile WorldFadi Stephan
 
Agile Testing - Testing from Day 1
Agile Testing - Testing from Day 1Agile Testing - Testing from Day 1
Agile Testing - Testing from Day 1Fadi Stephan
 
Fostering self organizing teams
Fostering self organizing teamsFostering self organizing teams
Fostering self organizing teamsFadi Stephan
 
Lean Discovery, Agile Delivery & the DevOps Mindset
Lean Discovery, Agile Delivery & the DevOps MindsetLean Discovery, Agile Delivery & the DevOps Mindset
Lean Discovery, Agile Delivery & the DevOps MindsetFadi Stephan
 
A Leaner PMO in The Federal Government
A Leaner PMO in The Federal GovernmentA Leaner PMO in The Federal Government
A Leaner PMO in The Federal GovernmentFadi Stephan
 
User Story Smells & Anti-patterns
User Story Smells & Anti-patternsUser Story Smells & Anti-patterns
User Story Smells & Anti-patternsFadi Stephan
 
Techniques for Keeping Retrospectives Effective and Fun
Techniques for Keeping Retrospectives Effective and FunTechniques for Keeping Retrospectives Effective and Fun
Techniques for Keeping Retrospectives Effective and FunFadi Stephan
 
Effective Daily Standups
Effective Daily StandupsEffective Daily Standups
Effective Daily StandupsFadi Stephan
 
Effective Daily Standups
Effective Daily StandupsEffective Daily Standups
Effective Daily StandupsFadi Stephan
 
The Art of Storytelling
The Art of StorytellingThe Art of Storytelling
The Art of StorytellingFadi Stephan
 
The Art of Storytelling
The Art of StorytellingThe Art of Storytelling
The Art of StorytellingFadi Stephan
 
The Art of Storytelling
The Art of StorytellingThe Art of Storytelling
The Art of StorytellingFadi Stephan
 
Software Craftsmanship - It's an Imperative
Software Craftsmanship - It's an ImperativeSoftware Craftsmanship - It's an Imperative
Software Craftsmanship - It's an ImperativeFadi Stephan
 
Software Craftsmanship - It's an Imperative
Software Craftsmanship - It's an ImperativeSoftware Craftsmanship - It's an Imperative
Software Craftsmanship - It's an ImperativeFadi Stephan
 

Mais de Fadi Stephan (20)

The Self Organizing Team Canvas.pdf
The Self Organizing Team Canvas.pdfThe Self Organizing Team Canvas.pdf
The Self Organizing Team Canvas.pdf
 
Managing Technical Debt
Managing Technical DebtManaging Technical Debt
Managing Technical Debt
 
Agile Testing - Testing From Day 1
Agile Testing - Testing From Day 1Agile Testing - Testing From Day 1
Agile Testing - Testing From Day 1
 
UX in an agile world
UX in an agile worldUX in an agile world
UX in an agile world
 
UX in an Agile World
UX in an Agile WorldUX in an Agile World
UX in an Agile World
 
Agile Testing - Testing from Day 1
Agile Testing - Testing from Day 1Agile Testing - Testing from Day 1
Agile Testing - Testing from Day 1
 
Fostering self organizing teams
Fostering self organizing teamsFostering self organizing teams
Fostering self organizing teams
 
Agile contracts
Agile contractsAgile contracts
Agile contracts
 
Lean Discovery, Agile Delivery & the DevOps Mindset
Lean Discovery, Agile Delivery & the DevOps MindsetLean Discovery, Agile Delivery & the DevOps Mindset
Lean Discovery, Agile Delivery & the DevOps Mindset
 
A Leaner PMO in The Federal Government
A Leaner PMO in The Federal GovernmentA Leaner PMO in The Federal Government
A Leaner PMO in The Federal Government
 
User Story Smells & Anti-patterns
User Story Smells & Anti-patternsUser Story Smells & Anti-patterns
User Story Smells & Anti-patterns
 
Agile dashboard
Agile dashboardAgile dashboard
Agile dashboard
 
Techniques for Keeping Retrospectives Effective and Fun
Techniques for Keeping Retrospectives Effective and FunTechniques for Keeping Retrospectives Effective and Fun
Techniques for Keeping Retrospectives Effective and Fun
 
Effective Daily Standups
Effective Daily StandupsEffective Daily Standups
Effective Daily Standups
 
Effective Daily Standups
Effective Daily StandupsEffective Daily Standups
Effective Daily Standups
 
The Art of Storytelling
The Art of StorytellingThe Art of Storytelling
The Art of Storytelling
 
The Art of Storytelling
The Art of StorytellingThe Art of Storytelling
The Art of Storytelling
 
The Art of Storytelling
The Art of StorytellingThe Art of Storytelling
The Art of Storytelling
 
Software Craftsmanship - It's an Imperative
Software Craftsmanship - It's an ImperativeSoftware Craftsmanship - It's an Imperative
Software Craftsmanship - It's an Imperative
 
Software Craftsmanship - It's an Imperative
Software Craftsmanship - It's an ImperativeSoftware Craftsmanship - It's an Imperative
Software Craftsmanship - It's an Imperative
 

Último

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 

Último (20)

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 

Managing technical debt notes

  • 1. 1
  • 2. Agenda 2
  • 4. What’s going on? • Start a little slow • Quickly pick up - A lot of features are getting developed • Things start to slow down • Can’t seem to recover • These are signs of bad code and technical debt 4
  • 5. Adding new features or simple changes take forever Picture: http://www.flickr.com/photos/49531720@N00/247730111/ 5
  • 6. Delivery dates are missed Picture: http://www.flickr.com/photos/89306448@N00/2247180420/ 6
  • 8. Team is frustrated Morale is low Picture: http://www.flickr.com/photos/16857236@N03/2429136239/ 8
  • 10. Uncle Bob provides the following attributes of bad code: Rigidity – difficult to change. A change causes a cascade of subsequent changes in dependent modules. Result -> manager fear to fix non critical problems because no reliability on impact and how long it will take. This lead to rigidity. 10
  • 11. Fragility – closely related to rigidity. Software tends to break in many places every time it is changed. Even in areas that are conceptually unrelated. As this increases, software becomes impossible to maintain because every fix introduces 5 new bugs. This leads to distrust and a loss of credibility. 11
  • 12. Developers end up playing whack-a-bug. Picture: http://www.flickr.com/photos/tpapi/2765541278/ 12
  • 13. Immobility – inability to reuse software from other parts of the system. Need module similar to another one already written, however, module has too much baggage. It is hard and risky to separate desirable part from undesirable part so decide to rewrite instead of reuse. Picture: http://www.flickr.com/photos/97041449@N00/5261698908/ 13
  • 14. Viscosity – design (when faced with a change, take easy way(hack) or hard way) Environment- • If compile time is long, make changes that do not force large recompile • If check-in takes a long time, make as few check ins as possible • If deployment is difficult, make changes in database. • End up applying the easiest change to avoid environment issues even if change is in the wrong place. 14
  • 15. Reasons for bad code: Excuses about deadlines – no time to test, no time for design change 15
  • 16. Broken Window Theory: Police in NYC conducted a study 1. Parked a car in a bad neighborhood and observed 2. Nothing happened for a couple of days 3. Police broke small rear window and observed 4. Within 4 hours, car was stripped Picture: http://www.flickr.com/photos/7389424@N05/2351559480/ 16
  • 18. Broken window theory also applies to code. 1. Start out and things are clean 2. Once you introduce one sign of bad code, things quickly get out of hand As developers, we’ll say, well we are already doing things wrong here, so it does not matter if we do it wrong here as well. Soon things spread and get out of control. Picture: http://www.flickr.com/photos/17454738@N00/2245445147/ 18
  • 19. Over architecting: • Attempt to envision all possible future scenarios • Create unnecessary layers of complexity to support things that are not really requirements • Tempted to design solutions to problems in advance of their needs • Program goes in a different direction and code is written without benefit • Code doesn’t really fit need because written before problem well understood • Overdesign takes extra time and produces code that is either unused or doesn’t fit the needs of the project 19
  • 20. Sometimes design is bad and instead of stopping to fix we continue building on top of it and create an even bigger mess. Picture: http://www.flickr.com/photos/25196025@N00/381877979/ 20
  • 21. Poor skills or lack of proper training is also a major contributor http://www.flickr.com/photos/25507200@N07/3120849218/ 21
  • 22. Technical debt by Ward Cunningham 22
  • 23. 23
  • 24. Principal: Cost due to amount of time we need to code it the right way Interest: Cost due to amount of extra time we spend to work with something not coded the right way If it costs the same (no interest), it is just differed work and not technical debt 24
  • 25. Jim Highsmith about technical debt in terms of impact on Cost of Change 25
  • 26. We trade on quality daily. Have option to buy quality watch, but decide to buy cheaper one with out knowing what is inside. No visibility into internal quality. Picture: http://www.flickr.com/photos/39516732@N08/4666623572/ 26
  • 27. Looks the same, and cheaper! Picture: http://www.flickr.com/photos/64211362@N02/6338814898/ 27
  • 28. Martin Fowler about design stamina hypothesis: • Some benefit by ignoring good design • Soon productivity flattens out • Good design route starts out slower, but soon becomes almost linear • Intersection is design pay-off line • If above the line, no longer makes sense to ignore good design decision • Trick to know how far from line. • Martin estimates in most cases this is in magnitude of weeks not months or years 28
  • 29. Is all technical debt bad? Quick and dirty or clean? Which one would you choose? It depends… 29
  • 30. 30
  • 31. 31
  • 32. 32
  • 33. 33
  • 34. 34
  • 35. • Not all technical debt is bad • Loans to buy a house or a car are generally considered good loans • We want to be responsible in our decisions 35
  • 36. Martin Fowler introduces the technical debt quadrant: 1. Inadvertent/Reckless: Don’t know that they are doing something wrong 2. Deliberate/Reckless: Know it wrong and continue to do it 3. Deliberate/Prudent: Make conscious decision to take on debt due to specific business need 4. Inadvertent/Prudent: With the best of intentions, things did not go well (rare) Most people are in quadrant 1 and 2 and we need to move them to 3. There are good reasons to take on debt like a shorter time to market, preserving startup capital, delaying development expenses 36
  • 37. Types of debt Unintentional debt: careless mistakes, and honest mistakes (bad judgment) – never a good idea Intentional debt – short term (focused and unfocused), long term Only short focused and long term good debt 37
  • 38. Flower shop website must be live 2 weeks before valentines day Otherwise business will go under Must take on debt to meet date Will spend x weeks paying back debt while preparing for Mother’s day 38
  • 39. Make prudent and deliberate decision on debt • Have plan to service debt • Make our payments • Avoid late payment notices 39
  • 40. We don’t want to take on debt when we are behind schedule. This causes a vicious circle 40
  • 41. If debt not paid back, business shuts down or application will require re-write Picture: www.flickr.com/photos/66622362@N00/3353570653/ 41
  • 42. 42
  • 43. Step 1 - Register our debt • Add shortcuts decisions to technical debt backlog • Include estimated hours to do it the right way • Add date of estimate because only valid if paid off immediately 43
  • 44. 44
  • 45. 45
  • 46. We want to try to determine Cost of clean way Cost of dirty way Savings now Impact (interest rate) Cost of fix later Beware of Broken Windows Avoid debt that is untrackable Avoid low ROI 46
  • 47. Step 2 – Evaluate existing code Inspect and assess level of debt and also register it 47
  • 48. Sonar – open source tool 48
  • 49. Various metrics with drill down capabilities 49
  • 50. Various metrics with drill down capabilities 50
  • 51. Step 3 - monetize the debt 1. Estimate the amount of hours it takes to fix each type of deficit 2. Multiply by rate/hr 3. Multiply by the total number of items 51
  • 52. Technical debt plugin in Sonar calculates it this way 52
  • 53. Another plugin is the SQALE metric (Software Quality Assessment based on Life Cycle Expectations) that breaks things along characteristics (non functional requirements), sub characteristics, and source code requirements Changeability -> loose coupling or related changeability -> code duplication Maintainability -> understandability -> redundant throws or simplifying Boolean expressions, or unused variables Security -> Errors -> preserving track trace, sql injection, or system.exit Reliability - > unit test or exception handling -> unit test coverage, illegal throws Testability -> unit level testability -> cyclomatic complexity Efficiency -> memory usage -> correct data types or static final or string buffering Portability -> software related portability -> imports, or locale The method defines 4 key concepts: 1. The Quality Model: The SQALE Quality Model is used for formulating and organizing the non-functional requirements that relate to code quality. It is organized in three hierarchical levels. The first level is composed of characteristics, the second of sub- characteristics. The third level is composed of requirements that relate to the source code’s internal attributes. These requirements usually depend on the software context and language. 53
  • 54. 2. The Analysis Model: The SQALE Analysis Model contains on the one hand the rules that are used for normalizing the measures and the violations relating to the code, and on the other hand the rules for aggregating the normalized values. 3. The Indices: All indices represent costs. One represents the Technical Debt of the application. Others are used to analyze that debt. 4. The Indicators: The method defines three summarized indicators. They have been defined to provide a visual representation of the Technical Debt. 53
  • 55. 54
  • 56. 55
  • 57. Costs can be customized for own environment Future work: Prioritization, based on impact. Try to link cost vs. impact on business. Example, fixing non-initialized variable is low cost, however, it can cause large damage 56
  • 58. 57
  • 59. 58
  • 60. With dollar amount associated with technical debt, we can engage upper management with a language they understand 59
  • 61. Agile Triangle by Jim Highsmith 60
  • 62. Technical debt triangle by Israel Gat 61
  • 63. Step 4 – Establish debt limit We can now have a conversation with the business in $$$ and talk about technical debt and the impact on ROI. Today about 70% of an organizations IT budget is spent on maintenance instead of new development. What is a good amount of debt? It depends on appetite for risk. Tension between business and tech Biz optimistic about benefit and the cost of carrying the debt Tech pessimistic about benefit and costs Key is to manage and monitor it. If reach certain threshold, then make major payments to get back on track and keep debt under control. 62
  • 64. Credit rating: based on teams ability to avoid unintentional technical debt Acquired debt: merger with other companies, decisions made by others 90 day same as cash: if you fix it quickly there will be no interest payment Low monthly payment: web vs. embedded software – ability to payoff debt depends on type of software Retiring debt: Once we retire system, there is no more debt. This is hard with financial debt Deficit programming Technical Inflation: Failing behind in versions to the point where the code is no longer compatible with the compiler The key is that technical debt enables a conversation between the technical folks and the business folks to make informative decision on code quality 63
  • 65. Step 5 – Pay down debt Where do we start? 64
  • 66. Tool gives us information on where to focus 65
  • 67. 66
  • 68. 67
  • 69. 68
  • 70. Step 5a – Pay high interest debt 1st Don’t quickly jump to fix most complex class. There are long term debt and short term debt. 1st reduce short term debt which is like credit card debt. Short term debt has highest interest rate. Tackle 1st the classes that are constantly changing the most. The more changes we make the more interest we are paying. Consider high minimum payment & required on going payment. A class with no test coverage at all, or one that is very complex, but is never or rarely modified, needs to be left on the side for now and is considered as a low interest debt. Focus on the high interest 1st. Picture: http://www.flickr.com/photos/23327787@N08/3027534098/ Picture: http://www.flickr.com/photos/37815348@N00/5398908333/ 69
  • 71. Step 5b – Pay down debt based on team skills Does the team know how to write tests to increase code coverage? Does the team know how to reduce complexity? If not, come up with a training and coaching plan. Does the team understand the rules they are violating? If so start their. Do they know how to remove duplications? It is going to depend, but the key is to put a plan and execute on it. Also, don’t try to many things at once. This can be overwhelming. 1. Reduce debt while fixing bugs 2. Do not take on additional debt for new code Picture: http://www.flickr.com/photos/51035555243@N01/155589939/ 70
  • 72. Approach: Immediately after a release 10% of each iteration Above certain threshold Rotate individual 71
  • 73. 72
  • 74. 73
  • 75. 74
  • 76. 75
  • 77. 77
  • 78. Research for this presentation based mainly on the work of Robert Martin, Steve McConnell, Israel Gat, Martin Fowler 78
  • 79. 79
  • 80. 80
  • 81. 81
  • 82. 82
  • 83. 83