Technical Debt Management
Strategies
Raquel	
  Pau
rpau@walkmod.com
1
a little bit about me
• Almost	
  10	
  years	
  of	
  experience	
  in	
  Java
• Research	
  background	
  on	
  software	
  engineering.
• Walkmod	
  project	
  leader
• Speaker	
  at	
  several	
  occasions	
  
• Writer	
  at	
  Java	
  Code	
  Geeks
2
twitter:	
  @raquelpau
What does technical debt mean?
Technical debt (also known as design debt or code debt) is
"a concept in programming that reflects the extra
development work that arises when code that is easy to
implement in the short run is used instead of applying the
best overall solution"
3
is the technical debt evitable?
4
The First to market strategy
Minimum	
  Viable	
  Product	
  (MVP):	
  Simple	
  functional	
  prototype.	
  If	
  it	
  
makes	
  no	
  sense,	
  we	
  through	
  away	
  the	
  code.	
  
• Disadvantages:	
  
• Our	
  cost	
  is	
  our	
  own	
  time.	
  
• We	
  may	
  through	
  away	
  the	
  code.
• Advantages:	
  The	
  right	
  product,	
  will	
  get	
  traction,	
  and	
  then	
  investment.
5
our first formulas..
Productivity =	
  |Features|	
  /	
  unit	
  of	
  time
Feature =	
   refactor	
  +	
  test	
  +	
  code +	
  build	
  +	
  review
6
and as a result..
the	
  code	
  becomes	
  our	
  own	
  
specification
7
our common excuses..
8
But after gaining traction..
Productivity =	
  |Features|+|Bugs|	
  /	
  unit	
  of	
  time
Feature =	
  	
  refactor +	
  test +	
  code +	
  build +	
  review
9
And then... appeared the
ROI	
  (Return	
  of	
  Investment)	
  =	
  
gross	
  profit	
  – expenses
investment
technical	
  debt	
  costeconomical	
  benefit	
  
of	
  our	
  features
10
...How	
  many	
  bugs	
  do	
  we	
  have?
I	
  do	
  not	
  know...	
  but	
  the	
  correct	
  question	
  is:
can we reduce the number of bugs?
11
How to manage the tech debt, now?
(without	
  stopping	
  new	
  features,	
  of	
  course)
Sprint =	
  |Features|	
  +	
  |Bugs|	
  +	
  |Improvements|
12
Technical Debt Management Strategy
1. Measure	
  all:	
  Do	
  not	
  repeat	
  the	
  same	
  error. It	
  is	
  NOT	
  only	
  about	
  our	
  
quality	
  standards	
  (code),	
  it	
  is	
  about	
  how	
  fast	
  I	
  continue delivering	
  it	
  
and	
  make	
  it	
  work.
refactor +	
  test +	
  code +	
  build +	
  review
2. Control not	
  increasing it,	
  with	
  a	
  Quality	
  Gate	
  &	
  Code	
  review.	
  
What	
  about	
  deadlines?
3. Prioritize	
  &	
  Reduce the	
  existing	
  one	
  (i.e Merciless approach)
13
automated quality controls
all	
  debt	
  is	
  bad?
14
source:	
  http://blog.crisp.se/2013/10/11/henrikkniberg/good-­‐and-­‐bad-­‐technical-­‐debt
merciless approach: create a new cleanup
column
15
(1)	
  Versions	
  Control
(2)	
  Automatic	
  Build
(3)	
  Coverage	
  Control
(4)	
  Tests	
  for	
  NEW	
  changes	
  
(5)	
  Code	
  Style	
  Control	
  for	
  NEW	
  changes
(6)	
  Code	
  Review
(7)	
  Characterization	
  Tests
(8)	
  Refactorings
Increase	
  the	
  productivity
Fix	
  the	
  leak
Merciless	
  approach
prioritizing the technical debt
16
could we become more productive?
17
technical debt categories
• Architectural	
  debt (refactor)	
  – continuous	
  refactoring
• Testing	
  debt	
  (test)	
  – continuous	
  integration	
  
• Code	
  standards	
  debt	
  (code)	
  – continuous	
  inspection
• Infrastructure	
  debt	
  (build)	
  – continuous	
  delivery	
  
