Le demi-cercle (épisode 33 - Fabrication)

Programming is mostly a process of adaptation partially automated by swarms of small bots that perform tasks such as interface evolution. All software development takes place on the common corpus of source code by a mob of volunteers and developers paid by companies who reap benefits from the source base. Developers work primarily on projects of particular interest to them. Allowing people to choose their domains of expertise encourages artistry and craftsmanship. Mentoring circles and other forms of workshop are the mainstay of software development education. There are hundreds of millions of programmers.

Richard P. Gabriel & Ron Goldman

Most software today is very much like an Egyptian pyramid with millions of bricks piled on top of each other, with no structural integrity, but just done by brute force and thousands of slaves.

Alan Kay

You seem to not be depending on "@angular/core". This is an error.

Il règne un silence studieux. Tu farfouilles dans les anciennes versions de l’application, à la recherche d’un écart entre le code actuel du module compensation et celui d’une version précédente. Ecart introuvable. Tu te tournes vers Jérémie, dont le regard semble plongé dans le vide. Tu demandes : - Jérémie, est-ce qu’on a toujours utilisé ce gestionnaire de sources ou bien est-ce qu’il y a des versions antérieures à 2012 qu’il ne contiendrait pas ?

Mais Jérémie, toujours plongé dans sa réflexion, ne répond pas.

Audrey se lève de son siège et dit : - Il fait beau ! Si on allait manger au square ?

Hugo répond : - Avec plaisir ! J’ai vu que la boulangerie du coin fait des bons sandwiches.

Audrey ouvre un tiroir, en sort un couteau suisse qu’elle montre à Hugo : - Mieux que ça, on peut leur acheter du pain, et passer à la superette prendre de quoi pique-niquer.

Tout le monde est partant. Vous sortez, prenez par l’escalier, marchez vers la boulangerie. L’air est doux. Le ciel est bleu. Vous achetez deux baguettes à la boulangerie, passez à la superette, puis marchez vers le square.

Jérémie sort de sa torpeur :

Jérémie : On n’a pas gagné du temps : on a simplement évité d’en perdre plus… Toi : De quoi tu parles ? Jérémie : Je repense à ce que nous a dit Oleg l’autre jour. Toi : On a parlé de beaucoup de choses. Je me souviens plus vraiment. Sois plus précis. Jérémie : Oleg me demande : où est-ce que vous perdez du temps. Réponse : lorsqu’on tombe sur une conception de story ambiguë, incomplète, incohérente, et qu’il faut revoir cette conception. Toi : Oui. Ça y est, je me rappelle. Jérémie : Mais quand on revoit cette conception, on gagne du temps, puisque si on ne la revoyait pas, on poursuivrait le développement de cette story, on la livrerait en production et là on se récupèrerait un incident, voire plusieurs, liés à cette story. Toi : Voilà. Jérémie : C’est comme si on était dans une chaîne de montage, avec un traitement à faire, sur un assemblage qui arrive en entrée. Audrey : Je ne suis pas sûre qu’on puisse comparer le développement à du travail sur une chaîne de montage… Jérémie : Et que l’on s’aperçoit que l’assemblage n’est pas correct, tout simplement parce que la fabrication du produit a été mal pensée, ou pas pensée jusqu’au bout. Farid : Qu’est-ce qu’on fait dans ce cas-là ? Jérémie : Dans ce cas-là, il vaut mieux arrêter la chaîne et inspecter ce qui s’est passé sur la conception, plutôt que d’assembler des produits défectueux qu’il faudra ensuite reprendre. Hugo : Sauf qu’on ne peut pas toujours. Jérémie : En l’occurrence, qu’est-ce qui nous en empêche ? Hugo : Tu imagines, s’il fallait s’arrêter à chaque fois qu’il y a un petit problème de conception sur une story ? On n’en finirait pas ! Charlène et Maria serait obligées de passer toutes les deux heures. Jérémie : Et alors ? Hugo : Et alors ça mettrait le désordre dans tout le reste de leur activité. Je ne sais pas si tu as remarqué, ou peut être que tu ne t’en rends plus compte depuis que tu travailles ici, mais tout le monde est occupé à 150%. Et Maria, eh bien elle n’a pas une heure à nous consacrer par semaine… Audrey : Forcément, avec tous ces projets en retard… haha only serious, comme dit l’autre.

