Le couteau

Dim 02 mai 2010

Une petite nouvelle Polargeek. Inspirée par un certain CyberJ, lors des Rencontres Django-FR. Merci à lui.

Ça avait commencé comme un très mauvais mal de crâne. Un peu sourd, un peu lancinant. C'est toujours à ce genre de signe que je reconnais l'arrivée du taf de merde. Tu peux appeler ça comme tu veux, une intuition ou une coïncidence... Toujours est-il que je n'étais pas surpris quand ma chef de service a toqué poliment à la porte de mon bureau...

"Toujours aussi peu de lumière ici..."

Elle savait que j'aimais le noir, mais elle ne pouvait jamais s'empêcher de le faire remarquer. En appuyant sur l'interrupteur pour allumer les néons. En vain.

"Vous avez encore enlevé les fusibles ?"

J'avais fait mieux. J'avais enlevé les néons de leur support. Et à la benne.

"N'hésitez pas à ouvrir les stores, si ça vous parait trop sombre."

Fine plaisanterie. Si j'étais à la cave, c'est aussi parce qu'il n'y avait aucune fenêtre et que personne d'autre que moi n'aurait voulu de ce bureau.

"Bref", fit-elle en prenant place.

Ce "bref" là, je le connaissais. Il n'y avait que deux raisons pour qu'elle daigne descendre à la cave.

  1. vérifier que j'étais toujours vivant
  2. me demander d'aller fouiller la merde

Si elle m'avait posé une question du style "alors, comment allez-vous aujourd'hui ?" j'aurais su que j'étais dans le premier cas.

"Qui est-ce qui vous a causé des misères ? L'équipe du projet Pandora ?"

Elle eût l'air un peu interloquée. Elle commença un "Comment êtes-vous au courant pour..." qui mourut dans sa gorge. Évidemment qu'elle savait comment. Je savais tout. À peu près. J'avais repéré un taux anormal de trafic dans les équipes du projet, notamment une branche assez centrale du programme. Tous les développements avaient été gelés, et les dévs en mal de boulot avaient commencé à visiter des sites sans un rapport flagrant avec leur vrai travail.

"Oui, bon... je n'ai pas grand-chose à vous cacher, alors autant y aller franco. Un énorme bug de régression a été détecté sur le projet Pandora. Lorsqu'on a constaté l'étendue des dégâts, il était déjà trop tard... Ce bug a de multiples incidences sur l'ensemble de la chaîne de traitement. En gros..."

En gros j'avais compris qu'elle était dans une merde noire.

"En gros on a pris six mois dans la vue parce que des codes d'erreur sont parfois pris pour des données. Le genre... Ariane 5, quoi."

Ariane 5. L'apocalypse selon Sainte Ada. Des données de vol sous forme d'entiers, des codes d'erreurs pris pour des données de vol et la fusée qui valait des milliards qui commence à imaginer que la Terre est en haut et le ciel en bas. Demi-tour brutal. Sans air-bag, le crash.

"Vous voulez que je redresse votre fusée, c'est ça ?"

Elle eût un temps de pause. Elle répétait dans sa tête ce qu'il fallait me dire.

"J'ai besoin d'un oeil extérieur au projet pour deux objectifs: écrire les tests qui nous aideront à boucher la faille et... trouver le coupable."

Ma parole. On me prend toujours pour le John McClane de service, hein ? Le schnock qui vit dans sa cave aurait-il encore assez de mordant pour réparer les âneries des jeunes loups aux dents longues ?

"Je... je ne veux pas d'une vengeance, croyez-le bien. Mais... plus haut..."

Plus haut, oui, j'imaginais ce qui se disait. On avait dû prendre toute la mesure du désastre et il fallait trouver un coupable, si possible idéal. Voilà ce que c'était de faire rentrer des cohortes de stagiaires tellement tendres que si on appuie sur leur code, il en sort du lait. On valide à peine leur niveau et on leur signe un contrat en or pour les intégrer dans des équipes de prod, croyant qu'en multipliant les cerveaux on divise le temps de dév. Donc les coûts.

"Vous connaissez mes méthodes..."

Oui elle les connaissait. Elle se leva et repartit dans ses nuages, là-haut, là où il paraît que le soleil brille.

J'avais une petite journée devant moi pour :

  • récupérer le code source avec son historique,
  • retrouver dans le soft de la DRH les entrées et les sorties de personnel dans l'équipe.

La première partie était assez facile. Tout était centralisé dans un CVS dont les accès était maîtrisés par bibi. Pour le machin de la DRH, il fallait légèrement ruser. Un coup de fil.

"Bonjour mademoiselle... Je travaille au contrôle de gestion et j'aimerais savoir... est-ce que Nadine travaille encore ici ? Non ? Pas de Nadine ? Mais c'est quoi ce bazar ?... Je constate qu'on ne met jamais à jour notre base par rapport à ceux de la DRH, c'est ça ? Bon, allez, je veux tout l'historique de vos entrées et sorties, hop ! que ça saute ! Comment ? impossible ? vous ne savez pas faire ? je vois que la transmission des savoirs, c'est toujours le cadet de vos soucis. Bon, allez, donnez-moi vos identifiants, je ferai l'extraction moi-même. Oui je note. Merci. Oui. D'accord. Promis je ne dirai rien à votre direction. Mais vous avez de la chance. Beaucoup de chance."

Dans le sac.

Tout y était, les noms, les emails, la date d'entrée, et même quelques annotations à la limite de la diffamation. Classique. Et surtout... les affectations aux équipes et le nom des responsables.

J'avais prévu mon plan de bataille, ordonné mes troupes. Restait plus qu'à lancer l'offensive. Mais demain.