• Knowledge	
  debt	
  (review)	
  – continuous	
  formation	
  (?)
18
knowledge debt
• Measures:
• How	
  much	
  time	
  I	
  need	
  to	
  spent	
  to	
  understand	
  the	
  existing	
  architecture	
  before	
  
applying	
  a	
  change?
• Consequences:
• Architecture	
  degradation
• Redesign	
  existing	
  frameworks	
  or	
  reinvent	
  the	
  wheel.
• A	
  cascade	
  of	
  bugs
• Solutions:
• External	
  Formation
• Internal	
  Formation	
  (Stand-­‐ups,	
  Code	
  Review,	
  Pair	
  Programming,	
  Tests)
19
infrastructure debt
• Measures:
• How	
  much	
  time	
  I	
  need	
  to	
  spent	
  to	
  deploy a	
  new	
  version?
• How	
  much	
  time	
  I	
  need	
  to	
  revert a	
  new	
  version?
• Consequences:
• New	
  versions	
  appears	
  after	
  a	
  long	
  time..
• Super	
  long	
  working	
  days.
• Solutions:
• Define	
  a	
  collaboration	
  workflow	
  and	
  tagging	
  procedure.
• Define	
  a	
  repository	
  for	
  software	
  artifacts and	
  Docker images.
• Use	
  software	
  (e.g Kubernates,	
  Puppet)	
  to	
  just	
  deploy/revert	
  changes	
  
automatically.
20
architectural debt
• Measures:
• How	
  much	
  effort	
  is	
  needed	
  to	
  achieve	
  a	
  low	
  coupling	
  and	
  high	
  cohesion?
• How	
  much	
  effort	
  is	
  needed	
  to	
  split	
  the	
  development?	
  – Open	
  /	
  Close	
  principle	
  
• Consequences:
• Duplicated	
  code	
  (SonarQube,	
  PMD).
• High	
  cyclomatic complexity	
  (SonarQube,	
  PMD).
• Broken	
  Windows	
  Theory.
• Solutions:
• Code	
  Review	
  – Check	
  SOLID	
  principles.
• Static	
  Code	
  analysis	
  tools	
  (SonarQube,	
  PMD).
21
architectural debt
a	
  time	
  based	
  approach:	
  Adam	
  Tornhill
• Most	
  of	
  your	
  code	
  is	
  not	
  important.	
  
• Focus	
  on	
  the	
  recent/new	
  features.
• Hotspot	
  analysis	
  to	
  prioritize	
  improvements
• Open-­‐Close	
  semantics	
  validation	
  (using	
  Git).
• Complexity	
  Trend	
  analysis	
  to	
  understand	
  how	
  an	
  specific	
  component	
  
evolves	
  (using	
  Git).
source:	
  http://www.adamtornhill.com/articles/software-­‐revolution/part2/index.html
22
hotspot analysis
23
complexity trend
24
architectural debt
an estimation	
  approach:	
  ticketmaster
source:	
  https://tech.ticketmaster.com/author/simontarry76/
25
Testing debt
• Measures:
• How	
  much	
  code	
  coverage	
  do	
  we	
  have?
• How	
  much	
  time	
  we	
  wait	
  to	
  run	
  our	
  tests?
• How	
  much	
  time	
  do	
  we	
  spent	
  to	
  manually	
  validate	
  the	
  functionality?
• Consequences:
• Bugs	
  (FindBugs /	
  SonarQube)
• Low	
  code	
  coverage	
  (SonarQube)
• Slow	
  validations	
  /	
  code	
  reviews.
• Solutions:
• BDD	
  or	
  TDD
• Continuous	
  Integration	
  tools.
• Code	
  Coverage	
  tools.
• Static	
  Code	
  Analysis	
  tools	
  (SonarQube,	
  FindBugs).
26
Testing debt
unit	
  tests	
  are	
  the	
  most,	
  not	
  the	
  foundation	
  –
Joshua	
  Lewis
27
testing debt
do	
  not	
  loose	
  time	
  running	
  unrelated	
  tests
• Split	
  the	
  project	
  into	
  sub-­‐projects	
  (e.g microservices)	
  as	
  much	
  as	
  
