Agile technical debt management
Maxime Thoonsen
![](https://s3.amazonaws.com/media-p.slid.es/uploads/maximethoonsen/images/1217797/theodo.jpg)
Why should you care about technical debt ?
A short personal story...
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/2863182/game_over.jpg)
Avoid the Game Over
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/3092594/debt-technical.jpg)
Keep a good velocity
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/2583902/bluescreen.png)
Prevent bugs
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/2617465/epic-fail-photos-security-fail.jpg)
Increase security
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/2647242/broken_windows.jpg)
Broken windows theory
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/2859400/Angry-at-computer-630x420.jpg)
Dev mental health
Why should you monitor your technical debt ?
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/2650400/technicalDebt_stuck.jpg)
To know the trend
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/2583870/techdebtretroeffortvspainhighreturnnotworth.png)
Prioritize
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/2650438/risk_game.jpg)
Less bad surprise
What is technical debt ?
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/2619084/1024px-Ward_Cunningham_-_Commons-1.jpg)
Metaphor from Ward Cunningham in 1992 to communicate with non technical stake holders.
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/2618685/technical_debt.png)
Reduce Quality ?
=> Debt
Reduce Productivity ?
=> Debt
Code quality
if (isset($all) && isset($moules) && isset($pieces) && isset($chassis) ){
//On traite toutes les pièces
//Tant qu'il y a besoin de produire des pièces, on avance dans le planning
$encoreaproduire = true;
$j = -1;
$capaamig = $this->container->getParameter('capaamig');
$capagm = $this->container->getParameter('capagm');
while ($encoreaproduire && $j<5){
$encoreaproduire = false;
$j++;
foreach($pieces as $p){
if ($p['restealivrer']>0){
$encoreaproduire = true;
if ( $moules[$j][1] < $capaamig || $moules[$j][2] < $capagm ) {
//Pas de contrainte de capacité, voyons du coté des chassis
//On regarde pour tous les modèles possibles
if (isset($all[$p['id']])){//Il n'y a pas forcément de modèle
foreach($all[$p['id']] as $unmodele ){
$chantier = $unmodele['chantier'];
//On regarde pour tous les types de chassis
foreach($unmodele['chassis'] as $typedechassis){
//On regarde pour tous les chassis
foreach( $chassis[$typedechassis]['chassis'] as $unchassis){
if ($unchassis['date'] <= $j && $p['restealivrer']>0 &&
((($chantier == 1 || $chantier == 3 ) && $moules[$j][1] < $capaamig )
[.........................................................................................................]
}
}
}
}
}
}
}
}
}
}
Complexity
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/3094379/infinite-battle-complexity.gif)
Bugs
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/3094302/error_500_cat.jpg)
Deployment Pipeline
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/3159525/xkcd-deploying.png)
Security
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/3094312/Bike-Wheel-Security-Fail.jpg)
Architecture misconception
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/3094408/barbecue-fail.gif)
Broken/Lack of tests
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/3094346/travis_failed.png)
Dev environment
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/3094351/funny-turtle-chef-dinner-slow-cooking.jpg)
Lack of documentation
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/3094405/documentation.jpg)
Good technical debt
POC value < cost debt ?
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/2859436/balance_stone.jpg)
POC
Debt
Communication
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/3127176/fake-facade.jpg)
Warnings in the code
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/2647242/broken_windows.jpg)
How can you manage technical debt ?
Identify on the fly
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/1281709/detective-447232.jpg)
Evaluate
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/3094448/evaluation-icon-16207.png)
Map it: Trello board
I - Copy the template
II - Tag people
III - Add a description
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/3128789/debt-ticket-screenshot-list.png)
IV - Evaluate the ticket
Monitor your debt
Σ(points of tickets) ?
Monitor your debt
Standard:
Σ(points of tickets) < 500 points
Monitor your debt
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/3127233/debt-evolution-start.png)
Monitor your debt
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/3127234/debt-paradise.png)
Monitor your debt
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/3127236/debt-evolution-rush.png)
Scrutinizer
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/3092745/scrutinizer-mark.png)
Scrutinizer
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/3159991/scrutinizer-chart.png)
SensioLabs Insight
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/3162937/insight.jpg)
Human metrics
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/3159487/quality-measurement.png)
Fight the debt !
Boy scout rule
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/2648176/boy_scout_rule.jpg)
Focus on one battle
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/2650438/risk_game.jpg)
Request time to fix it
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/2650400/technicalDebt_stuck.jpg)
Distribute responsibility among the team
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/3159654/Barney-Stinson-challenge-accepted.jpg)
WITH DEADLINES !
Prevent the debt !
Motivation tips
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/2659555/alway-code-like-if.jpg)
Motivation tips
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/3159675/write-shitty-code-kitten.jpg)
Joconde effect
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/2709424/joconde.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/2709424/joconde.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/2709424/joconde.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/2709424/joconde.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/2709424/joconde.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/2709424/joconde.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/2709424/joconde.jpg)
Make choices adapted to your team
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/2971059/vuejs-logo.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/2971058/react.png)
Code review
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/3094240/secret_code_quality.png)
Go for simplicity
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/3094596/simplicity_ultimate_sophistication.jpg)
Is it simple to understand ?
Many loops ? Many "if else" ?
Is it tested ?
Are my tests easy to understand ?
...
Checklist using Github Template on PRs
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/3159788/checklist-github-template.png)
More tests != less features
DO YOUR JOB CORRECTLY
Retrospective
Motivation / interest / discipline droped
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/3159364/How_About_No.jpg)
Debt is quite well known
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/2650438/risk_game.jpg)
Debt is a popular subject
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/3159433/monroe-wallpaper.jpg)
4 actions to do right now
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/2618630/trello_debt_management.png)
I - Create the board (10')
II - Pitch it to your team (45')
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/3159205/obama-speech.jpg)
III - Create your metrics (15')
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/3127234/debt-paradise.png)
IV - Involve your client (15')
![](https://s3.amazonaws.com/media-p.slid.es/uploads/201766/images/3159342/collaboration-explanation.jpg)
Questions ?
![](https://s3.amazonaws.com/media-p.slid.es/uploads/maximethoonsen/images/772606/questions.jpg)
http://www.slideshare.net/lemiorhan/technical-debt-do-not-underestimate-the-danger
http://www.slideshare.net/zazworka/identifying-and-managing-technical-debt
http://www.ustream.tv/recorded/86180723
http://topbusinessinsurers.com/business-insurance/the-consequences-of-accumulating-technical-debt/
http://www.infoq.com/articles/managing-technical-debt
http://www.slideshare.net/zazworka/identifying-and-managing-technical-debt
http://verraes.net/2014/06/managed-technical-debt-revisited/
http://blog.smartbear.com/code-review/the-secret-to-code-quality/
Sources
Forum PHP 2016 - Agile technical debt management
By Maxime Thoonsen
Forum PHP 2016 - Agile technical debt management
- 5,365