Pour une fois, j'étais monté au rez-de-chaussée. La machine à café. Le café n'est pas meilleur que dans mon antre, mais y'a plus de passage. Et qui dit passage, dit discussion. Et qui dit discussion, dit confidences. J'avais besoin d'en savoir plus sur Pandora et ses équipes.

Il a fallu que j'attende un bon moment avant que ça donne quelque chose. Mais je suis patient. Et discret. C'est bien simple, pour certains, je fais partie des meubles. Ou des vestiges. Comme une vieille UC abandonnée au sommet d'une armoire. Personne n'y fait attention.

Deux chefs, en provenance de l'étage du dessus. Jarmand et Pianma. La machine qui ne rendait plus la monnaie. Quelques persiflages habituels, le décolleté de la stagiaire ou les variations du baromètre. Et puis, un nom, lâché, celui d'un chef de projet. Je branchais mes oreilles et appuyait sur "REC".

"Non mais tu l'as vu le Johan ? Réunions debout, baballe dans les mains ? C'est n'importe quoi... Imagine qu'un client débarque en pleine séance de ballon prisonnier ? Ou pire, quand ils jouent aux cartes, là ?"

Bien évidemment. Scrum. Le planning poker, le Scrum meeting, etc. Nos ingénieurs sont parfois très conservateurs. Je ne connaissait pas personnellement ce Johan, mais il était en train de se tailler une belle réputation auprès des chefs de projet classiques. Sa fiche apparut dans mon crâne, encore toute fraîche : Johan Charpentier, 28 ans, entré il y a à peine quatre mois, une équipe de six personnes sous ses ordres. Enfin, pas tout à fait sous ses ordres, il joue au Scrum Master depuis qu'il est arrivé, et essaie d'évangéliser les ingénieurs à la ronde.

"Le pire c'est qu'il essaie de récupérer mes développeurs. Déjà, le mois dernier, la DRH m'a envoyé un nouveau pour compenser le départ de Picard."

Oui, ça j'avais vu. Picard était un excellent élément, pour autant que je sache. Jarmand le pressait comme un fruit bien mûr depuis trop longtemps, récoltant les succès sur son dos. En sus, il tournait en rond dans ses projets depuis un moment. Pas le choix : soit on lui donnait une promotion (mais c'était trop cher), soit on le changeait d'herbage. Il avait intégré l'équipe de Johan. En échange, on avait fait rentrer un newbie de base. Marché de Gascon. Toute une formation à reprendre.

"Et il paraît que Picard adore cette méthode de hippie, là."

Évidemment qu'il adore. Bon. La jalousie, ça peut être un mobile intéressant.

Bon, assez joué les commères, il fallait que j'entre dans le code. Je sortais le portable et je commençais une analyse du code et du fameux bug en cours. Algo assez bien pensé, mais très mal implémenté.

Au bout de trois-quatre heures, j'avais globalement cerné le problème. L'embêtant avec ce dépôt CVS centralisé, c'est qu'à peu près n'importe qui pouvait committer n'importe comment. Pour peu qu'on soit assez peu soigneux, il était tout à fait possible de dézinguer le travail d'une autre équipe et c'est évidemment ce qui s'est passé. Machin qui écrase la version de Truc, alors que la version de Truc avait été précédemment récupérée par Bidule, qui fait ses modifs à partir de cette version et ré-écrase celle de Machin, et ainsi de suite. On ajoute à ça l'incapacité chronique des ingénieurs à documenter correctement leurs modifications et "d'oublier" de rajouter les fameux tests unitaires qui valident leurs modifs et on a un beau paquet de spaghettis.

J'ai un peu galéré avant de dénouer le paquet de nouilles, mais j'ai finalement réussi à isoler le bug pour de vrai. Écriture du test qui valide le bug fix. Je committe avec mon login "le cavalier noir" et j'envoie un mail à la chef.

La première partie était jouée. Aux ingénieurs ingénieux de boucher le trou. C'était à eux de jouer, pas à moi. Mais au vu du sac de noeuds dans leurs développements, je leur souhaitais bien du plaisir.

Restait la seconde partie. Trouver celui qui avait pourri la codebase. C'est là que le cavalier noir sortait son glaive magique, son arme absolue, l'ultime couteau suisse du geek au moment de dénouer le code gordien.

Pendant que ça moulinait, j'aiguisai ma lame, aussi fin que possible. Une tasse de café éthiopien. Acidulé à souhaits. J'entendais le chant du swap. Ça faisait quelques milliers de commits à poulouter. Une autre tasse, moins forte.

Puis la commande finit son oeuvre.

J'étais sûr de trouver mon coupable. Certain de trouver le committer. J'avais déjà mon idée sur la question. Un chef de projet jaloux, un développeur trop tendre, un incompétent notoire, un pirate Chinois... Celui-ci ou un autre.

Moins d'une demi-journée plus tard, j'eûs le soulagement d'avoir sous les yeux le nom du committer incriminé. Johan Charpentier était innocent. Ses ingénieurs aussi. Il pourrait continuer à jouer à la balle tandis que Jarmand irait pointer son nez chez Paul Lemploi.

"Comment savez-vous que c'est Jarmand ?"

J'en étais sûr, j'en avais la preuve. Elle n'avait pas vraiment envie que je détaille ma technique.

"Vous avez vraiment envie que détaille ma technique ?"

Un silence.

"J'ai besoin d'une preuve formelle, un écrit, quelque chose qui ne pourrait pas être remis en question, au moment du licenciement."

C'était pourtant si simple. Après tout, il n'y avait qu'une commande à connaître.

$ git bisect