possible.
• Run	
  integration/application	
  tests	
  from	
  the	
  CI.	
  
• You	
  will	
  not	
  receive	
  interruptions	
  for	
  lack	
  of	
  resources.
28
Code Standards debt
• Measures:
• How	
  much	
  code	
  violates	
  our	
  coding	
  standards?
• How	
  much	
  clear	
  are	
  our	
  names?
• Consequences:
• We	
  spend	
  more	
  time	
  understanding	
  code
•Solutions:
• Static	
  Code	
  Analysis	
  tools
• Continuous	
  Inspection
29
Code Standards debt – checking & fixing
• There	
  are	
  a	
  lot	
  of	
  static	
  code	
  analysis	
  tools	
  and	
  linters	
  for	
  every	
  
programing	
  language.
• Every	
  day	
  appear	
  more	
  software	
  to	
  fix	
  code	
  style	
  issues,	
  which	
  
reduces	
  the	
  effort	
  to	
  have	
  clean	
  code.	
  
30
facebook/pffff google/error-­‐prone dotnet/roslyn
Technical debt distribution (an estimation)
Architectural Testing Standards Infrastructure Knowledge
Interest	
  Rates	
  Distribution
15	
  % 10	
  % 30	
  %5	
  % 35	
  %
Fixing	
  Cost	
  Distribution
Architectural Testing Standards Infrastructure Knowledge
50	
  %30	
  % 10	
  % 5	
  % 5	
  %
31
Now, estimate by yourself..
1. Each	
  team	
  member	
  scores	
  a	
  unique	
  value	
  for	
  the	
  different	
  technical	
  debt	
  
categories	
  on	
  a	
  pre-­‐agreed	
  scale	
  (1-­‐5)	
  (low	
  debt	
  to	
  high	
  debt)	
  for:
• Interest	
  Rate
• Fixing	
  Cost
2. Each	
  category	
  is	
  discussed	
  one	
  by	
  one	
  to	
  reach	
  a	
  consensus.	
  
3. Prioritize	
  the	
  ones	
  which	
  reduces	
  more	
  the	
  interest	
  and	
  has	
  the	
  lowest	
  
fixing	
  cost.
4. But	
  whatever	
  you	
  decide,	
  if	
  you	
  write	
  code,	
  do	
  characterization	
  tests,	
  
first
5. Define	
  a	
  KPI	
  to	
  review	
  it.	
  
1. Have	
  decreased	
  the	
  number	
  of	
  reported	
  bugs	
  per	
  sprint?
2. Have	
  increased	
  the	
  number	
  of	
  features	
  (e.g stories)	
  per	
  sprint?
32
Debt	
  Category Fixing	
  Cost	
   Interest	
  
Rate
Final	
  Value	
  
Architectural 5 4 4/3	
  =	
  1,3
Testing 4 5 5/4	
  =	
  1,25
Standards 2 2 2/2	
  =	
  1
Infrastructure 3 1 1/3	
  =	
  0,33
Knowledge 1 3 3/1	
  =	
  3
estimation example
33
legacy code rocks! movement
• Web	
  page	
  http://legacycode.rocks/
• Slack:	
  https://legacycoderocks.slack.com/
• Meetup Group:	
  http://meetup.com/es-­‐ES/Legacy-­‐Code-­‐Rocks-­‐
Barcelona/
34
conclusions
• Two	
  origins:	
  MVP	
  (idea	
  validation)	
  or	
  productivity	
  reasons.
• Fix	
  the	
  leak	
  first.	
  Afterwards,	
  increase	
  the	
  productivity.
• There	
  are	
  multiple	
  technical	
  debt	
  categories.
• To	
  increase	
  productivity,	
  decide	
  what	
  improvements	
  to	
  do	
  for	
  each	
  
category,	
  its	
  cost	
  and	
  the	
  current	
  interest.	
  Then,	
  prioritize	
  them.
35
Thanks for your attention
36

More Related Content

