Le demi-cercle (épisode 39 -- Mutation)

- Bonjour à tous !

Maria entre dans le bureau, et pose son ordinateur sur la table, ainsi qu'une liasse de feuilles A4 comportant des copies d'écran, pour certaines marquées au feutre rouge. Elle semble plutôt de bonne humeur. Elle s'assoit et dit en souriant : - 15 heures, comme convenu. Charlène n'est pas disponible aujourd'hui, mais ça nous empêche pas de démarrer.

Tu la remercies pour sa ponctualité sur un ton un peu formel. Maria observe ce qui est projeté sur le mur du fond — une page de code sans intérêt — puis elle demande : - Jérémie, est-ce que tu peux afficher la liste des stories du sprint en cours ? Je suppose qu'il y en a sur lesquelles ce serait utile qu'on revienne ? C'est à vous de me dire.

Jérémie bascule de son EDI vers le gestionnaire de tâches. Audrey commente la liste, en mentionnant, parmi les stories qui sont en cours de réalisation, celles qui se trouvent en attente d'un complément d'information ou d'une décision. Farid et Hugo travaillent en binôme sur une tâche de refactoring qu'ils étaient supposés avoir terminé ce matin. Tu les interroges du regard. Hugo chuchote : - On a pratiquement terminé, on dépose le code et c'est bon.

La session commence.

Maria : OK. Dans cette liste, je pense que la plus urgente c'est la 478, qui définit les critères d'export en fonction de la situation de l'entreprise. Hugo : C'est parfait, parce que justement on a des questions. Audrey : Euh, avant de poser des questions, est-ce qu'on pourrait déjà rappeler la story, et examiner les tests métier ? Hugo : Ah oui, bien sûr. Maria : Allons-y. Jérémie : Je me branche sur l'environnement de test. Maria : OK… Prends le compte administrateur niveau 2. Jérémie : C'est lequel ? Maria : AdminL2. Mot de passe : charabia. Farid : Je ne savais pas qu'il y avait un compte AdminL2. Il y a un compte pour chaque niveau ? Maria : Exact. Farid : C'est pratique. Maria : J'espère que les données n'ont pas bougé depuis la semaine dernière… Jérémie : J'ai envie de recopier la base de tests en dev. Parce que dans cet environnement on n'a pas la dernière version du code. Audrey : On peut déjà vérifier le comportement initial du module d'export, avant modif pour la story 478. Maria : Oui. Donc tu te connectes. Tu prends le menu exporter, dans le volet situation, tu sélectionnes création. Jérémie : Oui mais non : dans cette version, on ne peut que consulter la situation, pas en sélectionner une. Maria : Alors est-ce qu'on peut passer à votre version ? Vous avez fini cette partie là, n'est-ce pas ? Audrey : Je pense que ça vaudrait le coup qu'on fasse un passage sur l'export classique, dans lequel on ne tient pas compte de la situation. Maria : Ah oui, je vois. Donc dans ce cas, tu lance un export : tu arrives dans la page des critères… Voilà. Tu vois que les critères portent seulement sur la période, le niveau de profondeur de rubriques, et la liste habituelle des rubriques à exclure. Jérémie : OK. Je saisis une période, un niveau, aucune exclusion, je valide. Maria : Farid, est-ce que tu peux regarder le résultat sur ton environnement en local ? Tu lances un import, à partir du répertoire de l'environnement de test. Farid : Je fais ça. Attends je crée d'abord une société… OK. Je pense que ça marche. Maria : Oui ça marche. C'est en production. Maintenant, le changement qui est demandé c'est : lors de l'import, il faut pouvoir sélectionner la situation de l'entreprise pour laquelle on exporte. En fonction de la situation, on a des critères différents. Hugo : C'est justement là qu'on a des questions. En tout cas moi, j'ai au moins une question. Maria : Vous avez vu la liste des critères par situation ? C'est dans la pièce jointe à la story. Hugo : Tout à fait. Et on a commencé à implémenter ça. Mais ce n'est pas complet. Maria : Pas complet, qu'est-ce que tu veux dire ? Hugo : Lorsque la situation est "reprise", les critères possibles pour l'export ne sont pas précisés. Maria : Mais si, ce sont les mêmes critères que dans la situation par défaut, c'est à dire comme la version précédente. Hugo : Ce n'est pas précisé. C'est pour ça que je posais la question. Maria : OK. Hugo : Y compris le critère : rubriques à exclure de l'export ? Maria : Oui, y compris celui-là. Hugo : Mais dans ce cas là, ça ne marche pas. Maria : Comment ça, ça ne marche pas ? Hugo : Si la situation est "reprise" on s'attend à ce que certaines rubriques essentielles soient renseignées. Toutes celles qui sont préfixées par 1. Qu'est-ce qui se passe si elles ont été exclues dans l'export ? Jérémie : Dans ce cas l'import dans la base de la nouvelle entreprise produira un budget incohérent.

Maria réfléchit.

Maria : Effectivement ce n'est pas prévu. Audrey : Est-ce qu'on pourrait changer la règle ? Si la situation est "reprise" le critère "rubriques à exclure" est indisponible. Maria : Impossible, parce que ça signifie que dans ce cas on exporte la totalité des budgets, ce qui va à l'encontre même de l'idée d'effectuer une reprise. Hugo : Ah.