Vous entrez dans le square. Il reste un banc de libre. C’est un peu juste pour cinq, mais Jérémie veut bien rester debout, ainsi qu’Audrey qui se tient un peu à l’écart le temps d’une cigarette. Farid et Hugo préparent des sandwiches.

Farid : C’est sûr, ça marcherait un peu mieux si on avait des spécifications complètes, au lieu de stories sur lesquelles il reste plein de questions. Audrey : Et où est-ce que tu as vu des spécifications complètes ? Tu connais quelqu’un dans la boite qui pourrait en écrire ? Jérémie : Il y a bien Declère, il travaille pour l’appli Parady. Il écrit bien, techniquement. Mais bon, il ne connaît pas du tout le fonctionnel d’XXL. Farid : Tu crois que la direction pourrait le faire venir chez nous ? Jérémie : Aucune idée. Audrey : Excusez-moi de vous interrompre dans vos projets de réorganisation, mais en quoi est-ce que produire des spécifications écrites va résoudre notre problème d’incomplétude de stories ? Farid : Eh bien, c’est simple : on ne démarre une story en développement qu’à partir du moment où elle est à l’état valide, complète en quelque sorte. Audrey : Et tu crois que parce qu’on change notre process, les stories vont nous arriver complètes, comme ça ? Farid : Peut être pas au début, mais si on bloque le développement des stories incomplètes, ils vont finir par s’adapter et faire attention à ce qu’ils font. Audrey : Alors là, franchement je crois que tu rêves. Farid (tend un sandwich à Audrey) : Ah oui ? Tiens, voilà ton sandwich. Bon appétit. Audrey (prend le sandwich) : Merci…

La conversation est en pause. Le vent joue avec le papier des emballages. Pigeons, corbeaux et moineaux se disputent les miettes de pain. Les corbeaux font fuir les pigeons, mais ils craignent les humains. Les pigeons sont plus audacieux, et ne s’envolent pas au premier bruit un peu violent. Quant aux moineaux, ils sont laissés pour compte.

Audrey (parle la bouche pleine) : Che qui va se pacher dans che cas, ch’est que nous allons rechevoir des chtories incomplètes, et que nous allons les botter en touche. Farid : Précisément. Audrey : Ensuite « ils » comme tu dis — en l’occurrence c’est plutôt « elles », puisqu’on parle de Maria et de Charlène — vont revoir leur copie. Et il manquera encore quelque chose. Farid : Peut être, mais il manquera moins de choses. Audrey : Et, comme il nous faut des stories complètes, on re-bottera en touche. Farid : Voilà. Le process nous empêchera de nous engager sur des stories incomplètes. Audrey : Ensuite, le directeur des ventes, à qui on aura dit : « la recette de la prochaine version est bloquée » ou « n’inclura pas la fonction trucmuche » descendra voir Maria, et lui demandera ce qui se passe. Farid : Et alors ? Audrey : Et alors, Maria dira : « l’équipe botte en touche », et le directeur des ventes lui demandera de nous demander d’arrêter de botter en touche, de mettre nos réserves de côté, parce qu’on est en sacrément en retard, et d’avancer. Et là, tu feras quoi ? Farid : Comment tu sais que c’est ce qui va se produire ? Jérémie : Parce que c’est ce qui s’est déjà produit. Et plusieurs fois. Audrey a raison. Farid : Ah bon ? Jérémie : Pourquoi est-ce que tu penses qu’on est passé à l’Agile ? Farid : Mais je n’en sais rien. Jérémie : Exactement pour ça : parce que les choses n’allaient pas assez vite.