PDF
Design Patterns
PDF
Code review
PPTX
The Psychology of C# Analysis
PPTX
Sonar Overview
PPTX
Track code quality with SonarQube - short version
PDF
Art of unit testing: how to do it right
PDF
Complete Programming
PDF
Continuous Inspection of Code Quality: SonarQube
Design Patterns
Code review
The Psychology of C# Analysis
Sonar Overview
Track code quality with SonarQube - short version
Art of unit testing: how to do it right
Complete Programming
Continuous Inspection of Code Quality: SonarQube

What's hot (20)

PDF
Sonar Metrics
PDF
Do Bugs Reside in Complex Code?
PPT
Automated Testing DITA Content and Customizations
PPTX
Code Review tool for personal effectiveness and waste analysis
PDF
Low code for test automation, state of the art
PDF
Towards Developing a Repository of Logical Errors Observed in Parallel Code t...
PPTX
Finding Defects in C#: Coverity vs. FxCop
PPT
OpeNER: Open Tools to Perform Natural Language Processing on Accommodation Re...
PPTX
Sonar Review
PDF
Testing strategies for legacy code
PDF
Achieving quality with tools case study
PPTX
Adopting Agile
PDF
Krisstell-Bonilla-Resume
PPT
Simple testable code
PDF
Alexandru Bolboaca - Unit Testing from the Trenches
PDF
Unit testing in PHP
ODP
Testing & continuous delivery
PDF
Software Analysis using Natural Language Queries
PPTX
Turpentine OSS
PDF
Code Reviews in Python - PyZh
Sonar Metrics
Do Bugs Reside in Complex Code?
Automated Testing DITA Content and Customizations
Code Review tool for personal effectiveness and waste analysis
Low code for test automation, state of the art
Towards Developing a Repository of Logical Errors Observed in Parallel Code t...
Finding Defects in C#: Coverity vs. FxCop
OpeNER: Open Tools to Perform Natural Language Processing on Accommodation Re...
Sonar Review
Testing strategies for legacy code
Achieving quality with tools case study
Adopting Agile
Krisstell-Bonilla-Resume
Simple testable code
Alexandru Bolboaca - Unit Testing from the Trenches
Unit testing in PHP
Testing & continuous delivery
Software Analysis using Natural Language Queries
Turpentine OSS
Code Reviews in Python - PyZh
Ad

Viewers also liked (6)

PDF
Kubernetes Basics
PDF
Kubernetes Architecture and Introduction – Paris Kubernetes Meetup
PPTX
Introduction to Kubernetes
PPTX
London Adapt or Die: Kubernetes, Containers and Cloud - The MoD Story
PPTX
Deploying apps with Docker and Kubernetes
PDF
An Introduction to Kubernetes
Kubernetes Basics
Kubernetes Architecture and Introduction – Paris Kubernetes Meetup
Introduction to Kubernetes
London Adapt or Die: Kubernetes, Containers and Cloud - The MoD Story
Deploying apps with Docker and Kubernetes
An Introduction to Kubernetes
Ad

Similar to Technical debt management strategies (20)

PDF
technical debt management strategies
PDF
Technical debt strategy
PPTX
Slides for Houston iPhone Developers' Meetup (April 2012)
 
PPTX
Automation and Technical Debt
PDF
Test-Driven Code Review: An Empirical Study
PPT
Software Project management
PDF
Software Defect Prevention via Continuous Inspection
PDF
Enter the mind of an Agile Developer
PPTX
Indy meetup#7 effective unit-testing-mule
PPTX
Software quality - no more bugs!
PPTX
Capability Building for Cyber Defense: Software Walk through and Screening
PPT
Backward thinking design qa system for quality goals
PDF
Raising the Bar
PDF
Leveraging AI and ML in Test Management Systems - DevOps Next
PDF
TDD and Related Techniques for Non Developers (2012)
PPTX
Building environment of #UserDevOps and not only DevOps
PPTX
The Extreme Programming (XP) Model
PPTX
Technical Debt.pptx
PDF
Managing technical debt
PPTX
Week1.pptx
technical debt management strategies
Technical debt strategy
Slides for Houston iPhone Developers' Meetup (April 2012)
 
