Sortir de la non qualité
Il y a quelques mois de cela, Michel vous parlait de la culture du Software Craftsmanship. Il évoquait notamment dans son article les différents enjeux à adresser pour diffuser cette culture dans l’entreprise. J’aimerais prolonger son discours en vous proposant de revenir sur l’origine de cet océan de code “legacy” dans lequel beaucoup d’entres nous naviguent douloureusement chaque jour. Mais surtout, j’aimerais vous proposer des moyens de s’en sortir.
Nous sommes entourés de code pourri
Oui, nous sommes entourés de code pourri, au sens propre du terme. Il s’est altéré au point d’être inutilisable, il est maintenant impropre à la programmation, à l’évolution. Pourquoi ? Parce qu’il n’a pas été entretenu, un peu comme une maison qui aurait été laissée à l’abandon.
Comme le disait Michel, la mauvaise qualité de ce code a plusieurs conséquences :
- Un time to market plus long (un code plus long a faire évoluer, des régressions plus promptes à apparaitre qui vont prolonger les cycles de développement…)
- Des applications trop lentes (avec les conséquences que cela peut avoir sur le référencement notamment)
- Des risques d’indisponibilités accrues (avec les conséquences que cela peut entrainer en revenu et en image de marque)
Quand le code est vraiment mauvais, on peut même assister à un désengagement des développeurs. Or, nous savons aujourd’hui que les 20% de turn over de l’industrie informatique sont essentiellement liés à leur degré de satisfaction et d’engagement. Et à chaque départ, bien souvent, c’est une partie (parfois bien trop grande) de la connaissance du système d’information qui s’en va…
Pourquoi tant de codes pourris ?
Nous avons une conviction chez OCTO : le développement est un savoir-faire, qui s’acquiert via l’expérience et l’accompagnement de ses pairs, comme dans tous les artisanats. Or, même si tous les développeurs (se) sont formés à la programmation, bien peu l’ont été aux pratiques de développement essentielles que sont, selon nous, la revue de code et l’écriture de tests unitaires automatisés (ne parlons même pas de TDD). D’autant plus qu’une formation n’est pas suffisante : comme leur nom l’indique, les pratiques de développement nécessitent de la pratique pour être ancrées au quotidien.
Ce manque de formation et de pratique fait que bien peu de développeurs sont capables de mettre en place les tests unitaires et la revue de code dès le démarrage d’un projet, ce qui va vite s’avérer nuisible. Ainsi, l’existence de code pourri peut avoir 2 effets :
- Un effet d’accumulation : plus le code est pourri, plus il faudra de temps/d’argent pour l’assainir, plus vite on se décourage face à l’ampleur de la tâche
- Un effet d’entropie : le code pourri engendre le code pourri.
- code fortement couplé sur lequel il est très compliqué de mettre en place des TUs
- chaque modification entraine des régressions (dont on ne se rend pas compte tout de suite parfois)
- du code copié/collé pour éviter de faire des modifications
- etc…
Il est donc nécessaire de former et d’accompagner les développeurs aux pratiques de développement, mais aussi de leur donner le temps de pratiquer au quotidien. En effet, en plus d’assurer le bon fonctionnement de son application, ces pratiques coûtent moins cher sur le long terme à l’entreprise !
Le gain des pratiques de qualité
C’est indéniable, les pratiques de qualité logicielle font qu’une fonctionnalité prendra plus de temps à être développée. Mais par contre, elle mettra moins de temps à être mise en production. Ainsi une étude réalisée chez Microsoft sur l’impact de TDD leur a permis de montrer que pour un temps de développement supérieur situé entre 15 et 35%, on obtient une réduction de la densité de bugs par ligne de code située entre 60 et 90%. Si on estime qu’un développeur ne faisant pas de TU passe 50% de son temps à faire du debug, dans le pire des cas (35% de temps supplémentaire pour “seulement une réduction du nombre de bug de 60%), en faisant le postulat que tous les bugs prennent le même temps à être corrigés, on peut obtenir le graphe suivant :
Durée d'un projet avec vous sans TDD
On voit donc apparaitre un gain de temps de l’ordre de 25% ! Et on ne parle même pas des gains en qualité et maintenabilité induite par le développement en TDD du code. Ces gains qui feront gagner du temps lors des prochaines évolutions du code.
De même, une étude universitaire a permis de montrer que la mise en place de revues de code permet de réduire jusqu'à 5 fois la quantité de bug livrée en production, notamment si celles-ci possèdent un bon niveau de discussion entre les développeurs. En ce qui concerne le ROI de la pratique, on l’estime à 4 pour 1.
Qui plus est, les pratiques de qualité ont pour vertu essentielle de prévenir ou de détecter pendant la phase de construction les défauts de l’application. Or, il ne faut pas oublier la loi du defect cost increase : plus un bug est détecté tardivement, plus il coûte cher à être corrigé.
Ces données nous montrent donc que mettre en place des pratiques de qualité dans le cadre du développement fait gagner du temps et économiser de l’argent.
Le code de mon projet est pourri… Je fais quoi ?
Dans ce genre de cas, 3 options s’offrent à moi si je suis un décideur :
- Je ne fais rien, avec tous les risquent que ma société encourt (TTM faible, démission, perte de client, …).
- Je casse tout et je recommence, mais je ne change rien à mes pratiques… Certains définissent la folie mentale ainsi : répéter la même chose plusieurs fois en espérant que cela se passera de manière différente.
- J’instaure une culture de la qualité dans mon équipe/ma société et j’introduis les pratiques associées.
Il va sans dire que chez OCTO, nous vous conseillons la troisième solution. Mais comment faire ? Nous proposons une démarche progressive pour l’acquisition d’une pratique, en suivant une règle de 3 : 3 jours pour se former, 3 semaines pour que ça devienne un automatisme, 3 mois pour obtenir un ROI (qualité obtenue sur temps investi).
Nous travaillons donc de la manière suivante avec nos clients pour accompagner une équipe de développement :
- Un cycle de formation sur les pratiques essentielles (TDD, TDD sur code legacy, Revue de code, Feedback, BDD, Clean Code), permettant à chacun d’acquérir un savoir sur celles-ci.
- Un minimum de 3 semaines d’accompagnement (en fonction du nombre de pratiques à transformer en automatisme), pour ancrer les savoirs et les transformer en savoir-faire
- Un minimum de 3 mois de coaching dégressif, afin d’aider le tech lead à porter les pratiques au sein de son équipe et que la qualité devienne un savoir-être.
Et si vous ne deviez commencer que par un ensemble de pratiques limité, nous vous conseillons fortement de commencer par TDD et la revue de code : ils offrent un ROI rapide et un gain de qualité important pour les équipes qui travaillaient sans jusqu’alors.
Vous avez déjà mis en place un certain nombre de ces pratiques mais vous ne constatez pas le gain en qualité espéré ? Nous vous invitons à (faire ?) auditer vos pratiques via des interviews. Ce qui vous permettra de savoir si celles-ci n’ont pas été mal comprises ou détournées de leurs buts initials. De même, inspectez votre code pour comprendre les problèmes que celui-ci traverse.
De plus, n’oubliez pas de mesurer un avant et un après. Vos mesures seront les meilleurs avocats concernant la mise en place de pratiques de qualités. Voici quelques exemples de mesures intéressantes à suivre : le nombre d’anomalie par fonctionnalités/User Story, le nombre d’anomalies détéctées avant une MEP/une livraison, le nombre d’anomalies corrigées avant une MEP/une livraison.
En conclusion, je voudrais revenir aussi sur une cause malheureusement très courante des problèmes de qualité : la loi de Conway. Votre code est pourri tout simplement parce que personne ne vous a jamais donné les moyens d’en faire quelque chose de qualité. J’espère alors que les quelques arguments que j’ai pu vous donner au sein de cet article vous permettront de défendre votre point de vue et de changer les choses… Bon courage !