Pause à nouveau.

Hugo (se lève et fait quelque pas): Dans ce cas, on n’a qu’à continuer comme on fait actuellement. Jérémie : C’est à dire ? Hugo : On constate un trou dans la raquette, mais on ne peut pas bloquer la story, donc on continue, et on la déploie en recette… Audrey : Et en recette, la story est déclarée invalide : la règle XYZ ne marche pas. Il faut la refaire. Farid : Et voilà. Alors qu’avec une spéc’ écrite, on pourrait dire : cette règle XYZ elle n’était pas spécifiée. On ne fait pas ce qui n’est pas spécifié. Pas notre problème. Audrey : Alors là je t’arrête, comme dit Jérémie. Farid : Tu m’arrêtes, et pourquoi ? Audrey : On fait généralement bien plus que ce qui est spécifié quand on développe. Farid : Ben non. Audrey : Ben si. Je te donne un exemple. Prends la story 425, celle qui parle de recherche sur critères dans les budgets. C’est toi qui l’a codée. Farid : Oui. Audrey : Est-ce que tu as mis ce qu'il fallait dans ton code pour prévenir des injections SQL ? Farid : Bien évidemment, cette question ! Audrey : C’était dans la story ? Farid : Je n’ai pas besoin que ce soit dans la story ! C’est la règle. Audrey : Où est-ce que cette règle est spécifiée ? Je te mets au défi de la trouver dans toute la doc. fonctionnelle ou technique du projet. Farid : Mais je connais cette règle, je n’ai pas besoin qu’on me la spécifie ! C’est du bon sens. Audrey : Comment tu l’as apprise, cette règle ? Farid : Dans un projet, il y a longtemps, quand je débutais, figure toi. Audrey : Est-ce qu’on t’a spécifié cette règle ? Dans un document écrit ? Farid : Non, c’est le tech lead qui m’a montré ce qui se faisait. Où est-ce que tu veux en venir ? Audrey : Donc, quand tu connais le domaine auquel appartient la règle, ça va de soi, c’est du bon sens. Mais quand tu ne connais pas bien le domaine, il faut qu’on t’écrive. Farid : Eh bien oui. Je ne vois pas le problème. Jérémie : Audrey a raison. Je ne pense pas que se faire transmettre des documents de spécification soit la solution. Ça ne fait que ralentir encore plus le process. Audrey : La solution, on la connaît. Toi : Et c’est quoi ? Audrey : On travaille avec Charlène et Maria. Hugo : Oui mais elles n’ont pas le temps. Retour à la case départ. On n’avance pas. Jérémie : On a au moins mis le doigt sur quelque chose. Hugo : À savoir ? Jérémie : Ce qui nous bloque, ce n’est pas forcément des problèmes de programmation à proprement parler. Hugo : Et donc ?

Le vent pourchasse un papier d'emballage dans l'allée. Hugo le poursuit pour le récupérer. Tu rassembles tous les papiers en vue de les jeter dans la poubelle à l'entrée du square.

Audrey : C’est ta conclusion, Jérémie ? Jérémie : Je n’ai pas de conclusion à formuler. Seulement de plus en plus d’incertitudes. Audrey : Et qu’est-ce qu’on fait, en général, quand on a des incertitudes ? Jérémie : Ça va de soi, il me semble : on mesure. Audrey : Et on va mesurer quoi ? Jérémie : Le temps perdu, évidemment. Farid : Et comment tu comptes faire ? Jérémie : Mais vous allez m’aider, j’espère. Audrey : Dis nous seulement ce qu’il faut faire.

La conversation glisse sur un autre sujet. Vous finissez vos sandwiches, et repartez en sens inverse.

(à 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 28 -- Embardée 29 -- Aménagement 30 -- Interruptions 31 -- Normalisation 32 -- Outsiders