TDD or not TDD ? On a remis ça avec Kevin

Oups, je l’ai encore fait.

J’ai posté un truc pour chauffer mon ami Kevin (que j’apprécie vraiment, c’est pas juste une tournure de phrase). Et c’est encore parti en sucette.

Il a répondu via un post, et là, c’est parti en bataille rangée.

Si tu regardes bien, chacun a rallié son camp : les pro-TDD VS les on-peut-faire-sans-TDD.

Au-delà des tacles biens sentis, il faut dire qu’il a une sacré répartie Kevin, on trouve des questions et remarques qui m’ont fait réfléchir. Autant faire quelque chose d’utile de tout ce bruit.

“Si en 4h sans TDD tu as des régressions en cascade : change de métier.”

Uppercut direct au foie. Il m’a fallu un petit moment pour l’encaisser celle-là.

Suis-je devenu mauvais ?
Ai-je été bon un jour ?
Qu’est-ce qui fait que je reste convaincu de ma démarche ?

J’avoue que le doute s’est instillé.

Et c’est un commentaire qui m’a donné la réponse : “Je pars du principe que le code que j’écris marche et je vérifie ensuite”.

Alors que pour moi c’est tout l’inverse : je pars du principe que je vais faire des erreurs. Du coup je code d’une manière qui me rassure. Et le TDD rassure beaucoup.
Ce n’est pas sa seule vertu, et ce serait dommage de réduire le TDD à des tests, et en même temps, c’est le cœur de la démarche. Parler de TDD sans test est juste un non sens.
Car les tests rassurent : que le code marche, que je vais pouvoir le faire évoluer, que je suis sur la bonne voie vers l’objectif.

Alors oui, quand j’étais jeune, mon cerveau était capable de coder des heures entières sans le moindre de test, mais la charge cognitive n’était pas la même. 

Coder sans TDD, c’est juste super fatigant : le TDD est au développement ce que le GTD est à la productivité. Un outil pour baisser la charge mentale et garder son énergie pour ce qui permet de créer de la valeur. 

Est-ce que tu apportes plus de valeur en te demandant ce que tu vas ou pas casser, comment tu vas designer ci ou ça, ou bien en créant les fonctionnalités qui vont ravir tes utilisateurs ?
Et bien sûr que tu peux faire les deux. Mais je suis convaincu que l’énergie se dissipe.

Alors est-ce que je n’en suis plus capable ?
Est-ce que je suis devenu mauvais parce que je n’anticipe pas les régressions que je pourrais causer ou que je préfère me laisser guider par les tests pour concevoir mon app ?

Peut-être. 

Ou alors peut-être que je n’en n’ai juste plus envie parce que j’ai trouvé une autre manière de faire beaucoup plus efficace et satisfaisante. Difficile de faire la part des choses. En tout cas, je pense que je suis devenu inadapté pour travailler sans.

D’ailleurs j’adorerais bosser sur un gros chantier de refactoring pour tester l’expérience. Et si tu veux connaître la démarche que j’applique pour aider mes clients à reprendre en main leur legacy, c’est ici et c’est gratuit.

“Twitter, instagram bossent sans TDD”

Alors dans la série des arguments foireux, celui-là tient la palme.
Depuis quand le nombre ou la taille est un argument recevable ?
On se fait un rappel historique ? Certains dictateurs ont été élus par suffrage…

Ensuite, mentionner des boites qui ont des moyens quasiment illimités est-il bien sérieux ?
J’ai eu le plaisir d’inviter le lead dev android d’ubber sur le podcast. Ils ont réécrit l’app 3 fois, tous les deux à trois ans environ.

Il faut être lucide : peu de sociétés ont autant de moyens. Dans mon quotidien, je vois surtout des start-up qui calent au moment de monter en pression et qui n’arrivent pas à financer un re-développement. Les devs restent englués dans un code qui les engloutit petit à petit et le business avec.

Peut-être que les start-ups ont plus de moyens outre atlantique, c’est bien possible. Mais ce n’est pas le reflet de ce que je vois en France. 

Une question d’efficacité

On m’a reproché de parler de régression en cascade pour un pauvre changement de champ de base qui générait une régression non anticipée.

Comme si j’en faisais des caisses pour pas grand chose. Ok je suis Marseillais dans l’âme et à moitié Italien. Mais il y a plus que ça.

Je pense que j’ai développé une sensibilité élevée à la perte d’efficacité.
Du coup, je me suis demandé comment je pourrais objectiver ce ressenti :

  • Je me rends compte que quand je dois ouvrir l’app à chaque modification pour me rassurer, je commence à être tendu.
  • Quand l’idée d’implémenter un algo basique me rebute, c’est que je suis sur une mauvaise trajectoire.
  • Le pire : quand je ne me rends pas compte que je casse quelque chose au moment de coder. Là, je me tends beaucoup. Entendre par là : je lance l’app en pensant que ça va marcher et ce n’est pas le cas.