Automation and Technical Debt
Test-Driven Code Review: An Empirical Study
Software Project management
Software Defect Prevention via Continuous Inspection
Enter the mind of an Agile Developer
Indy meetup#7 effective unit-testing-mule
Software quality - no more bugs!
Capability Building for Cyber Defense: Software Walk through and Screening
Backward thinking design qa system for quality goals
Raising the Bar
Leveraging AI and ML in Test Management Systems - DevOps Next
TDD and Related Techniques for Non Developers (2012)
Building environment of #UserDevOps and not only DevOps
The Extreme Programming (XP) Model
Technical Debt.pptx
Managing technical debt
Week1.pptx

Recently uploaded (20)

PDF
ELLIE29.pdfWETWETAWTAWETAETAETERTRTERTER
PDF
Optimizing bioinformatics applications: a novel approach with human protein d...
PPTX
From Curiosity to ROI — Cost-Benefit Analysis of Agentic Automation [3/6]
PDF
ment.tech-How to Develop an AI Agent Healthcare App like Sully AI (1).pdf
PDF
TicketRoot: Event Tech Solutions Deck 2025
PDF
FASHION-DRIVEN TEXTILES AS A CRYSTAL OF A NEW STREAM FOR STAKEHOLDER CAPITALI...
PDF
Peak of Data & AI Encore: Scalable Design & Infrastructure
PDF
【AI論文解説】高速・高品質な生成を実現するFlow Map Models(Part 1~3)
PDF
NewMind AI Journal Monthly Chronicles - August 2025
PDF
Examining Bias in AI Generated News Content.pdf
PDF
“Introduction to Designing with AI Agents,” a Presentation from Amazon Web Se...
PDF
Domain-specific knowledge and context in large language models: challenges, c...
PDF
Advancements in abstractive text summarization: a deep learning approach
PDF
Slides World Game (s) Great Redesign Eco Economic Epochs.pdf
PPTX
Blending method and technology for hydrogen.pptx
PDF
Decision Optimization - From Theory to Practice
PDF
The Digital Engine Room: Unlocking APAC’s Economic and Digital Potential thro...
PPTX
Rise of the Digital Control Grid Zeee Media and Hope and Tivon FTWProject.com
PDF
1_Keynote_Breaking Barriers_한계를 넘어서_Charith Mendis.pdf
PDF
Revolutionizing recommendations a survey: a comprehensive exploration of mode...
ELLIE29.pdfWETWETAWTAWETAETAETERTRTERTER
Optimizing bioinformatics applications: a novel approach with human protein d...
From Curiosity to ROI — Cost-Benefit Analysis of Agentic Automation [3/6]
ment.tech-How to Develop an AI Agent Healthcare App like Sully AI (1).pdf
TicketRoot: Event Tech Solutions Deck 2025
FASHION-DRIVEN TEXTILES AS A CRYSTAL OF A NEW STREAM FOR STAKEHOLDER CAPITALI...
Peak of Data & AI Encore: Scalable Design & Infrastructure
【AI論文解説】高速・高品質な生成を実現するFlow Map Models(Part 1~3)
NewMind AI Journal Monthly Chronicles - August 2025
Examining Bias in AI Generated News Content.pdf
“Introduction to Designing with AI Agents,” a Presentation from Amazon Web Se...
Domain-specific knowledge and context in large language models: challenges, c...
Advancements in abstractive text summarization: a deep learning approach
Slides World Game (s) Great Redesign Eco Economic Epochs.pdf
Blending method and technology for hydrogen.pptx
Decision Optimization - From Theory to Practice
The Digital Engine Room: Unlocking APAC’s Economic and Digital Potential thro...
Rise of the Digital Control Grid Zeee Media and Hope and Tivon FTWProject.com
1_Keynote_Breaking Barriers_한계를 넘어서_Charith Mendis.pdf
Revolutionizing recommendations a survey: a comprehensive exploration of mode...