Le smartphone de Maria fait un bip. Maria lit son smartphone. Une minute s'écoule.

Maria : Bon, je ne sais pas. Il faut que j'en discute avec le client référent. Est-ce qu'on pourrait avancer sur autre chose en attendant ? Toi : Ah ben non…

Ça t'a échappé. Interjection. C'est quoi cette réponse ? Explique toi.

Maria : Quoi, non ? On est bloqué : il me faudrait une confirmation d'un client. Toi : Pardon, je ne suis pas clair. L'idée de ta présence ici, c'est de nous aider à terminer les stories et éviter d'avoir à poser le travail et à passer à autre chose. C'est pour ça que je réagis… Jérémie : Est-ce que c'est indispensable pour la prochaine version en production d'avoir un export avec critères variables en fonction de la situation ? Maria : Indispensable. On a des clients qui nous demandent cette fonctionnalité depuis un an. Et je suis sûr que ça fait partie du package sur lequel Lionel s'est appuyé pour gagner son nouveau contrat. Jérémie : Dans ce cas il faut résoudre ce point. Maria : Je sais bien qu'il faut résoudre ce point ! Jérémie (pose les coudes sur la table, et le menton sur ses mains croisées): OK. Audrey : OK. Pas de panique. Je propose qu'on découpe cette story. Maria : C'est à dire ? Audrey : On crée une story 479. "Export avec sélection des critères dans le cas d'une reprise." Et pour la 478, on change le titre en "Export avec sélection des critères sauf dans le cas d'une reprise". Et on change la règle. L'option "reprise" n'est pas sélectionnable dans le menu "situation". Maria : Ça ne change pas le problème. Ça ne fait qu'ajouter une story. Hugo : Ça change tout, au contraire, parce que dans ce cas, je peux vous annoncer que cette nouvelle story 478 est déjà pratiquement terminée en développement. Jérémie : Ce qui veut dire qu'on peut la valider rapidement, et l'inclure dans la prochaine version en production. Maria : Ça ne résoud pas vraiment mon problème… Jérémie : Mais ça nous évite de découvrir tous les défauts le plus tard possible. Maria : Je ne vois pas comment. Farid : Oui, moi non plus. Qu'est-ce que tu veux dire par : tous les défauts ?

Jérémie (se lève, prend un marqueur et commence à dessiner sur le tableau blanc) : c'est simple. Suppose qu'on essaie de faire toute la story d'un bloc, c'est à dire qu'on attende ton complément d'info sur le cas d'une reprise. Suppose que la story contienne disons, 10 défauts, qu'on ne voit pas encore.Maria : Il manquerait plus que ça. Jérémie : Suppose. On finit donc la 478, et vous la passez en recette. Vous trouvez les défauts. On les corrige. Mais ça prend trop de temps, et on rate l'échéance de la mise en production.Maria : Hors de question. Jérémie : Bilan des courses : story 478, 0% done. Maria : Au risque de me répéter, Jérémie, je te dis que cette feature est essentielle. Jérémie : J'entends. Maintenant, suppose qu'on découpe la story comme suggère Audrey. Exactement comme vous faites en backlog grooming. Maria (croise les bras, et se concentre sur le tableau blanc) : Soit. Jérémie : On développe la 478. Elle comprend 6 défauts. Vous la passez en recette, vous trouvez les 6 défauts. On corrige les défauts.Maria : Soit. Jérémie : Ensuite, comme vous avez eu le temps de revoir la règle de gestion sur la 479, on développe la 479. On produit 4 défauts. Vous la passez en recette. Vous trouvez les 4 défauts, et on les corrige.Maria : Et on loupe quand même la date de mise en production. Jérémie : seulement pour la story 479. Bilan des courses : story 478 100% done, story 479 : 0% done. Farid : Ah oui. C'est évident. On a corrigé 6 défauts au plus tôt. On a livré 60% des fonctionnalités promises. On s'est planté sur 40%. C'est mieux. Maria : Je comprends. Mais s'il n'y avait pas de défauts, ce découpage n'aurait aucun intérêt. Jérémie : Ce serait mieux s'il n'y avait pas de défauts. Mais il y aura des défauts. Il suffit de regarder le reporting du projet sur les 5 dernières versions. Maria : Tu me vois dire à Lionel : "on n'a que 60% des fonctionnalités, mais au moins on a pu trouver les défauts plus rapidement." Tu parles d'une consolation. Jérémie : C'est toujours mieux que : "on a 0% des fonctionnalités, parce qu'on n'a pu trouver les défauts qu'au dernier moment." Maria : Tu en as de bonnes. Et si tu devais justifier ce choix de découpage comment tu lui présenterais la chose ? Audrey : "Est-ce que tu préfère 60% des fonctionnalités à coup sûr ? Ou 100% des fonctionnalités, peut-être ?" Maria : Ha ! Avec son goût du risque il serait capable de prendre l'option 2. Jérémie : Ouch. Mauvaise réponse. Audrey : Oui. Et nous on prendrait du bug fix en urgence pendant une semaine. Maria : Découpons cette story et avançons.

(à 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 33 -- Fabrication 34 -- Observation 35 -- Perturbations 36 -- Conclusions 37 -- Nouvelle Donne 38 -- Transaction