Le demi-cercle (épisode 23 -- non-décisions)
Silence dans le bureau. On n’entend que le cliquetis des claviers et des souris. L’armoire déplacée il y a deux semaines occupe toujours une partie de l’entrée. On l’a délestée des cent kilos de papier qu’elle conservait depuis dix ans, et une équipe doit venir la débarrasser d’une semaine à l’autre. Le tableau blanc est couvert de formules, de flèches et de graffitis, résultats d’une session de conception particulièrement animée mais déjà fort ancienne. La mention « ne pas effacer » commence à s’effacer. Tu te lèves pour éteindre un des plafonniers dont le néon vacille. La lumière du jour, affaiblie par une pluie battante, reprend timidement ses droits dans la pièce. Tu lances à la cantonade : - Ça vous dit de prendre un café ?
Audrey répond : - Avec plaisir. Je n’arrive à rien faire avancer ce matin.
Farid répond : - OK.
Jérémie reste les yeux fixés sur son écran : - Je vous rejoins, je suis sur un truc.
Le coin cuisine est désert, et pour une fois relativement propre.
Farid : Il y a du chocolat, mais pas de pain, dommage. Toi : Tu n’as pas déjeuné ? Farid : En fait, maintenant que tu m’y fais penser, si. Audrey : Le module YearTaxParameters
: la dernière fois qu’on l’a modifié c’était quand ? Farid : Alors là, aucune idée. Toi : Jamais vu ce module. Je ne devais pas encore être arrivé.
Jérémie vous rejoint et se prépare un thé.
Jérémie : C’est incroyable ce qu’on peut faire une fois qu’on tient la bonne abstraction. Audrey : Tu m’en diras tant. Jérémie : Tu te rends compte que ça fait trois ans qu’on se traîne du code complètement superficiel pour gérer le recalcul des frais, alors qu’il y a bien plus simple ? Audrey : Pas vraiment. Jérémie, YearTaxParamater
, ça te dit quelque chose ? Jérémie : Rien du tout. C’est nouveau ? Audrey : Ah je ne crois pas, non. Ça a l'air assez vieux, à première vue. Jérémie : Je ne vois pas. Audrey (soupire) : Je vais avoir besoin d'aide. Toi : Ça me fait penser que nous n'avons pas décidé quoi faire des résultats de notre expérimentation de la semaine dernière. Jérémie : Résultats, résultats, c'est beaucoup dire. Toi : Qu'est-ce que vous en pensez, avec le recul ? Audrey : Pour moi c'est parfaitement clair. On a tout à gagner à travailler de cette façon. Farid : De quelle façon tu parles ? Audrey : En demi-cercle. Farid : Sur la base de quels arguments ? Audrey : Si on regarde les programmes individuels, on voit bien que chacun a pris du temps sur des difficultés différentes à chaque fois. Il y en a un qui ne gère pas bien les entrées / sorties, un autre où la structure est trop compliquée… Jérémie : Sans parler du cas où l'algo n'est pas complet. Audrey : Tandis que dans le programme écrit à quatre, non seulement on a terminé à temps, mais le code est plus clair, et bien plus facile à maintenir, à mon avis. Jérémie : Quand on développe en équipe le code est de meilleure qualité, mais prendre les bonnes décisions demande trop de temps. Audrey : On a quand même fini en moins d’une heure. Jérémie : Je veux dire, en général. Pour notre expérimentation, on a simplement eu de la chance, parce que le programme de décodage ne posait aucun problème nouveau par rapport au programme d’encodage, qu'on venait de terminer. Audrey : Eh bien dans le code de XXL aussi on va avoir cette chance, puisque le code n'est pas nouveau. Jérémie : C'est vrai. Toi : Donc si on pouvait prendre les bonnes décisions plus rapidement, ce serait un mode de travail avantageux ? Jérémie : Certainement. Farid : Oui, mais on ne peut pas. Donc ça ne l'est pas. Toi : On pourrait s'entraîner à prendre des décisions plus rapidement, note. Audrey : Pour ça il suffit de s'écouter. Farid : Ça ne suffit pas. Je pense que cette approche ne fonctionne que quand le courant passe entre les gens. Audrey : Il faudrait y mettre un peu de bonne volonté, aussi. J'ai l'impression qu'on s'y prend mal. C'est comme si on faisait ce qu'il faut pour que ça ne marche pas. Farid : Peut-être que tu penses qu'on veut saboter l'approche, mais ce n'est pas ça, le problème. Audrey : Alors c'est quoi le problème ? Farid : C'est pas si simple. Toi : Il suffit peut être de s'entraîner. Certains y arrivent ; qu'est-ce qu'ils font différemment ? Farid : Il ne sont pas sur des projets aussi urgents et compliqués. Jérémie : Ça, tu n'en sais rien.
Vous retournez à vos postes. Cliquetis de claviers et de souris.
Tu vas poser des tests. Il est inutile de songer à implémenter la story 234 sans d'abord s'assurer qu'on a des tests, parce qu'il va falloir un gros refactoring, et de l'avis de tous, remanier cette partie de l'application sans tests, serait comme une opération-suicide. Tu cherches où poser ton premier test.
S'il n'y avait pas ce capharnaüm accumulé depuis des années dans cette vaste pièce, haute comme deux étages, elle ferait probablement une bibliothèque magnifique. On comprend encore parfaitement l'idée de l'architecte : ces colonnes au quatre coins, qui semblent avoir été placées exprès pour servir de support à des passerelles à mi-hauteur, le long des murs. Et d'ailleurs, on aperçoit l'extrémité d'une des passerelles, qui s'est effondrée dans la masse de bric à brac.
Cette classe, avait dit Jérémie, c'est le coeur du logiciel. C'était deux jours après ton arrivée.
Dans l'obscurité qui régne ici, on est incapable de dire ce qui occupe tant de volume dans la pièce. On sait juste que c'est énorme. En prenant le temps de s'habituer à la pénombre, en scrutant méthodiquement chaque forme, on peut distinguer, entassés là, des meubles, des cartons, des boites, des brochures, des dictionnaires ouverts affalés les uns sur les autres, des chariots, des plateaux, les tiroirs interminables d'un fichier qui s'est renversé, libérant des centaines de milliers de fiches. Des machines, avec leurs tiges et leur mécanismes bloqués, des sous-mains étalés comme des tapis, des bocaux vides, d'autres bocaux remplis de rubans; du papier, des tonnes de papier. Dans cet atelier gigantesque, qui s'est écroulé sur lui même, il faudrait s'enfermer des heures, à fouiller le désordre, d'un regard analytique et complètement dépourvu d'émotions, avant de pouvoir comprendre ce qui s'est passé.
Si tu dois toucher à quoi que ce soit, avait il ajouté, préviens-moi d'abord.
D'un côté, il y a ce désordre révoltant, dont la conquête constitue le seul moyen d'implémenter la story 234. De l'autre, il y a ton équipe qui ne sait pas prendre les bonnes décisions assez rapidement.
Tu dis : - Jérémie, expérience de pensée : imagine que tu as construit une tour, pas très grande, mais superbe, de plusieurs mètres de haut. - Une tour ? - Une tour en bois. Peu importe le matériau. C'est un prodige d'ingéniosité et d'audace. - Admettons. - Ta tour a tellement de succès que tu l'as vendue. - OK. - Et que les gens qui l'ont achetée on décidé de l'emporter chez eux, et t'ont recruté pour t'en occuper, une fois chez eux. - OK. - Mais un accident de transport a fait que la tour s'est écroulée. Tu ne peux plus la remonter. Mais tu dois t'en occuper. Là où elle se trouve. - Où est-ce que tu veux en venir ? - Qu'est-ce que tu fais ? - Je la reconstruis ? - Oui, sauf que tu ne peux pas. Tu n’as plus le temps. - Je démissionne. - C'est ce qu'a fait le développeur initial d'XXL ? - Mais non, il est encore là en fait. Mais il est passé du côté des Ventes.
Audrey s’écrie : - Mais c’est pas vrai ! Mais c’est quoi ce code pourri ?
Jérémie ne quitte pas son écran des yeux. Farid fronce les sourcils comme pour se concentrer un peu plus.
Silence. Avec la pluie qui redouble, la lumière du jour est pour ainsi dire mourante. Tu te lèves pour aller rallumer le plafonnier. Le vacillement reprend. Juste au dessus de mon poste de travail, en plus. Bientôt deux mois que j’ai signalé ce néon défectueux. Pas urgent, pas important.
Tu ouvres un onglet sur ton navigateur et tu cherches : néon.
Tube Fluo 8W Blanc Industrie 2,49 €
Tu proposes : - Je propose qu’on travaille sur la story dont s’occupe Audrey. Et qu’ensuite on aborde le refacto pour la story 234.
Jérémie dit : - OK, mais dans 15 minutes.
Farid dit : - J’aimerais mieux pas. J’ai plein de tests à finir.
Tu commandes le néon.
Audrey a branché le projecteur sur son ordinateur, pendant que Jérémie finissait sa tâche en cours. Farid reste occupé sur ses tests, le dos tourné au code qui s’affiche sur le mur du fond.
Audrey : Si vous êtes d’accord, je vais prendre le clavier. Jérémie : OK. De quoi s’agit-il ? Audrey : C’est la story 212. En tant qu’utilisateur je veux que la table des paramètres de taxes annuelles dispose d’un champ supplémentaire permettant le recalcul des crédits d’impôts anticipés. Jérémie : C’est tout ? Toi : De quel champ est-ce qu’on parle ? Audrey : La suggestion de Charlène c’est : vous l’appelez comme vous voulez. Jérémie : Je propose qu’on l’appelle le ChampCharlene
, alors. Audrey : Je sais, c’est absurde, mais le nom du champ ce n’est pas le sujet. Ce qu’il faut, c’est tenir compte des crédits d’impôts saisis dans l’année en cours, en faire la somme, la conserver dans la base afin de la réutiliser au moment des calculs de provisions. Toi : C’est une story validée par Maria ? Elle est formulée bizarrement. Audrey : Charlène et moi, on discutait de la faisabilité du traitement, et je lui ai dit qu’on ne stockait pas cette somme intermédiaire en base, alors elle a écrit cette story. Jérémie : Ah d’accord. Audrey : Ce que vous voyez à l’écran, c’est le code de la classe YearTaxParameter
. Mon idée, c’était de ranger le résultat du calcul dans un nouveau champ de la table PRMTAXANN
. Je cherche à comprendre comment persister un nouveau champ, mais je n’y arrive pas. Jérémie : Je ne suis pas sûr que tu cherches au bon endroit. Cette classe ne ressemble à rien de connu dans la galaxie. Toi : Jérémie tu n’a jamais touché à ce code ? Jérémie : Non seulement jamais touché, mais c’est la première fois que je vois ça. Ça fait peur. Farid (fait pivoter et rouler sa chaise jusqu’à la table de gauche) : Faites voir ? Jérémie : Ça te dit quelque chose ? Un nom, une époque ? Farid : Rien du tout. Toi : Audrey, est-ce que tu peux revenir au début du fichier, qu’on prenne connaissance du code complet ? Audrey : Bien sûr. Jérémie : … Farid : Oh là là… Jérémie : Ouch… Farid : Ce serait pas du code de Jean-Sébastien ? Jérémie : Jean-Sébastien… Farid : Qui est venu en stage il y a trois ans. En juillet. Tout le monde se moquait de son prénom. Jérémie (scrute le code en plissant les yeux) : Ça me ne dit rien du tout. Farid : Petit, blond, lunettes rondes. Jérémie : Non, je vois de qui il s’agit, je te parle du code. Toi : Bon. Ça n’a pas d’importance. Est-ce que ce code est appelé quelque part ? Jérémie : Audrey, est-ce que tu peux rechercher YearTaxParameter
dans tout le projet ? Audrey : Bien sûr. Jérémie : Non… Aucune référence. Farid : Évidemment, c’est dynamique. Le code fait de la réflexion pour trouver la classe. Jérémie : Si c’est le cas, alors c’est de la réflexion non-standard. Audrey : Tout s’explique. Ça fait deux jours que je galère sur ce truc. Jérémie : Est-ce que tu peux renommer cette classe, par exemple, FooBarQux
et refaire tout le build ? Audrey : OK. Farid (fait pivoter sa chaise et retourne à son écran) : Bon, ben on peut passer à autre chose en attendant.
Est-ce l’habitude de fouiller dans le noir des heures durant, ou bien une sorte de sixième sens qui se développe à leur insu, toujours est-il qu’après un certain temps passé dans la structure, la plupart des intervenants sont capables de détecter presqu’instinctivement qu’un élément n’y a pas sa place. Dans le cas qui se présente — un container blanc, de taille conséquente, posé verticalement au milieu du hall central — la détection est immédiate, tant l’objet contraste avec son environnement.
- Une chance que la porte du container soit sur le dessus. - En espérant qu’elle ne soit pas verrouillée. - On va escalader par la droite et voir ce qu’il y a là-dedans. - OK mais on ne touche à rien. - Fais-moi la courte échelle.
Audrey lance l’application, entre son login et son mot de passe. Menu Paramètres. Ecran blanc. Rien ne se passe.
Audrey : C’est bloqué. Je ne peux pas retourner au menu. Jérémie : M…
L’agent se hisse sur le sommet du conteneur et ouvre la porte. « Elle s’ouvre ! » Il se faufile à l’intérieur du conteneur et laisse retomber la porte sur le côté. Le conteneur vacille, puis bascule. Un cri étouffé. - Tout va bien ? Le plafond du troisième étage, ansi qu’une partie du quatrième étage, s’écroulent sur le conteneur. Évacuation.
Jérémie : OK. Stop. On revient en arrière. Undo sur le renommage. Audrey : Tu vois le problème, Jérémie ? Farid : Le problème, c’est Jean-Sébastien. Le gars faisait les trucs à sa manière. Audrey : C’est peut-être lui le problème, mais il n’est plus là. Donc qu’est-ce qu’on fait ?
On frappe à la porte. Une personne des services généraux entre, les bras chargés de huit boites de néons blancs. Elle dit : - Bonjour ! Je peux poser ça là ? Je vais chercher un escabeau et je reviens.
Elle pose les boites sur la table et ressort du bureau en lançant : - Il y en aura pour 10 minutes. (à 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