Technical debt management strategies

  • 2. a little bit about me • Almost  10  years  of  experience  in  Java • Research  background  on  software  engineering. • Walkmod  project  leader • Speaker  at  several  occasions   • Writer  at  Java  Code  Geeks 2 twitter:  @raquelpau
  • 3. What does technical debt mean? Technical debt (also known as design debt or code debt) is "a concept in programming that reflects the extra development work that arises when code that is easy to implement in the short run is used instead of applying the best overall solution" 3
  • 4. is the technical debt evitable? 4
  • 5. The First to market strategy Minimum  Viable  Product  (MVP):  Simple  functional  prototype.  If  it   makes  no  sense,  we  through  away  the  code.   • Disadvantages:   • Our  cost  is  our  own  time.   • We  may  through  away  the  code. • Advantages:  The  right  product,  will  get  traction,  and  then  investment. 5
  • 6. our first formulas.. Productivity =  |Features|  /  unit  of  time Feature =   refactor  +  test  +  code +  build  +  review 6
  • 7. and as a result.. the  code  becomes  our  own   specification 7
  • 9. But after gaining traction.. Productivity =  |Features|+|Bugs|  /  unit  of  time Feature =    refactor +  test +  code +  build +  review 9
  • 10. And then... appeared the ROI  (Return  of  Investment)  =   gross  profit  – expenses investment technical  debt  costeconomical  benefit   of  our  features 10
  • 11. ...How  many  bugs  do  we  have? I  do  not  know...  but  the  correct  question  is: can we reduce the number of bugs? 11
  • 12. How to manage the tech debt, now? (without  stopping  new  features,  of  course) Sprint =  |Features|  +  |Bugs|  +  |Improvements| 12
  • 13. Technical Debt Management Strategy 1. Measure  all:  Do  not  repeat  the  same  error. It  is  NOT  only  about  our   quality  standards  (code),  it  is  about  how  fast  I  continue delivering  it   and  make  it  work. refactor +  test +  code +  build +  review 2. Control not  increasing it,  with  a  Quality  Gate  &  Code  review.   What  about  deadlines? 3. Prioritize  &  Reduce the  existing  one  (i.e Merciless approach) 13
  • 14. automated quality controls all  debt  is  bad? 14 source:  http://blog.crisp.se/2013/10/11/henrikkniberg/good-­‐and-­‐bad-­‐technical-­‐debt
  • 15. merciless approach: create a new cleanup column 15
  • 16. (1)  Versions  Control (2)  Automatic  Build (3)  Coverage  Control (4)  Tests  for  NEW  changes   (5)  Code  Style  Control  for  NEW  changes (6)  Code  Review (7)  Characterization  Tests (8)  Refactorings Increase  the  productivity Fix  the  leak Merciless  approach prioritizing the technical debt 16
  • 17. could we become more productive? 17
  • 18. technical debt categories • Architectural  debt (refactor)  – continuous  refactoring • Testing  debt  (test)  – continuous  integration   • Code  standards  debt  (code)  – continuous  inspection • Infrastructure  debt  (build)  – continuous  delivery   • Knowledge  debt  (review)  – continuous  formation  (?) 18
  • 19. knowledge debt • Measures: • How  much  time  I  need  to  spent  to  understand  the  existing  architecture  before   applying  a  change? • Consequences: • Architecture  degradation • Redesign  existing  frameworks  or  reinvent  the  wheel. • A  cascade  of  bugs • Solutions: • External  Formation • Internal  Formation  (Stand-­‐ups,  Code  Review,  Pair  Programming,  Tests) 19
  • 20. infrastructure debt • Measures: • How  much  time  I  need  to  spent  to  deploy a  new  version? • How  much  time  I  need  to  revert a  new  version? • Consequences: • New  versions  appears  after  a  long  time.. • Super  long  working  days. • Solutions: • Define  a  collaboration  workflow  and  tagging  procedure. • Define  a  repository  for  software  artifacts and  Docker images. • Use  software  (e.g Kubernates,  Puppet)  to  just  deploy/revert  changes   automatically. 20
  • 21. architectural debt • Measures: • How  much  effort  is  needed  to  achieve  a  low  coupling  and  high  cohesion? • How  much  effort  is  needed  to  split  the  development?  – Open  /  Close  principle   • Consequences: • Duplicated  code  (SonarQube,  PMD). • High  cyclomatic complexity  (SonarQube,  PMD). • Broken  Windows  Theory. • Solutions: • Code  Review  – Check  SOLID  principles. • Static  Code  analysis  tools  (SonarQube,  PMD). 21
  • 22. architectural debt a  time  based  approach:  Adam  Tornhill • Most  of  your  code  is  not  important.   • Focus  on  the  recent/new  features. • Hotspot  analysis  to  prioritize  improvements • Open-­‐Close  semantics  validation  (using  Git). • Complexity  Trend  analysis  to  understand  how  an  specific  component   evolves  (using  Git). source:  http://www.adamtornhill.com/articles/software-­‐revolution/part2/index.html 22
  • 25. architectural debt an estimation  approach:  ticketmaster source:  https://tech.ticketmaster.com/author/simontarry76/ 25
  • 26. Testing debt • Measures: • How  much  code  coverage  do  we  have? • How  much  time  we  wait  to  run  our  tests? • How  much  time  do  we  spent  to  manually  validate  the  functionality? • Consequences: • Bugs  (FindBugs /  SonarQube) • Low  code  coverage  (SonarQube) • Slow  validations  /  code  reviews. • Solutions: • BDD  or  TDD • Continuous  Integration  tools. • Code  Coverage  tools. • Static  Code  Analysis  tools  (SonarQube,  FindBugs). 26
  • 27. Testing debt unit  tests  are  the  most,  not  the  foundation  – Joshua  Lewis 27
  • 28. testing debt do  not  loose  time  running  unrelated  tests • Split  the  project  into  sub-­‐projects  (e.g microservices)  as  much  as   possible. • Run  integration/application  tests  from  the  CI.   • You  will  not  receive  interruptions  for  lack  of  resources. 28
  • 29. Code Standards debt • Measures: • How  much  code  violates  our  coding  standards? • How  much  clear  are  our  names? • Consequences: • We  spend  more  time  understanding  code •Solutions: • Static  Code  Analysis  tools • Continuous  Inspection 29
  • 30. Code Standards debt – checking & fixing • There  are  a  lot  of  static  code  analysis  tools  and  linters  for  every   programing  language. • Every  day  appear  more  software  to  fix  code  style  issues,  which   reduces  the  effort  to  have  clean  code.   30 facebook/pffff google/error-­‐prone dotnet/roslyn
  • 31. Technical debt distribution (an estimation) Architectural Testing Standards Infrastructure Knowledge Interest  Rates  Distribution 15  % 10  % 30  %5  % 35  % Fixing  Cost  Distribution Architectural Testing Standards Infrastructure Knowledge 50  %30  % 10  % 5  % 5  % 31
  • 32. Now, estimate by yourself.. 1. Each  team  member  scores  a  unique  value  for  the  different  technical  debt   categories  on  a  pre-­‐agreed  scale  (1-­‐5)  (low  debt  to  high  debt)  for: • Interest  Rate • Fixing  Cost 2. Each  category  is  discussed  one  by  one  to  reach  a  consensus.   3. Prioritize  the  ones  which  reduces  more  the  interest  and  has  the  lowest   fixing  cost. 4. But  whatever  you  decide,  if  you  write  code,  do  characterization  tests,   first 5. Define  a  KPI  to  review  it.   1. Have  decreased  the  number  of  reported  bugs  per  sprint? 2. Have  increased  the  number  of  features  (e.g stories)  per  sprint? 32
  • 33. Debt  Category Fixing  Cost   Interest   Rate Final  Value   Architectural 5 4 4/3  =  1,3 Testing 4 5 5/4  =  1,25 Standards 2 2 2/2  =  1 Infrastructure 3 1 1/3  =  0,33 Knowledge 1 3 3/1  =  3 estimation example 33
  • 34. legacy code rocks! movement • Web  page  http://legacycode.rocks/ • Slack:  https://legacycoderocks.slack.com/ • Meetup Group:  http://meetup.com/es-­‐ES/Legacy-­‐Code-­‐Rocks-­‐ Barcelona/ 34
  • 35. conclusions • Two  origins:  MVP  (idea  validation)  or  productivity  reasons. • Fix  the  leak  first.  Afterwards,  increase  the  productivity. • There  are  multiple  technical  debt  categories. • To  increase  productivity,  decide  what  improvements  to  do  for  each   category,  its  cost  and  the  current  interest.  Then,  prioritize  them. 35
  • 36. Thanks for your attention 36