Alors je sais que pour beaucoup de développeurs ces choses sont banales. Pourquoi en faire tout un plat ?

Parce que c’est désagréable ! 
J’aime bien me savonner avec un gant doux et moelleux. A la rigueur un gant de crin peut avoir des vertus. Mais la brosse métallique, non merci.

Bien sûr qu’on peut développer de grosses apps sans TDD, des tas de développeurs le font au quotidien.

Mais est-ce efficace ?

La seule vraie question qui m’échappe est plutôt l’inverse : pourquoi faire sans ?

Et si Kevin avait (un peu) raison ?

L’expérience n’a pas été vaine. 

Je remets un peu de contexte : avec 2 amis, on se chauffe pour faire un bot telegram dans la crypto. Je suis super excité par le projet, mais…

Je ne connais ni le langage, ni la stack. J’ai toujours bossé à l’intérieur de la blockchain en écrivant des smart contracts, très peu de l’extérieur pour les opérer avec un bot.

Je n’ai jamais fait de bot telegram.

Le projet est plus un concept qu’un truc défini : on a une direction, quelques API à intégrer et roule.

Autant dire que le product-market-investors fit n’est pas encore là.

Pourtant j’ai très envie de poser quelque chose rapidement. Et je dois ingérer beaucoup d’informations nouvelles en peu de temps. Alors je fonce et je code un bot dans un fichier à plat de quelques centaines de lignes. 

0 design.

0 tests.

Tout ça donne une orgie de code sans laquelle toutes les couches se mélangent gaiement : la base de données échange directement avec la logique de génération de wallet. L’affichage se fait à même le traitement de données. La gestion d’erreur se mélange avec l’ihm.

Une hérésie.

Et c’était très bien : j’ai pu tester l’idée, me rassurer sur la faisabilité. Voir quelque chose qui marche donne envie de faire un pas de plus ce qui est motivant pour l’équipe.

Mais je tremble déjà à l’idée de mettre en prod en l’état : on parle de quelque chose qui pourrait manipuler des millions. Ça peut aller très vite dans la crypto. Et je ne serais pas serein de faire ça sans savoir que je vais pouvoir continuer à faire évoluer l’app tranquillement. Certains savent faire ça sans TDD. Moi j’en ai besoin.

Donc si aller droit au but et explorer a été vertueux pour découvrir, je sens que je perds maintenant en efficacité et qu’il est temps d’installer Chai.

En plus, ça va me faire du legacy à reprendre !

Tu veux dynamiter ton legacy sans te prendre la tête : clique ici.

Alors, est-ce que Kevin a raison ? 

Disons qu’il n’a pas complètement tort. Si j’avais ralenti le dev du prototype, peut-être que je serais encore à réfléchir à comment architecturer la couche métier et le momentum entre nous serait passé. Peut-être.

Mais attention : le monstre spaghetti grandit vite et peu de développeurs s’en rendent compte à temps. Considérer qu’on pourra tout jeter et refaire ne me semble pas très responsable. C’est peut-être moi qui en fait tout un plat. Après tout, si ce n’était que de l’argent, pourquoi pas. Mais je parle aussi de bien être dans son travail. 

On se le fait quand cet octogone ?

Ca n’apporterait pas grand chose au débat, mais ça ferait certainement une belle hype ! 🚀

On ferait des vidéos youtube de nos entraînements, on continuerait à se mettre dessus sur LinkedIn et on irait boire des bières après. ❤️

2 réflexions sur « TDD or not TDD ? On a remis ça avec Kevin »

  1. Merci Benoît pour cet article. Cela reflète tout à fait ma vision. Je dirai que la valeur du TDD se décompose en la valeur immédiate et la valeur à long terme : des tests bien pensés et complets pour tous le monde dans l’équipe qui font monter le niveau de confiance pour refactorer. Ce qui entraîne un cercle vertueux.

    Je pense cependant que dans ce débat nous aurions besoin d’études sérieuses pour valider et quantifier la valeur ajoutée. Car il est encore difficile de convaincre hors des équipes de dev.

  2. Merci à l’auteur pour cet article très intéressant. Je suis tout à fait d’accord avec l’idée que le TDD est un outil précieux pour les développeurs. Il permet de garantir la qualité du code et d’éviter les régressions, ce qui est essentiel dans le cadre de projets logiciels complexes. En outre, le TDD peut aider les développeurs à mieux comprendre le code et à le refactorer plus facilement.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.