Le demi-cercle (épisode 28 -- Embardée)
Jérémie: qui déjeune au Jockey ? Farid : … Farid : OK mais donne moi 10 minutes ToF: OK Audrey : … Audrey : On peut savoir pkoi tu nous invites via IM ?
Il est midi cinq. Chacun est à son poste. Hugo est concentré sur son PC tout nouveau, en train de mettre au point la configuration qui va bien pour pouvoir assembler la version courante d'XXL.
Audrey ferme sa session, et lance à la cantonnade : - Qui est partant pour un Jockey ?
Hugo demande : - C'est quoi un Jockey ? - Déjeuner, au bar du coin. Ils ont des quiches extra. - J’aime pas trop la quiche, mais OK !
Jérémie jette un regard sombre en direction d'Audrey. Il dit : - OK. Pourquoi pas. Allons-y. Farid, on y va maintenant, sinon il y a aura trop de monde. Farid ferme sa session et se lève : - J'ai fini, j'ai fini.
Tu regardes Audrey; tu souris d'un air entendu. Audrey te rend ton sourire avec un air de dire : "quoi ?"
---
La salle du fond n'est pas encore pleine. Le serveur vous installe à une table au bout de laquelle il place une cinquième chaise. Vous commandez à manger, puis discutez de choses et d’autres. Tu annonces :
Toi : Bonne nouvelle, le projecteur que je me suis acheté marche parfaitement avec mon PC. On pourra l’utiliser en attendant que le nôtre soit réparé. Audrey : Tu devrais te le faire rembourser, faire une note de frais. Toi : Je compte le garder, ça peut être utile. Jérémie : Le résolution est nettement moins élevée, note. Toi : Ça fera l’affaire en attendant. Hugo : On dirait que vous attachez une grande importance à ce projecteur. Pourquoi ? Audrey : C’est ce qui nous sert à développer en équipe. C’est vrai que tu n’as pas encore eu l’occasion de participer à une session. Hugo : Développer en équipe, c’est pas ce qu’on est déjà en train de faire ? Jérémie : Le terme exact est mob programming, mais programmer en bande, ou en foule, ça n’est pas spécialement attractif. Hugo : En quoi ça consiste exactement ? C’est quoi l’idée ?
Audrey prend le temps d’expliquer l’idée. Le serveur amène les quiches et les salades, ainsi que le steak d’Hugo. Hugo remercie Audrey pour son explication, attaque son steak, et déclare :
Hugo : Eh bien, c’est une idée en effet. Je veux bien essayer, mais je ne crois pas que ça puisse marcher. Jérémie : Qu’est-ce que tu veux dire en disant : je ne crois pas que ça puisse marcher ? Hugo : Ça ne produira pas le résultat escompté. Jérémie : De fait, ça marche déjà, en ce qui nous concerne. Hugo : Eh bien je demande à voir. Jérémie : Eh bien ta demande va être exaucée, puisque le problème du projecteur est résolu. Hugo : J’ai quand même des doutes. Audrey : C’est normal. Farid : Le contraire serait surprenant, en fait. Jérémie : Qu’est-ce qui marche bien pour toi, Hugo ? Hugo : Oh pour moi c’est simple. Ce qu’il faut c’est livrer dans les délais. C’est le plus important. Jérémie : Ça a, en effet, une certaine importance. Mais qu’est-ce que tu fais qui te permet de livrer dans les délais ? Hugo (pose ses couverts, et se sert de l’eau) : Eh bien, d’abord, éviter tout ce qui prend trop de temps. Farid : C’est à dire ? Hugo : Tu regardes tout ce que tu as à faire, et ce qui prend trop de temps, tu le remets à plus tard. Jérémie : Ha ! Audrey (se sert de l'eau puis sert Jérémie) : Jérémie, détends toi, prends un peu d'eau. Voilà. Et laisse parler les convives ! Toi : Tu aurais un exemple de tâche qui prend trop de temps et que tu remets à plus tard ? Hugo : Oui. Par exemple, je suis sur un code qui implémente un comportement, et je dois créer une nouvelle version de l’application, qui implémente un comportement similaire, en plus de celui qui est déjà présent. Farid : OK. Hugo : D’habitude, on pourrait dire : il faut factoriser le code, à partir de ce qu'il y a en commun dans les deux comportements. Moi je dis, non : copie la classe, fais les changements qui vont bien, et livre le résultat au client. Farid : Copier/Coller, quoi. Hugo : Copier/Coller intelligent. Toi : En quoi c’est intelligent ? Hugo : Le client sera livré plus vite. Jérémie : Faut pas confondre vitesse et précipitation, comme dit la sagesse populaire. Hugo : C’est pas de la précipitation ! Tu livres ! C’est ça qui compte. Et tu peux faire ça parce que tu as remis à plus tard tout ce qui prend du temps. Toi : Mais ensuite, le code que tu as copié/collé de cette manière, devient plus difficile à maintenir. Hugo : Ou pas. Je pense qu'on surestime l'importance donnée à la maintenance du code. Toi : Qu'est-ce que tu veux dire par là ? Hugo (prend une pause pour dévisager ses convives) : Le code, c’est de la paperasserie. Jérémie : Hein ? Hugo : Et on n’est pas payé pour faire de la paperasserie. Jérémie : Tu peux développer ? Hugo : Le code, c’est juste un moyen pour créer la valeur qu’attend le client de l’application. Ce n’est pas une fin en soi. Faire du beau code pour le beau code, c’est une perte de temps. Jérémie : Mais produire plus de paperasserie, en copiant/collant des classes, ça va ? Hugo : Du moment que tu livres, oui ça va. Tu pourras toujours revoir le code plus tard. Tu vois l’idée ? Jérémie : J’ai du mal. Quelle idée ? Hugo : Remettre à plus tard ce qui prend du temps. Toi : Hmmmm… Hugo : Autre exemple : la nouvelle story qu’on est en train de réaliser, la 436. On aurait déjà pu la livrer depuis lundi. Audrey : Ah bon ? Elle est prête ? Jérémie : Certainement pas. Hugo : Elle est quasiment prête. Jérémie : Quasiment ! Tu en as de bonnes ! Hugo : Moi je dis : si il n’y a pas de bug, on livre, point. Jérémie : Comment tu sais qu’il n’y a pas de bug ? Farid : Méfie-toi, Hugo, c’est une question piège. Hugo : Fais-moi confiance, je sais que je suis nouveau dans l’équipe, mais je connais mon métier quand même. Jérémie : Ce n’est pas une question de confiance ou d’ancienneté. Hugo : Ah bon ? Alors quel est le problème qui nous empêche de livrer ? Jérémie : Le principe sur lequel tu t’appuies pour prendre la décision de livrer. Hugo : Quel principe ? Jérémie : Voilà, justement. Tu dis : il n’y a pas de bug. Hugo : Je ne te suis pas très bien. Jérémie : Tu te rappelles le bug que tu as corrigé la semaine dernière ? Hugo : Oui. J’y ai passé quatre heures ! J’ai des suggestions d’ailleurs… Jérémie : Quand est-ce qu’est apparu le bug ? Hugo : Qu’est-ce que j’en sais ? Faut regarder dans le bug tracker… Jérémie : L’info n’est sûrement pas dans le bug tracker. Hugo : Bah si : le champ date est obligatoire, donc… Jérémie : Je parle de la date à laquelle le défaut a été inséré inopinément dans le code, pas de la date à laquelle quelqu’un a constaté la défaillance dans le fonctionnement de l’application. Hugo : Tu pinailles. Jérémie : Date d’insertion : À ton avis ? Hugo : Comment je le saurais ? Jérémie : Oui, bonne question : comment tu le saurais, si tu pouvais le savoir ? Hugo : Je n’ai pas de troisième œil, figure toi, je ne peux pas le savoir ! Jérémie : Mais si tu avais ce don, tu verrais les défauts, comme surlignés en jaune, et en scannant le repository, ta super-vision traverserait les différentes versions du code, et tu trouverais la version exacte où ils sont insérés. Il te suffirait de percer le code à jour, exact ? Hugo : J’imagine… hypothétiquement. Farid : N’empêche, ce serait super-pratique. Jérémie : Hypothétiquement. Mais en réalité, quand tu lis le code, tu ne peux pas voir les défauts apparaître immédiatement, soulignés en jaune. Hugo : D’autant que je n’ai pas relu tout le code. On n’a pas le temps, figure toi. Jérémie : A fortiori. D’où ma question. Comment tu sais qu’il n’y a pas de bug ? Hugo : Alors on ne livre plus jamais rien, avec ta logique. Jérémie : C’est ça. Tu mets le doigt dessus. C’est ce que je n’apprécie pas dans tes principes. Hugo : Qu’est-ce que tu n’apprécies pas ? Jérémie : C’est tout ou rien. « Il n’y a pas de bug, on peut livrer. » « C’est ça ou bien on ne peut plus jamais livrer. »
Bon.
Il y a une pause. Audrey lit son téléphone. Farid observe le temps qu'il fait par la fenêtre. Jérémie plie sa serviette et la pose à côté de son assiette. Toi : Jérémie qu’est-ce que tu proposes ? Jérémie : Je propose qu’on ne livre pas du code qui n’a pas été relu. Audrey : Je plussoie. Et aussi qu’on n’écrive plus du code qui n’a pas de test. Hugo : Eh mais ce code ce n’est pas le mien, vous êtes marrants, vous. Il n’a pas de test, qu’est-ce que j’y peux ? Jérémie : Tu peux y mettre des tests. Hugo : Ça va prendre un temps fou. Jérémie : Tu sais écrire des tests ou pas ? Hugo : On se commande un café ? Audrey : On le prendra là-haut. Jérémie : Donc ? Hugo : Ce n’est pas la question. Jérémie : Quand même. Hugo : C’est une perte de temps, je te dis. Jérémie : Et le dernier bug que tu as corrigé t’a demandé 4 heures. Hugo : C’est un cas particulier. Jérémie : De fait, on a déja eu cette discussion, avant que tu rejoignes le projet. Les tests, ce n’est pas une option. Hugo : Je ne sais pas si je vais rester, du coup. Jérémie : Si tu le prends comme ça. Hugo : C’est triste. Jérémie : Je n’ai rien contre toi, mais si tu dois absolument écrire du code sans test, ce serait mieux pour le projet que tu ne restes pas. Audrey : Holà ! Vous allez un peu loin quand même. Hugo : Comme si tu pouvais le décider. Jérémie : Je donne mon opinion, c’est tout. Toi : Bon, on y va ?
Vous sortez de la brasserie. Vous traversez la rue, et rentrez dans l'immeuble en silence. Vous retournez à vos postes de travail, sans rompre le silence.
(à suivre) Episodes Précédents : 1 -- Si le code pouvait parler 2 -- Voir / Avancer 3 -- Communication Breakdown 4 -- Driver / Navigator 5 -- Brown Bag Lunch 6 -- Conseils à emporter 7 -- Crise / Opportunité 8 -- Le Cinquième Étage 9 -- Que faire ? 10 -- Soit... Soit... 11 -- Boîtes et Flêches 12 -- Le prochain Copil 13 -- La Faille 14 -- Poussière 15 -- L'hypothèse et la Règle 16 - Déplacements 17 -- Jouer et ranger 18 -- Arrangements 19 -- Mise au point 20 -- Expérimentation 21 -- Échantillons 22 -- Non-conclusions 23 -- Non-décisions 24 -- Épisode neigeux 25 -- Fusions et confusions 26 -- Débarquement 27 -- Tempête