CT P RE SENT S L’art de développer en agile Sylvie PONTHUS-VIOLLAND octo.com I blog.octo.com THERE IS A BETTER WAY AFIN D’APPRENDRE LE JAPONAIS Derrière OCTO, il y a des centaines d’Octos, et autant de talents cachés… Sylvie Ponthus- Violland À travers cet ouvrage illustré, la collection OCTO Presents tourne ses projecteurs sur la talentueuse Octo Sylvie PonthusViolland. Développeuse, chef de projet, coach agile, Sylvie se passionne pour le développement de logiciels utiles, fiables et agréables à utiliser. Afin de transmettre encore mieux ses convictions comme ses apprentissages, elle décide d'écrire un livre qui raconterait de l'intérieur un projet agile. Les illustrations sont de Aryana Pezé. Aryana a publié avec OCTO “À la découverte du DevOps !”. octo.com I blog.octo.com O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D Préface De Christophe Thibaut Technical Advisor et Coach Technique En 2015, Dave Thomas, développeur, co-auteur du précieux guide "The Pragmatic Programmer", co-signataire du Manifeste Agile déclarait : "L'Agile est mort". 3 Cette opinion, dans la communauté de celles et ceux qui depuis plus de 10 ans défendaient, illustraient et implémentaient XP, Scrum, ou leurs variantes, ne déclencha pas ou peu de controverse. Pourtant une idée qui meurt, c'est une idée dont on ne parle plus. Or aujourd'hui, tout le monde "parle" l'Agile. Vous ne rencontrerez pas une seule personne impliquée dans le développement d'applications qui ne connaisse pas le terme "user story" par exemple. L'agilité semble s'être diffusée partout, et pourtant sa mise en œuvre semble fort rare. On dira que les idées agiles ont subi la loi de l'étalement de la confiture : plus la tartine est grande, plus la couche est fine. On dira que l'agilité, comme le bon sens, est la chose du monde la mieux partagée. Et franchement, c'était inévitable : quelle entreprise revendiquerait, en 2001, en 2015 comme en 2022, de ne pas être agile ? L'agilité, dans un grand nombre d'entreprises, n'est pas morte, au contraire : elle est tout juste embryonnaire. La démarche décrite en substance par le Manifeste Agile est encore très peu répandue. Certes tout le monde "parle" l'Agile, mais seulement parce que le vocabulaire des méthodes agiles s'est répandu comme se répandent les idées, les mèmes, les modes. Une communauté grandissante, riche et vivante, combinée aux forces de l'industrie du conseil, et naviguant à la vitesse de la lumière sur un réseau de partage d'information universel et gratuit : comment aurait-il pu en être autrement ? Le livre de Sylvie est le récit d'une naissance : c'est l'histoire d'une personne, puis d'une équipe, qui découvre et met en place une approche agile non pas en lisant des livres ou en recevant la formation Scrum, mais en essayant par elle-même de nouvelles idées. Ce livre est l'histoire de cette lutte : essayer de nouvelles idées, d'abord chez soi, dans l'apparent confort du "temps libre", puis en équipe, à contre-courant des "forces de rappel" de la culture prégnante, puis dans l'entreprise elle-même. Le Manifeste Agile, avec ses quatres préférences et ses douze principes, est un des documents qui a le plus véhiculé les idées agiles dans les entreprises. On l'a cité, expliqué, traduit, réduit maintes fois, et reformulé parfois. Il m'a toujours semblé que la phrase la plus importante de ce manifeste est la toute première : O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D Nous découvrons comment mieux développer des logiciels par la pratique et en aidant les autres à le faire. L'histoire de Charlotte, l'héroïne que nous suivrons ici, c'est la saga d'une personne qui s'est mise en tête de mieux développer des logiciels par la pratique et en aidant les autres à le faire. C'est l'histoire des petits et des grands succès, des crises, des doutes et des régressions. C'est la distance parcourue entre le statu quo et sa trompeuse "résistance au changement" et la joie simple de l'amélioration continue. C'est une course d'endurance à travers les collines et les vallées. C'est une réponse à la question dubitative, judicieusement incrédule, qui doit venir naturellement après chaque présentation, chaque formation, chaque "sensibilisation" à l'Agile : Mais concrètement ? 4 S mmaire O1 Le backlog est vivant, il bouge avec des feedbacks Glossaire Apprenez vos kana ! Pour découvrir le produit, il faut le construire Le développeur en piste Les utilisateurs seront ravis Le backlog bouge Le backlog bouge encore La PO n’est pas certaine, elle pourrait aller plus vite C’est un succès O2 Le refactoring c’est tout le temps, et c’est normal Glossaire Le plaisir de coder Il y en a partout Appel à un ami Montre-moi Un nouvel espoir Pas facile Le développement est sinueux, pas linéaire Le travail du développeur 6-41 7 8 10 16 21 24 27 32 38 42-76 44 45 47 55 60 63 67 70 73 Le backl g est vivant, il b uge avec des feedbacks. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D Glossaire Backlog : c’est le carnet de produit, l’endroit où sont écrites les idées à réaliser. Feedbacks : retours. Hiragana : cet alphabet est principalement utilisé pour les mots japonais. Kana : syllabe de l’alphabet japonais. Katakana : cet alphabet est principalement utilisé pour transcrire les mots étrangers. PO (Product Owner) : c’est le propriétaire du produit, ainsi que le représentant des utilisateurs. YouTubeur Julien Fontanier : artiste vidéaste qui publie sur la plateforme YouTube. 7 Il est le créateur de la chaîne Cours de japonais ! 1. 1. https://youtu.be/Hs8oR3xDokA Julien Fontanier a financé son projet sur la plateforme Ulule(ulule.com/japonais-saison3). Retrouvez-le aussi sur Facebook, Twitter (@JulienFontanier) et Instagram (@coursdejaponais). O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D Apprenez vos kana ! Charlotte a deux enfants, Théo 18 ans et Léa 14 ans. Tous les trois sont de grands admirateurs de la culture japonaise : ses mangas et ses spécialités culinaires. Ils sont déjà allés au Japon tous ensemble et veulent y retourner. C’est tout naturellement que Théo et Léa commencent l’apprentissage du japonais. Leur apprentissage est autodidacte, c’est Léa qui s’en sort le mieux, elle est très assidue. Son apprentissage a l’air facile, elle suit les vidéos du YouTubeur Julien Fontanier qui a beaucoup de succès. Charlotte est curieuse, elle regarde donc une de ces vidéos. C’est effectivement très bien expliqué. Charlotte décide à son tour d’étudier le japonais, et s’abonne à la chaîne YouTube. 8 Les cours sont agréables et Charlotte enchaîne les leçons. À partir de la dixième leçon, le YouTubeur est très insistant sur l’auto-apprentissage en dehors des cours, il répète : « apprenez vos kana ! ». Il explique que la maîtrise des kana est un prérequis indispensable et qu’il a plusieurs fois observé que les élèves qui décrochent sont ceux qui ne les maîtrisent pas. Effectivement, Charlotte a de plus en plus de mal à suivre les leçons et doit finalement suspendre le visionnage des vidéos YouTube pour travailler ses kana. Elle a regardé les applications du marché et les a trouvées trop denses, voire trop compliquées. Elle veut juste des devinettes. Elle souhaite respecter l’intention du senseï (le professeur YouTubeur) qui conseille sa méthode pour maîtriser les kana : « apprenez les cinq premiers kana, quand vous les maîtrisez, passez aux cinq suivants et révisez les dix en même temps ». Comme elle est informaticienne, elle a l’idée de réaliser une application pour apprendre facilement les kana. Son application doit permettre exactement ceci. Le besoin est simple : construire un quiz de kana, regroupés par leçons, faire deviner soit un kana (l’écriture japonaise) soit un rōmaji (l’écriture latine). ka un kana son rōmaji Elle imagine tout de suite une utilisation mobile, pour pouvoir s’entraîner en toutes circonstances. Elle se lance donc dans la réalisation de son application qu’elle nomme Apprendre les kana. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D Par curiosité, elle demande à sa fille comment elle a fait pour dépasser ce stade, puisque Léa maîtrise ses kana. La réponse de Léa l’amuse : « c’est simple, j’ai écrit sur une feuille blanche les kana de la ligne 1 dans leurs versions rōmaji et kana. Puis j’ai tout découpé et je les ai mis dans une boîte. Je mélange, et je devine. Quand j’ai fini la ligne 1, j’ajoute les kana de la ligne 2 et je recommence. » Charlotte a souri, parfois il n’y a peut-être pas besoin de logiciel ! Elle se rassure en se disant que sa solution logicielle est portable, et la boîte non. Bon, du coup, c’est simple. Un quiz, des devinettes, des leçons qui s’accumulent. Elle sait bien qu’il ne faut pas faire compliqué, des années d’expérience dans le développement de logiciels lui ont forgé une conviction : un produit qui ravira ses utilisateurs est un produit simple et efficace. Elle formalise l’intention de son produit, écrit les premières idées et les priorise. L’intention du produit est la suivante : 9 IL ÉTAIT UNE FOIS un monde où les étudiants veulent apprendre tout seuls le japonais CHAQUE JOUR ils regardent des vidéos YouTube MAIS UN JOUR ils sont largués, car ils n’ont pas une maîtrise parfaite des kana À CAUSE DE ÇA, les cours YouTube deviennent difficiles À CAUSE DE ÇA AUSSI, ils se découragent, certains abandonnent même JUSQU’À CE QUE FINALEMENT l’application « Apprendre les kana » soit créée, un quiz qui leur permet d’apprendre facilement les kana, de les maîtriser et finalement de continuer les leçons de japonais Charlotte rédige ses idées à développer. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D Pour découvrir le produit, il faut le construire Les idées fusent. Charlotte prend plaisir à formaliser ses idées, et les rédige comme des petites histoires utilisateurs qui prendront vie quand le logiciel fonctionnera. Elle raconte comment ce sera bien d’utiliser le logiciel. C’est un moment agréable et facile. Il permet de jouer aux devinettes de kana et de rōmaji, il possède un mode aléatoire, il permet aux élèves de connaître leur progression… C’est salvateur de formaliser toutes ces histoires : elle avait ces idées en tête, mais les écrire lui permet de se projeter sur la suite. Elle a l’impression de bien travailler, de prendre les choses dans l’ordre et de travailler proprement. C’est vraiment un bon moment ! 10 Le résultat est le suivant : En tant qu’étudiant, je veux voir un kana afin de deviner son rōmaji En tant qu’étudiant, je veux que l’affichage des kana soit aléatoire afin de savoir si je les connais vraiment Apprendre le Japonais En tant qu’étudiant, je veux deviner les kana de la leçon 1 afin d’apprendre progressivement et de choisir quoi apprendre Deviner En tant qu’étudiant, je veux voir des rōmaji afin de deviner les kana En tant qu’étudiant, je veux pouvoir choisir un des deux alphabets afin d’apprendre à ma guise Clic sur la réponse (kana ou rōmaji) pour afficher la solution et donc pas sur le bouton solution S’ameliorer En tant qu’étudiant, je ne veux me souvenir de mes scores afin de savoir si je progresse O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D C’est angoissant. Elle sent bien qu’elle peut se tromper et elle commence à saisir la gravité de ses décisions de priorisation. Elle réfléchit : Suis-je bon stratège ? Est-ce que je prends les choses dans le bon ordre ? Si je suis cette liste d’idées, serai-je fidèle à mon intention du début ? Ne suis-je pas en train de perdre mon temps avec du travail superflu ? 11 Elle ne peut pas faire patienter ses enfants 3 mois ou 6 mois. Elle aurait l’air ridicule, pas compétente. Ou alors pire, ils n’auraient plus envie. Elle voudrait leur demander souvent : « ça vous plaît ? ». Elle s’entend bien avec ses ados, elle compte bien en profiter pour récupérer des feedbacks et améliorer son produit à chaque fois ! C’est rigolo, elle sait qu’elle a rarement des rapports aussi francs et transparents avec ses utilisateurs. Elle aimerait bien pourtant. Elle décide de leur poser souvent la question. Leur promettre quelque chose et le leur montrer. Puis le refaire souvent. Des petites promesses, faciles à tenir. Elle retravaille ses idées en les regroupant. Elle les montrera en même temps, au même moment. Ce premier moment (l’itération 1), c’est la promesse qu’elle fait à ses utilisateurs du futur fonctionnement. Cette promesse est une phrase, mûrement réfléchie, qui rend logique le regroupement de ces idées-là pour la première itération. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D « Maman elle fera quoi ton appli ? — Tu vas pouvoir t'entraîner à reconnaître les kana. — Ok. » L’enthousiasme des ados n’est pas délirant non plus, les utilisateurs sont à convaincre finalement. Le logiciel a intérêt à tenir ses promesses et même plus, il doit ravir ses utilisateurs, les exciter pour qu’ils demandent la suite. Charlotte a promis : « tu vas pouvoir t’entraîner à reconnaître les kana ». Elle cherche quelles idées sont en lien avec ça. Elle se rend compte que sa promesse modifie un peu ses idées. Elle réfléchit : la promesse est plus importante que les idées déjà écrites. Du coup elle découpe des idées, change des priorités. Elle découvre un nouveau chemin d’idées pour tenir sa promesse : pour progresser, il faut s’entraîner à deviner. Elle décide donc que l’entraînement se fera d’abord sur la reconnaissance des kana en mode rōmaji, et ce dans les deux alphabets des kana (hiragana et katakana). 12 Pour autant, elle ne s’arrête pas de réfléchir et elle a d’autres idées. Ces nouvelles idées ne sont pas en lien avec sa première promesse, elles sont donc moins importantes. Elle les écrit, en y apportant peu de détails, car il s’agit juste de ne pas les oublier, et y reviendra plus tard. Sa nouvelle liste d’idées ressemble à ça : (schéma ci-contre). O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D Sa nouvelle liste d’idées ressemble à ça : Mes idées Afin d’apprendre sûrement les kana, en tant que Charlotte, je veux m’entraîner à les reconnaître en rōmaji Afin d’apprendre les deux alphabets, en tant que Charlotte, je veux pouvoir en sélectionner un ou les deux Afin d’ancrer mes apprentissages, en tant que Charlotte, je veux voir mes leçons en cours Afin de savoir si je suis assidue, en tant que Charlotte, je veux savoir quand je me suis entrainée Deviner S’améliorer 13 Apprendre le Japonais Deviner - plus tard S’améliorer - plus tard Parler - plus tard Partager - plus tard Afin de savoir dessiner des kana, en tant que Charlotte, je veux voir des rōmaji Afin de rendre plus facile l’utilisation de l’application, en tant que Charlotte, je veux faire moins de clics Examens Voir un extrait dans un manga ou un livre. Afin de savoir mon niveau, en tant que Charlotte, je veux connaître mon score Afin de savoir si je progresse, en tant que Charlotte, je veux me souvenir de mes scores Afin de savoir si je maîtrise des kana,en tant que Charlotte, je veux connaître ma progression dans mon apprentissage Afin de progresser doucement, en tant que Charlotte, je veux choisirmes leçons Entendre un kana Créer des amis Activité de mes amis Score de mes amis Défis Plus tard O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D Elle est un peu rassurée. Les idées présentées sous cet ordre sont moins risquées. Cette constructionlà du backlog plaira mieux, elle en est sûre. Elle voit l’itération 1 comme un premier pas qui, elle l’espère, la rassurera encore. Enfin, elle verra ce que les enfants en diront. Bon finalement c’est fatigant d’écrire ces idées, elle avait l’impression de savoir quoi faire et pourtant elle se rend compte qu’elle découvre son produit. C’est un comble, c’est elle qui le construit ! Elle n’est pas encore convaincue, et elle est inquiète maintenant, car elle a l’impression de tâtonner. Ou alors c’est une démonstration ; elle doit chercher, prouver. La promesse 1 + la promesse 2 + la promesse 3 = l’intention de son produit. Construire le backlog, c’est comme essayer de faire une bonne démonstration. Vu comme ça, c’est sympa ces promesses. Très facile en fait. 14 Elle imagine un dialogue avec sa fille pour tester si l’argumentaire est convaincant. Comme je vous l’ai annoncé plus tôt, très chère utilisatrice, nous travaillerons d’abord sur l’entraînement à reconnaître les kana. Puis vous pourrez apprendre ce que vous voudrez. Puis vous connaîtrez votre score. Elle vérifie et vérifie encore. La promesse 1 plus la promesse 2 plus la promesse 3, ça marche. C’est cohérent avec l’intention du produit. Très très très facile. Chouette. Vous allez vous entraîner à reconnaître des kana. Cette promesse regroupe finalement deux idées seulement, c’est suffisant. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D Apprendre le Japonais Deviner Afin d’apprendre sûrement des kana, en tant que Charlotte, je veux m’entraîner à les reconnaître en rōmaji Vous allez vous entraîner à reconnaître des kana S’améliorer 15 Afin d’apprendre les kana avant de les deviner, en tant que Charlotte, je veux voir l’alphabet entier Quelle fierté d’avoir économisé du temps. Ce sera du travail de développer tout ça, et c’est un soulagement de découvrir que la promesse sera atteinte avec deux idées seulement au lieu de trois. Du temps économisé pour faire autre chose. Non, pas juste du temps économisé. Charlotte se rend compte que si elle développait une idée « en trop », les utilisateurs auraient une fonction en trop. Ce serait dommage de réaliser une application dense, il y en a assez comme ça, elle n’aime pas ça. C’est comme dans la langue française. Bien, c’est bien. Beaucoup, c’est un peu trop. Trop, c’est un aveu d’échec. Finalement, bien réaliser c’est réaliser moins et mieux. Elle pensait savoir ce qu’elle voulait depuis le début. Elle se rend bien compte qu’elle passe du temps à écrire ses idées … et à les modifier, et à les déplacer. C’est déconcertant mais elle l’avoue, elle comprend de mieux en mieux son produit. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D Le développeur en piste C’est le moment tant attendu de la réalisation du produit. Aujourd’hui, Charlotte est la super développeuse de ce super produit. Elle est motivée, prête à travailler dans les règles de l’art du développement logiciel. Je vais me focaliser sur le besoin et trouver les meilleures solutions pour y répondre, se dit-elle. Elle se sent capable de soulever des montagnes. En plus dans son cas c’est facile, elle connaît bien la PO… 16 C’est un peu fou cette situation, elle se rend compte qu’elle est soit PO, soit développeur. Si elle discute avec ses utilisateurs, elle est PO. Si elle développe le logiciel, elle est développeur. Pour ajouter à la schizophrénie, elle se rend compte qu’il lui manque un interlocuteur qui lui parlerait de comment faire. Elle réfléchit : doit-elle jouer un personnage de plus ? Elle veut développer à partir de l’idée « afin d'apprendre sûrement des kana, en tant que Charlotte, je veux m’entraîner à les reconnaître en rōmaji ». C’est un peu court. À bien y réfléchir, c’est très flou. En tant que développeuse, elle a envie de poser plein de questions. Il y a des mots qui la gênent dans l’expression du besoin tel qu’il est affiché. Apprendre sûrement, ce mot sûrement n’est sûrement pas là par hasard et rien ne l'explique. La PO parle de kana et ne dit pas quoi apprendre… Tout ? Rien n’est précis. Elle comprend le besoin mais rien n’explique comment faire. La PO doit bien avoir sa petite idée ? La spécification manquante porte sur un « petit » besoin, autant poser les questions directement. Bref, il va falloir avoir une discussion entre la PO et la développeuse. DEV — Pourquoi “sûrement” ? O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D PO — Parce que quand Charlotte fait ses entraînements d'écriture de kana, elle les dessine en faisant des lignes, elle sait les dessiner mais elle se rend compte qu’elle n'a pas retenu le son associé. DEV — Donc faire des lignes ne suffit pas à apprendre ? PO — Oui. Non seulement il y a beaucoup à apprendre, mais surtout, à chaque kana, il faut retenir deux choses : l’écriture et le son. Ça fait beaucoup : Charlotte a besoin d'une méthode progressive, pas tout d'un coup sinon ça lui fait trop. DEV — Ok, donc apprendre petit à petit. PO — Oui, apprendre avec des leçons. DEV — Le nombre de leçons est connu ? PO — Oui, et toutes les leçons sont affichées. 17 La PO se note pour plus tard une idée à écrire : « Apprentissage : Charlotte choisira exactement quels kana à apprendre, elle construira sa leçon ». DEV — C'est quoi ces leçons ? PO — Des leçons de syllabes. L’alphabet japonais est syllabique. C’est une matrice de voyelles et de consonnes. 5 voyelles (a, i, u, e, o,) et 11 consonnes (-, k, s, t, n, h, m, y, r, w, -n) produisent ces syllabes. DEV — Deux fois la consonne “n” ? PO — Oui, la deuxième fois “-n” est une syllabe particulière, elle ne se décline pas avec les voyelles. DEV — Ok donc ça fait 11 consonnes * 2 alphabets = 22 leçons avec 5 choix chacun. PO — Presque, certaines consonnes n'ont pas toutes les voyelles, et il y a des leçons supplémentaires pour des sons différents de consonnes. DEV — Ok, vous nous fournirez le détail. PO — Oui. Une exception, les leçons “wa wo” et “-n” sont à regrouper en une seule leçon. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D DEV — Ok. PO — Attention, l’ordre de la leçon est important, c’est l’association consonne - voyelle qui donne l’ordre alphabétique. DEV — Alors leçon 1 puis la leçon 2 ça fait … a i u e o ka ki ku ke ko. PO — Vous avez tout compris ! DEV — Qui décide de la leçon à lancer ? PO — L’utilisateur. Quand il clique sur une leçon, cela affiche aléatoirement un kana à deviner. DEV — Un kana à deviner qui fait partie de la leçon lancée. PO — Oui. Il a choisi une leçon déjà définie. 18 DEV — L’utilisateur voit un kana et il clique sur le rōmaji associé, il sait alors s’il a juste ou faux. PO — C’est ça. DEV — Il devine le rōmaji, pas le kana, nous sommes d'accord ? PO — Ici oui, il y aura une idée pour deviner le kana. Note pour plus tard : créer l’idée « deviner le kana », et aussi une idée « donner la possibilité de choisir ce que l’on devine, le kana ou le rōmaji ». DEV — Une séquence d'entraînement (quiz) dure combien de temps ? Ou plutôt un entraînement est joué combien de fois ? PO — 10 fois. Pour la suite, on mettra une limite de temps. Note pour plus tard : créer une idée « durée du quiz » (1 minute par défaut, modifiable par l’utilisateur). PO — Au bout de 10 jeux, la leçon est finie et il voit son résultat. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D DEV — Le résultat c’est le nombre de réponses bonnes / nombre total de questions ? PO — Exactement. Puis, l’utilisateur peut relancer la leçon autant de fois qu’il veut. DEV — Le calcul est propre à chaque leçon ? Pas d’historique ? PO — Pas pour l’instant. Note pour plus tard, créer une idée « historique des résultats ». C’était parfait. L’échange a été fructueux et a permis de détailler tout ça. Charlotte sourit, elle a maintenant de quoi développer correctement : une spécification. 19 O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D Elle regarde ses notes. Spécification : • lister toutes les leçons par ordre alphabétique pour chaque alphabet sélectionner une leçon • afficher un kana aléatoire parmi ceux de la leçon sélectionnée • clic sur la réponse, le résultat s’affiche : juste ou faux • au bout de 10 jeux, le jeu affiche “fini” avec le score obtenu Le processus est très clair maintenant dans sa tête. 1. Charlotte-PO parle avec ses utilisateurs pour comprendre leurs besoins. 2. Charlotte-PO formalise ses idées pour y répondre. 20 3. Charlotte-dev discute avec Charlotte-PO pour faire émerger les détails importants. 4. Charlotte-dev formalise les spécifications à suivre pour développer. 5. Charlotte-dev développe. 6. Charlotte-PO montre le logiciel à ses utilisateurs et discute pour avoir des feedbacks. Et elle recommence. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D Les utilisateurs seront ravis La semaine a été longue. Voici à quoi ressemble l'application à la fin de l’itération 1 : Fin de l'itération 1 21 C’est avec beaucoup d’empressement qu’elle montre son produit à ses utilisateurs. Théo et Léa sont silencieux, ils jouent avec l’application fraîchement déployée sur leur téléphone. Tests en conditions réelles. Elle profite de ce moment pour se répéter : ne pas trop se vanter, ce ne serait pas un bon exemple. Oui, le produit est conforme à la première promesse. Oui, le produit répond aux attentes. Oui, le produit est génial. Elle attend encore les applaudissements quand les premières remarques tombent. Heureusement, elle est assise. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D « On est bloqué ? » « C’est un memory, maman ! Un choix sur cinq, c’est appris en quelques secondes et pas vraiment appris en fait. Si tu me montres ce kana au milieu de beaucoup d’autres je ne pense pas le reconnaître. » « C’est un jeu de déduction, on n’apprend rien. » Charlotte, une fois le choc passé, tente le déni : « N'était ce pas ce que nous avions convenu ? Reconnaître des kana ? — Oui ok mais pas jouable en fait. » Colère : « Hein ? » 22 Négociation : « En fait, ce que j’ai développé, c’est plutôt vous apprendrez vos leçons. — Ben oui. » Tristesse : « C’est pourtant ce dont nous avions convenu. — Oui oui, mais maman tu vois bien toi aussi en jouant que c’est un memory. » Acceptation : « Et il manque quoi pour passer de “vous apprendrez vos leçons” à “vous connaîtrez vos kana ?” ». Grosse grosse réflexion. « Jouer avec plus de kana. — Jouer avec plus de kana ou plutôt - dans une même leçon - avoir plus de rōmaji proposés que ceux de la leçon ? — Je ne sais pas maman, je suis occupée. » Pas de standing ovation finalement. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D Charlotte conclut ainsi : le produit fonctionne. Les utilisateurs ont joué avec un bon moment. Le produit n’ira pas tout de suite en production. Les utilisateurs ont des remarques. Ils veulent voir la suite. Ça va modifier les priorités, sûrement. 23 O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D Le backlog bouge Début de l’itération 2. Charlotte boude dans son fauteuil. Elle joue avec l’application. C’est dur tout de même d'encaisser toutes ces remarques. Mais en même temps, ils ont raison. Elle voit bien qu’elle apprend une leçon rapidement, et qu’en rejouant une heure après la leçon n’est pas vraiment acquise. Elle joue longtemps, comme pour retarder le moment où elle casse tout pour continuer. Oui, car prendre en compte les remarques va impliquer des modifications sur ce qui a déjà été fait. 24 Il va falloir refaire quelque chose qui fonctionne déjà. Refaire. Je déteste refaire, se dit Charlotte. C’est pour la bonne cause, se rassure-t-elle. Refaire pour faire mieux. Tout en jouant, elle compte les feedbacks. Et il y en a beaucoup, des feedbacks. Vus lors de la discussion entre le PO et les utilisateurs : • Créer une idée « jouer avec plus de kana ». Vus lors de la conversation entre le développeur et le PO : • Créer une idée « apprentissage ». • Créer une idée « deviner le kana ». • Créer une idée « choisir de deviner le kana ou le rōmaji ». • Créer une idée « historique des résultats ». Autre chose : elle a bien noté que l’ergonomie n’était pas festive. Comme les remarques étaient douloureuses, ils n’en n’ont pas rajouté avec l’interface, ils ont été gentils. Elle a bien senti que ce n'était pas satisfaisant. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D Vu par le PO : • Créer une idée « améliorer l’ergonomie mobile ». Voilà voilà voilà. Le plus rigolo c’est que Charlotte avait déjà prévu des choses à faire pour la prochaine itération. Elle avait prévu de continuer l’apprentissage en dessinant les kana, en écoutant les sons des kana… et elle va devoir s’arrêter sur l’apprentissage. Ok donc le backlog c’est une chose vivante, ça bouge. Elle a bien compris la gravité de la situation : une application d’apprentissage doit permettre de faire des apprentissages. Elle privilégie le retour « jouer avec plus de kana ». Elle cherche à le reformuler correctement. Quelle nouvelle promesse doit-elle écrire pour ça ? C’est clair. L’itération 2 sera : « Vous allez apprendre progressivement. » 25 Logiquement, les promesses suivantes seront : L’itération 3 : « Vous apprendrez ce que vous voulez. » L’itération 4 : « Vous allez connaître votre progression. » Maintenant elle identifie les impacts dans le backlog. Une seule idée survivra, les autres attendront. Trois nouvelles idées sont créées. Elle s’attarde un peu sur le choix des mots, elle comprend combien il était important de bien exprimer l’intention. Elle se réfère à l’intention initiale pour vérifier. Pour ne pas se tromper. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D « Vous allez apprendre progressivement », c’est un plan en 4 étapes : • Afin de savoir reconnaître des kana, en tant que Charlotte, je veux voir des rōmaji. • Afin de me concentrer sur ma leçon, en tant que Charlotte, je veux voir uniquement la leçon. • Afin de progresser doucement, en tant que Charlotte, je veux suivre un plan d’apprentissage. • Afin de maîtriser les kana, en tant que Charlotte, je veux deviner un kana parmi tous les kana que j’ai déjà appris. Elle discute avec son développeur préféré, la conversation est toujours riche et lui permet de peaufiner ces idées. À la fin de l'après-midi, les conversations ont fait émerger les spécifications nécessaires pour développer. Maintenant elle s'apprête à « casser » le code avec plaisir. Elle sait où elle va, et le résultat sera meilleur que le précédent. 26 Une nouvelle question arrive, comme ça : aurait-elle pu imaginer ces idées au début ? Elle y cogite à peine, finalement elle avait mal réfléchi à son produit au départ. C’est bizarre, elle ne voit pas où était son erreur de raisonnement. Elle laisse cette réflexion culpabilisante pour plus tard. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D Le backlog bouge encore Ça s’arrête quand de bouger ? Charlotte ne sait plus si c’est une bonne ou une mauvaise nouvelle tous ces changements. L’application à la fin de l’itération 2 : Fin de l'itération 2 27 O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D L’application à la fin de l’itération 3 : Fin de l'itération 3 28 Maintenant c’est la fin de l’itération 3. Théo et Léa ont l’air de plus en plus contents. Pourtant, Charlotte est dépitée… L’application grossit en se modifiant à chaque fois. Et en s'améliorant à chaque fois. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D Maintenant il y a un vrai parcours d’apprentissage. Chaque leçon validée permet d’apprendre de plus en plus, sûrement. Le dernier ajout en date : la fonction « Continuer la leçon » tout en haut de la page d’accueil. Les utilisateurs ont pris l’habitude d’utiliser ce bouton pour continuer à apprendre. L’application sait où ils en sont. L’application sait ce qu’ils ont à faire. L’application les aide à progresser. Et puis, l’avenir est radieux. Les autres fonctions à venir ont l’air géniales. Charlotte-PO parle avec ses utilisateurs de nouvelles idées très pertinentes. Par exemple, elle ne savait pas avant qu’elle voudrait écrire cette idée : « deviner un rōmaji sans choix proposés ». En effet, vu avec ses utilisateurs, c’est toujours un peu un jeu de déduction. Ils ont donc décidé que l’étape d’après, ce sera de demander à l’utilisateur d’écrire le rōmaji avec le clavier. Il devinera sans aucune proposition de rōmaji. La devinette ne sera plus un jeu de déduction. 29 Là ce sera parfait. Fini la déduction, le memory, le peu de réflexion. Le kana est affiché, la zone de saisie invitera l’utilisateur à deviner vraiment le rōmaji. Comme si elle n’avait pas vraiment réfléchi à son produit au début. Pourquoi a-t-il vraiment fallu ces trois itérations pour avoir ce produit là ? C’est ça qui la dépite. Tout le monde est content, et pourtant tout a été cassé, reconstruit. La moitié disons, sans dramatiser. La moitié de ses idées initiales ont été modifiées ou supprimées. Et les utilisateurs sont plus contents que lors de la première itération. Finalement, les feedbacks sanglants de l’itération 1 n’étaient pas un accident. Ils ont permis de O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D pivoter, de choisir un meilleur chemin pour l’application. De pivoter tôt. Probablement parce que les feedbacks sont vrais. Théo et Léa ont exprimé leurs feedbacks en ayant l’application en main. Les feedbacks ne peuvent pas arriver autrement que par la vraie utilisation du système. L’application se construit avec l'expérience des utilisateurs, et cette expérience est réelle. C’est la vraie vie. Les points remontés sont concrets, les ajustements qui ont lieu sont bénéfiques. Douloureux et bénéfiques. Il a fallu modifier des parties déjà fonctionnelles, et elle se rend à l’évidence, le résultat est meilleur. Les adaptations successives de l’application contribuent à son adoption progressive. Une réussite. Elle rumine encore : si elle avait persisté dans son backlog initial, aujourd’hui elle n’aurait pas du tout ce résultat-là. Si ça se trouve, les utilisateurs n’y joueraient pas. Les enfants seraient déçus. Alors que là, elle a toute leur admiration. Du coup elle repense à ses projets précédents, sans tous ces feedbacks. Comment faisait-elle ? Un planning. Un planning avec la liste de tout ce qu’il y a à faire. 30 Rapide jeu des sept différences entre ces deux situations. Elle en trouve deux : • Ici, le produit marche à chaque fois qu’elle le montre. • Ici, les feedbacks permettent d’augmenter la satisfaction utilisateur. Elle réfléchit, il y a une autre différence, plus importante : elle a le droit de refaire. Elle est autorisée à se tromper. Les feedbacks ici ne sont pas une erreur, elle les voit comme une chance d’améliorer le produit. Pourquoi ici, maintenant, et pourquoi pas dans sa vie professionnelle ? Qu’est-ce que le contexte familial a modifié dans ce cas précis ? Peut-être parce que le projet lui tient davantage à cœur, peut-être parce que devant ses enfants il faut absolument réussir. Peutêtre aussi parce qu’elle ne peut pas se permettre de perdre son temps : c’est du temps personnel tout ça et elle pourrait tout aussi bien le passer avec eux plutôt qu’à développer un logiciel informatique pour après passer du temps avec eux ! Donc c’est normal que le backlog bouge, et il bougera toujours. Elle conclut ainsi : O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D Le planning, c’est de l’imagination : « ça devrait se passer comme ça ». Les itérations, c’est la vraie vie : « ça vous plait ? » Solution 1 : la voyance existe. Solution 2 : la voyance, bof. Le produit est construit avec de vraies informations, pas des suppositions. Sans cesse remis en question, sans cesse amélioré. Le backlog bouge et bougera encore. C’en est déconcertant. Ça a l’air évident, et pourtant pour elle, c’est une découverte. 31 O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D La PO n’est pas certaine, elle pourrait aller plus vite C’est embêtant le doute. Une petite voix dans sa tête qui ne s’arrête pas. Une idée comme ça, que si ça se trouve tout est faux. Charlotte soupçonne qu’elle pourrait aller plus vite. 32 Ce serait dommage de perdre du temps, elle a beaucoup d’idées en tête, elle pourrait prendre un moment et tout écrire. Elle voit bien que ça prend du temps de faire juste une itération, puis de recevoir des feedbacks, puis d’en faire une deuxième, puis de recevoir des feedbacks, puis de faire une troisième, puis de recevoir des feedbacks, etc. Elle ne sait même pas combien il y en aura, des itérations. Probablement beaucoup. C’est peut-être un luxe cette agilité, c’est long. Elle se dit qu’elle sait ce qu’elle veut après tout, elle n’a pas de choses fondamentales à apprendre. Elle se dit aussi qu’elle irait plus vite si elle écrivait la solution complète maintenant. Les feedbacks permettent un apprentissage certain, mais ils ont un certain coût. Allez, c’est parti, elle met de côté ces itérations et elle réfléchit à tout ce qu’il y a à faire. Elle prend une jolie feuille blanche et elle décrit l’application finale. C’est un bon moment, car elle se projette vraiment, la réflexion va plus loin. Elle réfléchit enfin à la fonction de partages entre amis, elle y avait pensé dès le début et sous prétexte que ce n’était pas le plus important, elle n’avait pas pu l’approfondir. Elle imagine des défis entre amis, c’est stimulant. Elle prend plaisir à y travailler, car le fait d’avoir laissé de côté cette idée la frustrait un peu. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D C’est enthousiasmant, le fait de tout écrire. Elle voudrait tout maintenant. Bien sûr, un vieux bonhomme barbu en costume rouge ne va pas lui offrir son application demain avec tout ça, mais elle y croit un peu. C’est comme si elle avait 6 ans : toute son énergie est mobilisée dans la description de son cadeau de Noël. Elle décrit toutes les fonctions qui devront être réalisées. En tant que développeur, elle est ravie. En effet, elle voit tout ce qu’il y a à faire. La conception logicielle sera meilleure, car elle voit l’ensemble. Quand elle travaillait avec des itérations, elle recevait les informations par petits bouts. Elle manquait d’informations pour bien faire les choses, elle avait du mal à savoir si sa conception était bonne ou pas. De plus, la conception pouvait être remise en cause à chaque itération, c’était fatigant. Elle a rédigé un joli document : architecture, spécifications et conception. Joli et complet. Il lui tarde de développer tout ça, c’est très clair. Elle réfléchit : il est gros ce document, je vais passer du temps à développer tout ça. Si ça se trouve cela prendra deux mois de travail, et si à la fin ça ne leur plait pas ce sera la catastrophe. C’est tout ou rien, trop risqué, je devrais le leur montrer. 33 Elle va fièrement voir Théo et Léa : « Regardez, j’ai écrit un document qui regroupe toutes les informations de tout ce qu’il y a à faire sur l’application ! J’ai besoin de votre lecture et surtout de votre accord pour développer tout ça. » Théo note tout de suite le nombre de pages du document : « 62 pages, c’est une blague ? Tu veux qu’on lise tout ça ? » Léa s’arrête à la page 6 : « Maman je n’y comprend rien, ça veut dire quoi exigences, mapping de sources, composants graphiques, et pourquoi toutes ces flèches sur les schémas ? » Charlotte pèse ses mots pour répondre, elle sent qu’elle n’a pas plusieurs chances pour expliquer : « et bien les exigences sont le résumé du travail à faire, elles sont unitaires, testables, elles décrivent les règles de gestion à développer. Les schémas quant à eux mettent en évidence les flux et les couches à mettre en place avant d’attaquer le cœur fonctionnel… ». Le fichier était refermé. Ce n’était plus la peine. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D Théo est fâché : « ah non maman stop. Ça c’est ton travail, je n’y comprends rien et je n’ai pas envie de comprendre ça ne m’intéresse pas. Est ce que je te fais relire mes cours de mathématiques moi ? » Charlotte est interloquée : « et comment je fais, moi, pour être sûre que ça ira ? » Léa : « Comme tu veux. » 34 Quelle violence. Les bras lui en tombent. C’est comme au travail finalement. Personne ne veut valider ses documents. Ce n’est pas juste, elle en a besoin pour travailler. Elle dessine. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D 35 O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D Les idées s’ajoutent, se modifient, elle redessine plusieurs fois cette feuille. Elle itère avec ellemême, finalement. Il y a beaucoup d’idées maintenant, il est difficile de toutes les positionner. Elle se demande ce qui se passerait si elle faisait jouer Théo et Léa avec ce logiciel-là. Celui qui est dessiné avec toutes les fonctions. Elle aimerait bien savoir ce qu’ils en diraient. Ils ne veulent pas valider ses documents, ils accepteraient peut-être de les tester. Elle compare les deux logiciels (le logiciel actuel et le logiciel du dessin), et elle constate qu’il y a un gros écart. Un très gros écart, même. Elle imagine Théo et Léa cliquer là et là. Ils ont déjà fait tellement de remarques, elle aimerait bien les faire cliquer sur son dessin. Au fur et à mesure qu’elle noircit la feuille, elle est partagée. Elle voudrait être contente et elle n’y arrive pas. C’est un leurre, le dessin devrait la rassurer sur tout ce qu’il y a à faire, et en fait ça l’inquiète de savoir si ça va leur plaire. 36 Du coup elle dessine un dessin intermédiaire. Elle imagine qu’ils cliquent sur ce dessin intermédiaire. Ça devrait leur plaire. Elle fait des suppositions. Elle continue son dessin en supposant que ça leur plaît. Et si ça ne leur plaît pas… il faudrait qu’elle comprenne pourquoi. Elle se rend compte qu’en réalisant ce gros dessin complet, elle s’interdit de demander à Théo et Léa ce qu’ils en pensent. C’est comme si elle n’avait pas l’autorisation de leur parler. Cela lui rappelle qu’il se passe la même chose au travail, Charlotte parle rarement à ses utilisateurs. Même si elle insistait, elle n’aurait pas le temps, car les projets sont souvent tendus, en retard, avec beaucoup de discussions vers la fin, c’est épuisant. Et en plus ce n’est pas si grave car souvent, la version 2 rattrape le tir. Ou la version 3. Parfois la mise en production tarde longtemps. Les feedbacks des utilisateurs arrivent entre chaque version. C’est à se demander comment les projets peuvent réussir dès leur première version. Bon, ici, elle a le droit de demander aux utilisateurs ce qu’ils en pensent. Ce qu’ils pensent du dessin complet, ce qu’ils pensent du dessin intermédiaire. Ce qu’ils pensent du logiciel. Ce qu’ils pensent du logiciel de l’itération 1, ce qu’ils pensent du logiciel de l’itération 2. Ce sera moins risqué si elle les fait tester souvent, si elle leur demande souvent ce qu’ils en pensent. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D À contrecœur, elle admet qu’elle a besoin d’eux. Oui c’est elle qui a eu l’idée du produit, mais sans eux elle n’y arrivera pas. S'ils ne l’utilisent pas, ce sera un fiasco. Ce n’est pas un produit pour elle toute seule. Charlotte se remet à coder l'itération suivante. Elle peut jeter son dessin tout noirci. Théo et Léa sont plus importants que ses idées initiales. 37 O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D C’est un succès La foule est en liesse. Et c’est peu dire. Théo et Léa utilisent l’application autant que leurs autres applications. Les GAFA n’ont qu’à bien se tenir. Et pourtant, il y en a encore eu de belles. Le plus gros changement est arrivé tard, c’était énervant de devoir le reconnaître. Les lots de feedbacks amènent leurs lots de changements, Charlotte en avait accepté l’idée. Et pourtant c’était encore surprenant. 38 Théo avait dit dès l’itération 2 : « La règle des 100%, tu peux l’enlever ? » Léa était plus exigeante : « Maman, je veux faire ce que je veux, pas suivre ton plan machin-là. Je veux apprendre cette leçon-là ou celle-là, et je dois tout faire avant ? C’est sérieux ? » Charlotte avait mis ça sur le compte de la jeunesse, et aussi sur l'inébranlable certitude que ses enfants sont les plus beaux, les meilleurs, qu’ils apprenaient déjà bien sans l’application. Donc pas assez représentatifs. Cela justifiait amplement que Charlotte prenne quelques libertés. Comme de refuser de prendre en compte ces feedbacks. Elle a résisté pendant une itération. Après, il a fallu céder. À la fin de l’itération 3, Théo n’est pas venu. Elle l’a appelé une fois, deux fois, il a dit de voir avec sa sœur. Pourtant l’application de l’itération 3 était mieux que celle de l’itération 2. Il y avait un minuteur, et les statistiques de succès. C’est dur pour Charlotte. Elle se rassemble et réfléchit. Elle se souvient maintenant. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D L’intention du départ était de progresser. Le senseï avait expliqué ça. Charlotte-PO avait interprété ce besoin avec : • un plan de leçons qui se débloquent au fur et à mesure d’un apprentissage complet (les fameux 100%), • une fonction « tous les hiragana appris » et « tous les katakana appris » qui permet de jouer avec beaucoup de kana, cumulés selon l’apprentissage acquis. C’était une belle démonstration de l’intention initiale. Et pourtant, il y avait un raté. Un gros. L’application était trop guidée. Les utilisateurs ne voulaient pas de cette progression-là. Ils voulaient eux-mêmes décider de leur progression. Les utilisateurs voulaient de la liberté. Les applications ne sont pas assez ouvertes, se dit Charlotte, elles sont trop fermées. 39 Charlotte est habituée à « guider » les utilisateurs en les contraignant à suivre le chemin qu’elle a imaginé pour eux. C’était sa façon de réaliser des logiciels. Les utilisateurs doivent suivre un processus que Charlotte a conçu. Charlotte reconnaît en y réfléchissant qu’elle avait peur. Peur que ses utilisateurs n’y arrivent pas. Elle avait oublié que l’utilisateur sait se débrouiller. Il cherche. Si l’utilisateur choisit une leçon difficile, la prochaine fois il ajustera. En fonction de son niveau, de son expérience à lui. Charlotte constate qu’il y a une multitude de chemins, en fait. L’intention du départ était de progresser. Le senseï avait expliqué ça. Charlotte-PO pourrait interpréter ce besoin avec : • Toutes les leçons peuvent être jouées. • Un niveau facile propose la leçon seule. • Un niveau difficile propose la leçon ainsi que les précédentes leçons du plan d’apprentissage. C’était une autre belle démonstration de l’intention initiale. La même intention, deux démonstrations différentes. L’une meilleure que l’autre apparemment. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D L’application à la fin de l’itération 4 : Fin de l'itération 4 40 O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D Comment Charlotte a-t-elle finalement accepté de pivoter ? En reconnaissant qu’elle perdait ses utilisateurs. Ils ne venaient pas voir le résultat ! Et en jouant seule, longtemps. Finalement elle était d’accord avec eux. Elle a lâché ses décisions dictatoriales. Elle a enlevé le blocage des leçons et le blocage des 100%. Ses convictions fortes sur son produit étaient sa force, elles auraient pu être sa faiblesse. Maintenant Charlotte accepte les feedbacks comme une loi de construction. Si les feedbacks sont des détours, c’est ainsi, il fallait les prendre. Il fallait apprendre. En plus c’est amusant, l’itération 4 est d’une simplicité déconcertante. Elle ne doute plus. Elle n’aurait pas pu prendre de chemin plus court. Y avait-il une ligne droite ? Imaginaire peut-être, en vrai elle ne fait que casser le système. Pour faire simple, pour faire parfait, il a fallu prendre plein de détours. Ce n’est pas fini. Elle pourra faire plus simple, elle aura besoin de plus d’itérations. Blaise Pascal disait : « Je vous écris une longue lettre parce que je n'ai pas le temps d'en écrire une courte. » 41 Le backlog est vivant, il est même jetable. L’application à la fin de l’itération 4 n’est pas la somme des idées des itérations 1, 2, 3 et 4. Si Charlotte avait réalisé un manuel d’utilisation à chaque itération, il aurait fallu itérer sur l’écriture de ce manuel autant de fois qu’elle a itéré sur le développement de l’application. Le manuel d’utilisation montré à l’itération 8 sera plus intéressant que le backlog de l’itération 8, que le backlog tout entier même. Le backlog aura servi à construire et c’est déjà énorme. Le backlog permet de dessiner des chemins, et d’apprendre pendant la route. C’est une illusion de croire que l’on peut revenir dans le temps et corriger tous ces détours pour trouver la ligne droite. Charlotte accepte maintenant que la conception initiale exhaustive est un raccourci de la pensée, que cette conception ne représente en aucun cas la réalité. C’est tentant de produire beaucoup. De montrer combien le développeur est performant, magicien même. C’est décidé, dorénavant elle passera son temps à réaliser des logiciels de qualité, même si cela signifie développer moins de choses. Le backlog est vivant, il bouge avec des feedbacks. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D 42 Le refactoring c’est tout le temps, et c’est n rmal. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D 43 Charlotte a appris que le backlog bouge. C’est une évidence maintenant, les feedbacks le font bouger, et c’est une bonne chose. Et le code, est-ce qu'il bouge aussi ? Charlotte-dev a de solides convictions sur le développement, elle ne doute pas. Après tout c’est son métier, le métier de PO elle l’a expérimenté à la maison, mais ce n’est pas son vrai métier. Les questions arrivent dès l’itération 2. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D Glossaire Dakuten et handakuten : petits accents qui modifient la lecture du kana. Plus précisément : la consonne du kana change de son. • Dakuten : petit accent ressemblant à un guillemet `` qui a plusieurs dénominations, dakuten ou ten-ten. Ce signe est utilisé avec les kana pour indiquer les consonnes voisées. • Handakuten : petit accent ressemblant à un petit rond ° qui a plusieurs dénominations, handakuten ou maru (qui signifie rond). Soit, par exemple, les changements suivants (valables avec toutes les voyelles, et ce pour les hiragana et les katakana) : 44 ka ga sa za ta da ha ba ha pa Refactoring : réusinage de code. Opération consistant à retravailler le code source d'un programme informatique – sans toutefois y ajouter des fonctionnalités ni en corriger les bogues – de façon à en améliorer la lisibilité et, par voie de conséquence, la maintenance, ou à le rendre plus générique ; on parle aussi de « remaniement ». Cette technique utilise quelques méthodes propres à l'optimisation de code, avec des objectifs différents. Source : Wikipédia. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D Le plaisir de coder Coder c’est génial. C’est comme réaliser un cadeau pour la fête des pères. En construisant le logiciel, Charlotte s’imagine le moment magique où elle va l’offrir. Le cadeau caché derrière son dos, empaqueté. Se dirigeant vers le bureau paternel et montrant le cadeau, au creux de ses mains, en affirmant : « C’est moi qui l’ai fait ! ». Quelle fierté. Bon, d’accord, elle n’a plus 6 ans. La presbytie est bien présente maintenant, et Charlotte a déjà dépassé la phase où elle-même a reçu des cadeaux de fête des mères. Pourtant elle a toujours besoin de ce sentiment. Ce sentiment de grande fierté d’avoir réalisé par elle-même quelque chose d’extraordinaire. 45 Elle recommence à coder. Elle écrit des lignes de code et elle voit le logiciel se former. Elle avance de plus en plus vite. Une fonction de plus, qui marche. Elle voit arriver le moment où elle va pouvoir montrer son logiciel à ses utilisateurs. Son cadeau de la fête des pères. C’est exaltant. Elle identifie des petits moments où elle aurait besoin d’aller moins vite, comme par exemple pour mieux nommer une fonction, ou pour diminuer le nombre de paramètres d’une fonction. Ça la ralentirait, elle se demande si cela en vaut la peine. Elle note ses idées d’amélioration, comme pour déculpabiliser de ne pas les traiter. Elle se remet à coder : elle décide vite, et ça marche. Elle se trouve très compétente. Elle est fière d’elle. J’ai toujours su développer vite, se dit Charlotte avec satisfaction, j’en suis capable. Elle sait qu’elle devra ensuite passer du temps à corriger des détails. Ce n’est pas grave. L’effet aura été obtenu. Elle aura montré sa compétence. Au travail, c’est pareil. En plus fun, car il y a les collègues. Un peu d’amitié et un peu de concurrence. Une blague récurrente lui plait beaucoup : « demande à Charlotte, elle a sûrement déjà fini ». C‘est comme si elle était au collège et qu’elle passait la ligne d’arrivée en vainqueur. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D Finalement, elle se rend compte que ses réflexions sont très infantilisantes. Elle n’assume pas le côté puéril de la chose. Développer, c’est puéril ? Non, bien sûr que non. Développer c’est un travail sérieux. Développer c’est un travail sérieux comme… jouer à un jeu vidéo. Elle code et elle avance dans l’aventure. Elle code et elle débloque un bonus. Elle code et elle passe un niveau. Le boss de fin, c’est la mise en production. Elle s’amuse toute seule. Bon, toujours puéril finalement. Développer c’est un travail sérieux comme… réaliser une création artistique. Développer, c’est inventer. Si ce n’était pas inventer, ce serait reproduire. Le développement, c’est tout sauf de la reproduction. Ce n’est jamais le même problème, ce n’est jamais la même solution. Développer, c’est inventer une solution pour résoudre un problème. Puis le problème change. Il faut inventer autre chose. Le travail n’est pas répétitif. L'œuvre est unique. Pour développer, il faut faire preuve d’imagination. Au départ la solution semble fictive, puis c’est tout un art de lui donner forme. 46 C’est ça. Charlotte se sent comme une artiste. Elle s’autorise beaucoup de choses que ne s'autorise pas un esprit cartésien et analytique. Pendant qu’elle développe, elle rêve, elle prend du recul, elle observe, elle médite sur la solution. C’est prolifique. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D Il y en a partout C’est un tel plaisir que ça en semblerait facile. Pourtant, ce n’est plus le cas. Cela devient compliqué même. Normal, avec tout ce qu’elle a déjà réalisé. Elle a pourtant fait bien attention au fur et à mesure, elle n’a pas développé des fonctions trop grosses, et le plus souvent, elle a réutilisé des fonctions existantes. Elle a travaillé proprement. 47 O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D Trois objets, c’était évident. D’ailleurs elle y a pensé dès le début. À la réflexion elle est gênée car dans l’objet Devinette rien ne s’appelle lancerLaDevinette ou devinerQuelqueChose. Devinette, c’est l’objet le plus gros. Ils sont tous gros en fait les objets. Normal, elle a beaucoup travaillé. Elle tâtonne un peu, elle ne sait plus si la fonction qui lance le jeu doit s’appeler lancerLaDevinette, lancerLeJeu ou lancerUnEntrainement, et pourquoi il n’y a pas de fonction lancerUneLeçon. Donc elle l’avoue, elle ne sait plus si la fonction qui doit lancer le jeu doit se trouver dans l’objet Devinette ou dans l’objet Leçon. 48 O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D C’est gênant, elle n’est pas sûre de sa construction. Elle se rassure en jouant avec le logiciel. Le logiciel marche. Le logiciel marche bien. Je ne dois pas me laisser perturber. Tout est très bien développé. La preuve : le logiciel marche. Charlotte se remet à coder. La nouvelle histoire à développer est la suivante : « Afin de progresser dans mon apprentissage, en tant que Charlotte, je veux jouer une leçon difficile ». Spécification : 49 • Créer deux modes dans l’affichage des leçons : facile et difficile. • Le mode facile correspond au mode par défaut. • Le mode difficile consiste à faire deviner un kana ou un rōmaji parmi les kana de plusieurs leçons. • Les leçons à deviner sont la leçon sélectionnée ainsi que les leçons précédentes. Les leçons précédentes sont calculées en fonction de leur position dans l’alphabet syllabique. C’est une fonction très attendue, les feedbacks étaient nombreux. Les utilisateurs étaient très insistants sur le côté « memory » du logiciel, ils ont l’impression de deviner la solution et de ne pas vraiment apprendre : l’apprentissage devrait être meilleur avec cette histoire. Charlotte se retrousse les manches. Développer cette histoire repose la question du lancement du jeu. Est ce que le jeu « niveau difficile » est une fonction de l’objet Devinette ou de l’objet Leçon ? Pas de l’objet Kana, ça c’est sûr. La fonction à développer pourrait se nommer lancerUnEntrainement2. Ce serait vite fait et sans impact sur le reste du code. Non, ce n’est pas raisonnable, elle réfléchit à un autre nom. Tous les noms sont déjà pris, ou alors il faudrait revoir tous O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D les noms déjà pris. Elle ne s’y résigne pas. Comment ai-je réussi à construire un bazar pareil ? Elle se souvient. Au début, la leçon « facile » consistait à afficher les rōmaji dans l’ordre alphabétique et la leçon « difficile » consistait à afficher les rōmaji dans un ordre aléatoire. C’est différent de dire qu’une leçon difficile est une somme de leçons. La conception initiale n’était pas fausse, elle était bonne au moment de la conception initiale. Charlotte repense au travail. Ses chefs lui disent souvent qu’ils veulent des applications maintenables, ils sont d’accord avec ce concept. Ou plutôt : ils veulent dès le début une solution maintenable. Comme si ce problème pouvait être traité une fois pour toute au début du projet, tout simplement en l’exigeant. 50 Charlotte aussi voulait une solution maintenable dès le début du projet. Or là, elle se rend compte qu’elle a échoué, il faudrait tout renommer pour que ce soit plus clair. Les noms avaient peut-être leur logique au début, mais la logique a changé. L’application a changé et a grossi. Charlotte ne s’en doute pas : les hésitations sur le nommage sont les signaux faibles de la catastrophe à venir. Aujourd’hui c’est l’itération 4. Charlotte hésite à renommer, elle se demande si c’est vraiment nécessaire. Elle a peur de tout casser. Cela lui rappelle les tours de Kapla des enfants : c’est génial à monter et à la fin ça se casse. Dès le début, la construction monte tellement vite qu’elle dépasse la taille de l’enfant. C’est rigolo, l'enfant monte sur une chaise pour construire encore plus haut. Il s’applique car il prend de plus en plus de risques de faire tomber la tour. Normal, elle est très haute. Puis c’est encore plus drôle quand l’enfant, debout sur sa chaise, est plus petit que la tour. Papa vient à son secours et le prend sur ses épaules. C’est génial, encore plus de construction possible. À la fin, papa et l’enfant sur la pointe des pieds ne respirent plus. L’enfant pose encore des briques de Kapla en haut de la tour. Avec une délicatesse extrême. Puis tout tombe dans un bruit retentissant. L'événement était attendu, et tout le monde rit. Je n’ai pas construit tout ça pour le faire tomber, moi. En plus, derrière le problème de renommage se cache un autre problème. Avec un peu de mauvaise foi, elle faisait comme si elle ne l’avait pas vu. Là, il devient plus flagrant. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D Elle a un problème avec le terme « kana ». Elle en parle difficilement : « La fonction affichera le kana en mode kana ou en mode rōmaji ». Ça fait deux fois le mot « kana » dans la même phrase pour deux utilisations différentes. Le terme « kana » pose problème, Charlotte-PO a sûrement mal expliqué. Elle décide de regarder à nouveau les vidéos du YouTubeur. Trois heures après et une dizaine de vidéos visionnées, c’est plus clair. 51 Un kana est une lettre japonaise. Une syllabe est un groupe de consonnes et de voyelles se prononçant d’une seule émission de voix. Une syllabe est un son qui peut s’afficher en mode « kana » (la lettre japonaise) ou en mode « rōmaji » (nos lettres latines). Conclusion : l’objet Kana n’est en fait pas un objet Kana mais un objet Syllabe qui a deux sousobjets : Kana et Rōmaji. La leçon est une leçon de syllabes, et c’est la devinette qui affichera à deviner soit le kana, soit le rōmaji. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D Encore plus de renommage. Et pas que du renommage. Là c’est sérieux, il faut changer des concepts, casser du code. Beaucoup. Charlotte est en pleine réflexion. Moi aussi, au début, je voulais écrire du code évolutif. Du code qui peut évoluer facilement, tout le temps. Pourquoi n’ai-je pas réussi ? J’aurai dû, dès le début, écrire du code évolutif dans toutes les directions… Comment aurais-je pu connaître toutes les directions possibles ? Charlotte se rend compte que la tâche aurait été trop grande, trop vaste. Non, au début, je ne pouvais pas savoir. C’était même le pire moment, au début, pour savoir comment le produit allait évoluer. Je pensais que les utilisateurs allaient beaucoup me faire travailler sur les fonctions de partage des réseaux sociaux, je ne pensais pas que j’allais travailler autant sur les leçons. Le début, c’est le moment où j’en savais le moins. Comment aurais-je pu, à ce moment-là, concevoir le plus ? Je ne peux pas tout prévoir, il y a trop de directions possibles. Charlotte se sent moins fautive, elle comprend ce qui s’est passé. 52 Elle était concentrée sur le résultat à obtenir, une application qui fonctionne, elle n’était pas concentrée sur le chemin pour obtenir ce résultat. Le code actuel fonctionne, mais il n’est plus évolutif. C’est une petite falaise maintenant ce code. Elle ne se résout pas à casser tout ça. Contrairement à la tour de Kapla, là ce n’est pas drôle. Quand ses enfants montaient la tour ils prenaient du plaisir : le pouvoir de création. Ils ont eu plaisir à fabriquer la tour … jusqu’à ce que la tour se casse. À chaque Kapla posé, ils mesuraient la solidité du système. Ou plutôt la fragilité du système. La fragilité était visible. Chaque Kapla supplémentaire faisait tanguer la tour. Charlotte aurait monté une tour de fonctions. Dont elle ne voyait pas la fragilité. Et maintenant que sa tour casse, elle est surprise, elle n’avait pas anticipé ça. Elle aurait bien aimé voir avant que c’était fragile et que ça allait casser, pas quand ça casse. Elle voit ça comme une fatalité. Ce n’est pas ma faute. J’ai bien travaillé et la fin logique serait que tout est à refaire. Ce n’est pas juste. Au travail, c’est pareil, il faut souvent refaire des gros morceaux, des objets entiers, des modules, parfois même des applications entières. Il y a eu beaucoup de construction, des années de développement avec des grosses équipes, et à la fin il faut tout refaire. C’est un cycle presque accepté : « l’application est trop vieille, il faut refaire », « l’application a trop O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D grossi, il faut refaire », « impossible d’ajouter facilement ces fonctions, il faut refaire ». Charlotte est dépitée. Ce n’est pas possible que le cycle du développement logiciel soit de refaire des applications quand elles deviennent grosses, comme si le développement logiciel était une construction de tours de Kapla. Et puis ça coûte cher de redévelopper des applications juste parce qu’elles sont devenues grosses. Grosses et fragiles. Ne peut-on pas être plus sérieux que ça ? Ne peut-on pas être plus industriel que ça ? Construire gros et solide, ce n’est pas possible ? 53 C’est comme si le développement avait une limite. C’est comme si le développeur avait pour limite sa capacité à construire sans casser. Quand je développe, j’ai tout en tête. Je vide ma tête, je prends un nouveau problème, et je recommence, je passe à la fonction suivante. Finalement, j’ai obtenu un tas de petites fonctions, mais je suis perdue. Je n’y arrive pas pour deux raisons : 1. Ce n’est pas possible de tout voir au début. 2. C’est trop gros pour tout voir en même temps. Conclusion, je suis limitée : c’est difficile de gérer toutes les informations en même temps et en plus d’en ajouter d’autres. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D La limite de l’artiste. Je dois faire comment pour ne pas tout casser tout le temps ? Pour ne pas avoir un bazar pareil ? Ranger. Au fur et à mesure. Ranger et maintenir rangé. Elle repense au rangement de son garage : un seul rangement en cinq ans. Résultat, c’était devenu un vrai foutoir. Le rangement de l’été a été profitable : beaucoup de choses jetées et de l’espace retrouvé, des choses nouvellement accessibles. Charlotte avait déclenché une dispute avec son mari en prétextant que c’est lui qui ne rangeait pas et qui provoquait le désordre. Elle lui a demandé de ranger souvent. Son code est devenu comme le garage. Comme la tour de Kapla. Le code a besoin de rangement, sinon on ne pourra plus s’en servir : il faudra tout refaire. 54 O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D Appel à un ami Trop de doutes, Charlotte a besoin de conseils. Marc est indépendant, il est très fort techniquement et très gentil, ça va bien se passer c’est sûr. Elle a toute confiance. « Marc mon ami, tu pourrais me faire une revue de code ? J’ai beaucoup avancé et j’ai besoin de tes feedbacks pour continuer. Je me pose quelques questions sur des endroits bien précis, mais le mieux je pense c’est que je te laisse regarder. — D’accord, pas de soucis, je regarde ça. — Merci ! » 55 Charlotte n’a pas osé être franche : elle l’attend comme le sauveur. Il a toujours de bonnes idées, avec ses commentaires je vais repartir de plus belle. La tour de Kapla défiera les lois de la gravité. Marc met un peu de temps à s’y mettre. Charlotte trouve le temps long. Elle a pour sa part arrêté toute activité de développement. En fait, elle est bloquée. Si elle continue comme ça sans rien changer, elle voit bien que ce n’est pas une tour mais plutôt une décharge de Kapla qu’elle construira. Elle attend les commentaires tous les jours et rien. Elle vérifie, il ne s’est pas encore connecté. Elle n’est pas sûre que Marc soit intéressé finalement. Elle bascule sur d’autres activités qu’elle avait laissées de côté dans sa passion créatrice. Elle écrit des tests. Le test doit proposer des devinettes de la leçon ainsi que de ses précédentes leçons. La leçon précédente n’existe pas vraiment. C’est une astuce aujourd’hui qui rend ça possible. Je dois ajouter un ordre de leçons. Dans quel objet ? Pas facile non plus, certaines questions sont les mêmes. Elle observe son code longtemps, et la conclusion est toujours la même : il faut casser du code. Ou alors un petit bout. Elle essaie d’identifier une petite partie cassable. Pas facile, tout est lié. « Charlotte, il faut qu’on se parle. » O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D C’était direct. Pas forcément brutal se convainc-t-elle. « C’est du niveau de toutes les sociétés d’informatique : sale et efficace. » Charlotte ne sait pas quoi répondre, elle tente une explication : « j’ai développé tout ça en 4 semaines, j’ai eu plein d’idées et j’ai dû faire plein d’allers-retours. Les utilisateurs sont ravis, ils utilisent vraiment l’application. » Marc n’écoute pas les excuses. 56 « Raconte-moi ton code. Ça commence où ? — Là : le fichier index. Puis les appels de tous les objets, l’objet qui lance l’application est Devinette, il contient la fonction LancerUnEntrainement qui va créer la Leçon. La devinette sera un kana de la leçon. Le jeu consiste à trouver quel est le bon rōmaji qui correspond au kana affiché. L'entraînement est lancé quand la fonction a associé le kana et les propositions à deviner. — C’est un jeu, une devinette ou un entraînement ? —… — Comment tu peux t’y retrouver dans ton code si tu ne sais pas de quoi tu parles ? — Oui, c’est un peu difficile à expliquer. C’est un entraînement. — Une devinette c’est plusieurs entraînements ou un entraînement c’est plusieurs devinettes ? Et un jeu c’est quoi ? — … Je ne sais pas, mais les utilisateurs sont ravis. — Ouais ben pas le développeur, lui, il pleure. » O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D Charlotte soupire et marmonne. Tous les feedbacks sont méchants en fait. Ils ne se rendent pas compte que les gens travaillent dur pour ça, pas obligé de se fâcher. Elle tente une réponse argumentée : « Au début je me suis inspirée de Google traduction, donc oui c’était une devinette, et puis avec l’alphabet japonais il faut s’entraîner, et puis quand les utilisateurs ont joué il est devenu pertinent de … — Bon arrête, il faut renommer. » Charlotte est déçue, les remarques de Marc ne lui apprennent pas grand chose. 57 « Il n’y a pas un autre moyen ? Il y a beaucoup de lignes de code quand même. — Ecoute, là, je suis plutôt inquiet sur ta production au travail. Si tu veux, je t’aide. Je te propose qu’on refactore tout, petit à petit. — C'est-à-dire ? — On refactore, on débranche, on rebranche. D’habitude tu ne fais jamais de refactoring ? — J’ai lu des articles, je n'en n’ai jamais fait. » C’est un aveu, elle comprend qu’elle n’a plus le choix, si elle veut son aide, si elle veut progresser, il faut avouer. « J’ai déjà vu du code refactoré. C’est pas mal, j’essaie de m’en inspirer. — Pas mal … Tu ne peux pas t’en inspirer, en fait ! Tu n’y arriveras JAMAIS en une fois. Si tu ne refactores pas ton code, il est pourri, il mourra bientôt. » Charlotte est déçue : cette discussion est trop compliquée, on ne parle même pas technique. En plus remettre en cause sa compétence à développer, c’est vexant. Marc est en train de dire qu’elle travaille mal. « Pourquoi je n’y arriverai jamais en une fois ? — Écoute. Quand tu écris un mail important, tu fais comment ? — Et bien je fais attention. — Moi j’ai déjà envoyé des mails que je n’aurais pas dû. Mal écrits, mal reçus. — Oui, moi aussi ! Depuis je fais attention justement, je m’impose un processus qui marche bien : 1. D’abord, je ne remplis pas la zone “destinataire”, je le fais à la fin quand je suis contente du mail. 2. J’écris toutes mes idées, brutes. 3. Je relis en vérifiant que tout y est. Ma vérification est facile, je contrôle que tous les points que je veux aborder sont présents. 4. J’écris la conclusion. 5. Je réécris deux ou trois fois la conclusion en testant qu’elle est bien cohérente avec les données brutes présentées. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D 6. Je déplace la conclusion tout en haut du mail. Comme ça mon expéditeur saura tout de suite ce que je lui demande. 7. Je reprends mes données brutes, je les positionne tout en bas du mail avec la mention “Plus précisément”. 8. Je relis mes données brutes, je les réécris pour qu’elles soient compréhensibles. 9. À la fin je fais une dernière relecture, voire une deuxième. 10. J’ajoute le ou les destinataires et j’envoie. — Tu es trop forte. — Comment ça ? — Tu sais refactorer un mail mais tu ne sais pas refactorer du code. » Là c’est dur. Elle ne sait plus où elle en est. 58 « Tu écris ton mail, ça marche. Puis tu retravailles ton mail, ça marche encore. Tu l’améliores, ça marche toujours. Tu es tellement satisfaite que tu décides de l’envoyer. Le code c’est pareil. Tu sais développer, ça marche. Et finalement, est-ce que tu es contente de ton code ? — C’est vrai que je ne suis pas perfectionniste moi, je suis plutôt rapide. — Attention aux mots. Un perfectionniste, il n’y arrive pas : il est toujours à vouloir refaire les choses car il ne les trouve jamais assez parfaites. Un mail important, tu le traites rapidement ? — Non, j’utilise mon process. — Traite ton code comme quelque chose d’important. » O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D À ce moment-là, Charlotte reçoit trop d’informations en même temps, qui génèrent trop de réflexions en même temps. « D’accord, je vais tout nettoyer, répond-elle, résignée. — Surtout pas. » Décidément la discussion est difficile. 59 Marc reprend calmement : « Si tu nettoies tout, ça va prendre du temps. Tes utilisateurs peuvent attendre ? — Je ne sais pas, avoue-t-elle. — De plus, qu’est-ce qui nous garantit que tu ne vas pas recommencer ? Que tu ne vas pas me rappeler dans deux mois car ton code est de nouveau illisible ? — Je ne sais pas, avoue-t-elle à nouveau. — Qu’est-ce qui est le plus cool à faire selon toi ? — Développer une nouvelle fonction. — Et bien je vais te montrer comment développer une nouvelle fonction en faisant du refactoring. — Mais attends, je n’ai pas le droit d’en faire, moi, d’habitude. Au travail, je dois respecter le budget qui m’est attribué et puis le tech lead doit faire une présentation sur le refactoring, mais là on n’a pas le temps. — Tu as sûrement raison, et ce sont d’autres problèmes. Concentrons-nous sur maintenant si tu veux bien, ici personne ne t’en empêchera. » Marc propose de ranger souvent. Marc l’autorise à ranger souvent. Elle procrastinait, le chantier était trop gros. Elle a hâte maintenant. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D Montre-moi Marc prend le clavier. Il parcourt le code en le lisant à voix haute. Ça va vite. Charlotte a du mal à anticiper les déplacements du curseur sur l’écran, elle cherche un repère en regardant les mains de Marc sur le clavier. Il utilise des raccourcis, elle ne sait pas ce qu’il fait. Elle ne comprend rien. Elle se sent nulle. « Ça, ça n’a pas besoin d’être gros : ces fonctions sont longues et celles-là ont plus de trois paramètres, c’est trop. C’est quoi cet amas de données dans cette fonction, tu es sûre que la fonction fait une seule chose ? Le nom que tu lui as donné est forcément faux. Là, tu ne décides pas : il y a beaucoup de cas différents, c’est difficile de comprendre, le métier a autant de chemins alternatifs ? Je vois aussi beaucoup de champs temporaires, c’est suspect tous ces changements.» 60 « Là, tu décides et je ne sais pas pourquoi : je vois un nombre magique. — Pourquoi magique ? — Magique pour moi, je ne sais pas pourquoi il est là, rien ne me l’explique. Si c’était une constante tu l’aurais nommée et je comprendrais à quoi elle sert. » « Ces commentaires ne disent pas la même chose que la fonction. Qui a raison ? » « Ici, on dirait que tu fais exprès de fabriquer des choses difficiles : beaucoup d’objets sont ouverts, et pourquoi ces deux objets sont systématiquement passés en paramètres de ces sept fonctions ? « L’objet syllabe est compliqué pour rien, ces fonctions ne sont pas utilisées : pourquoi as-tu créé des syllabes dakuten et handakuten ? — C’est pour le moment où je voudrais faire des leçons de dakuten et handakuten… En répondant à la question Charlotte comprend le problème. — Charlotte, n’écris pas du code pour le cas où. Nous ne sommes pas omniscients nous autres les êtres humains, en général nous sommes de mauvais spéculateurs. Ce code que tu as écrit pour une fonction qui pourrait arriver dans le futur, cette fonction dont personne ne veut maintenant, qui va l’utiliser et te donner du feedback ? Ah et puis là c’est du code dupliqué. — Non, ça c’est pour le cas où… » Regards croisés en silence. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D 61 « Marc, j’avais bien compris que ce que j’avais fait n’allait pas, tu devais me montrer. — Oui, oui c’est vrai. Bon écoute, les problèmes d’écriture de code sont connus et résolus. Tu n’as pas à inventer des solutions pour ça, tu dois juste les connaître et les appliquer. — Je sais. Tes remarques sont pertinentes mais je risque de tout casser si je les prends toutes en compte. — Prends-les une par une. — Une par une… Je répète, je vais tout casser si je remanie en permanence. — Pas si tu as des tests. — Je ne vois pas le rapport. — Ton premier “jet” de code qui marche est bien car il marche, mais il n'est pas du tout satisfaisant car il n’est pas remanié. Cela revient à construire sur des bases fragiles, ça va forcément casser. » Charlotte sourit, elle pense que Marc a dû construire beaucoup de tours de Kapla, lui aussi. Marc reprend : « Aucun développeur au monde ne peut écrire du code satisfaisant du premier coup, heureusement il y a le refactoring pour ça. Les remaniements successifs rendent le code acceptable. — Comme mon process d’écriture de mail. — Exactement. Tous les points que j’ai soulevés doivent être vus lors du refactoring. » Charlotte est en pleine réflexion. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D « Tu peux me montrer concrètement ? — Oui. Quelle est la prochaine fonction à développer ? — “Afin d’éviter les déductions, en tant que Charlotte, je veux apprendre à un niveau difficile”. — Tu as la spécification ? — Oui, voici : Spécification : 62 • Une leçon peut être lancée en 3 modes : facile - normal - difficile. • Le mode facile propose les kana de la leçon uniquement. • Le mode normal propose les kana de la leçon lancée ainsi que les kana des leçons précédentes. • Le mode difficile propose les mêmes kana que le mode normal. • Le mode difficile affiche au maximum 5 propositions pour chaque devinette. • Aléatoirement, le mode difficile peut afficher des propositions à deviner avec ou sans la bonne réponse. — D’accord, c’est parti. » O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D Un nouvel espoir Charlotte est très attentive. « Charlotte, comment vas-tu tester ? » Déconcentration totale : Charlotte ne comprend pas pourquoi Marc pose cette question. « Je ne sais pas encore. — Tu dois le savoir maintenant. » Charlotte a du mal à rester concentrée. 63 « Marc, d’abord nous codons. Après, nous testons. — Non, coder, ce n’est pas un travail à la chaîne. Coder nécessite beaucoup d’allers-retours pendant le développement. Ton mail, tu l’as écrit en une fois ? — Non, Marc, mon mail, je ne l’ai pas écrit en une fois. — C’est ça. À chaque fois que tu le modifiais, tu le testais. Tester permet de construire. » Charlotte est au bord de la rupture, elle envisage une reconversion. Marc lâche le clavier, il voit qu’il la perd. « Charlotte, je t’ai dit que je te montrerai, je te montre. Tu vas comprendre, c’est toi qui fais. Je répète : comment vas-tu tester cette nouvelle fonction qui va permettre à ton utilisateur d’éviter les déductions ? » Charlotte accepte la question, elle veut comprendre. « Je vais tester … trois choses : 1. Que les propositions de la leçon soient les kana de la leçon. 2. Que la bonne réponse soit présente dans les propositions de la leçon. 3. Que la bonne réponse ne soit pas présente dans les propositions de la leçon. — Commençons par le premier test. Écris le libellé du test. — D’accord : les propositions de la leçon devraient être les kana de la leçon. Ah ! Mais une fonction que j’ai codée le fait déjà, pas la peine d’écrire le test ! — Quelle fonction ? — Eh bien la fonction de niveau normal propose déjà les kana de la leçon lancée plus ceux des leçons précédentes. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D — Premièrement, sois plus précise, modifie le titre s’il te plait : les propositions de la leçon difficile devraient être les kana de la leçon normale. Deuxièmement, tu me dis que le test existe déjà ? — Non, mais le code oui. — Charlotte, tu me dis que ce n’est pas la peine d’écrire un test qui n’existe pas d’une fonction qui existe. Autrement dit, rassurez-vous messieurs-mesdames les utilisateurs, je n’ai pas testé mais ça marche. — …J’ai testé en jouant avec l’application, ça compte, non ? — C’est déjà ça. Tu as joué combien de tests ? Comment pouvons-nous savoir si les tests que tu as joués sont suffisants ? Ils faisaient quoi exactement ces tests ? Tu peux les refaire là, maintenant ? — … Je ne sais plus exactement. — Alors écrivons le test, comme ça nous serons sûrs de ce que nous testons. » Charlotte réfléchit, elle a l’intuition que Marc est peut-être en train de proposer de coller les Kapla. Il veut coller les Kapla pendant qu’il construit la tour. 64 « Charlotte, écrivons le test : les propositions de la leçon difficile devraient être les kana de la leçon normale. Qu’est-ce que ce test reçoit en entrée ? — Le test reçoit la leçon ka-ki-ku-ke-ko et les propositions a-i-u-e-o-ka-ki-ku-ke-ko. — Que doit-il afficher en sortie ? — Vrai. C’est la bonne liste de propositions de kana à deviner pour cette leçon difficile. — D’accord. Écris la fonction de test. Maintenant autre chose, comment doit s’appeler la fonction qui va être testée ? — Alors, nous allons dire : kanaAAfficherPourLeçonDifficile, mais je ne l’ai pas encore développée ! — Normal, crée la fonction mais ne la développe pas. Et comme elle n’est pas vraiment créée, faislui renvoyer Faux. Maintenant le test est complet, lance-le. Que dit-il ? — Ben, il dit Faux. C’est normal hein car nous n’avons pas codé la fonction kanaAAfficherPourLeçonDifficile. — Effectivement, nous l’avons appelée dans le test et nous ne l’avons pas codée. Codons maintenant cette fonction de la manière la plus simple possible. — Même si c’est mal écrit ? — Même si c’est mal écrit. — D’accord… Voilà. — Relance le test. Maintenant que dit-il ? — Vrai. — Nous avons maintenant la fonction et son test. Et le code marche. Regarde à nouveau la fonction. Tu la trouves comment ? — Pas très jolie, je peux réutiliser une fonction existante et enlever un paramètre. — Une action seulement, commence par la première. Relance le test pour vérifier que le code marche toujours. Qu’en dis-tu maintenant ? O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D — Je peux enlever un paramètre. — Vas y, le test est toujours vert ? Ok. Et maintenant ? — C’est mieux. Je peux encore renommer des variables. — Ok, n’oublie pas de relancer le test. Et maintenant ? — Ça va. » 65 C’était mal écrit, mais ça marchait. Charlotte a émis des feedbacks et elle a itéré. C’est mieux. Tiens, ça lui rappelle quelque chose. Marc est tout souriant. « Charlotte, nous avons codé un test que nous avons pu lancer trois fois instantanément, et grâce à ce test, nous avons refactoré notre code trois fois sans nous inquiéter de tout casser. » Charlotte est épatée par un point : ce n’était pas dur. L'exercice intellectuel d'écriture et de réécriture du code était plus facile que lorsqu’elle écrit du code sans test : le code a été écrit comme une réponse à l’écriture du test. Elle compare son code précédent et celui-ci et, indéniablement, le résultat est meilleur. Elle en est contente. « Ce n’est pas de la sur-qualité ? — Tester tu veux dire ? — Pas que tester, tout le process que tu m’as montré : 1. Ecrire des tests avant de coder, 2. coder, 3. refactorer, 4. recommencer. — Tu le trouves comment ton code comme ça ? » O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D Charlotte repense à toutes les remarques de Marc quand il a lu son code la première fois. « Mieux. Et tu fais tout le temps ça ? — Oui. — Et ça marche tout le temps ? — Oui. Tu n’auras plus besoin de regarder méticuleusement ton code pour savoir ce qui ne marche pas. Imagine que tu fais ça tout le temps. Le débuggage consistera à regarder quel test ne passe pas. Imagine le nombre de tests que tu auras si tu en as environ trois par fonction, que tu peux lancer immédiatement. Tu n’auras plus peur de rien. Si tu as de meilleures idées, tu pourras modifier ton code à ta guise, et le remanier. Ton code deviendra de plus en plus robuste. » Charlotte est admirative. Marc colle les Kapla. Marc construit des tours solides. 66 O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D Pas facile Deux heures que Charlotte écrit ce test. Pourtant avec Marc c’était rapide. C’est le premier qu’elle écrit toute seule et c’est douloureux. Elle râle. Avec Marc on n’avait fait que le début en fait. En fait, c'était un cas facile. C’était facile car nous n’avons pas fait grand-chose. 67 Charlotte n’arrive pas à écrire un test. Deux heures que ça dure et ce n’est pas fini. Ça ne marche pas son truc. De plus, elle a l’impression d’écrire des évidences. Le test doit tester qu’il y a un maximum de cinq propositions. Je crée un test qui prend cinq propositions en entrée, je lui dis de renvoyer vrai. Ce test ne sert à rien ! Charlotte est chagrinée. Elle n’a pas le choix, elle doit rappeler Marc. Si elle abandonne maintenant tout ça n’aura servi à rien, et elle ne sera pas plus avancée. « Marc, j’écris un test et je n’y arrive pas. Sans te fâcher, tu as cinq minutes pour regarder le code avec moi ? — Oui. Partage ton écran. Tu fais quoi avec ce test ? — Je teste que mes propositions ne dépassent jamais cinq. J’ai des impacts partout ! Normal hein ça remet en cause ce que j’ai déjà développé avant. J’ai plein de choses à tester maintenant avec ta technique. Je nettoie une fonction, qui en appelle une autre et caetera. J’en ai partout. — Je vois. » O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D Marc pose un long silence, Charlotte sent qu’elle perd patience. « Tu as beaucoup de choses à faire. Je vais te dire un secret : je n’ai pas de mémoire. Je suis un peu limité de ce côté-là. Mon atout à moi, c’est d’être précis. J’aime bien nommer clairement, je prends plaisir à définir les choses. — C’est de la fausse modestie, ça, tu es très fort, tout le monde le sait. Ça marche tout le temps ce que tu fais. — C’est bien que tu le croies, c’est bien que tout le monde le croie, en vrai pas tant que ça. Je déteste me rappeler des choses, je veux me décharger de ce type de savoir. Je me fais des listes de ce que je dois faire et je les coche. Comme aux courses, pareil. — C’est pas compréhensible ce que tu dis. » Charlotte en a marre de ne rien comprendre. Elle rumine : ok je ne sais pas coder, ok je ne teste pas, ok mon code n’est pas maintenable et lui il y arrive car il est bête. Elle devient irritable, elle le voit bien, et Marc remarque son énervement. Il est amusé, il n’est pas étonné. Il ne s’attendait pas à ce qu’elle y arrive du premier coup. 68 « Pardon pardon, je vais être un peu plus clair. Ce que tu as à faire pour ce test-là, c’est beaucoup de choses. — Ah ! — Oui, je ne sous-estime pas ton travail, bien au contraire. Peu de développeurs vivent une expérience pareille. Il te faudra la raconter. » Charlotte est toute ouïe. « Tu as beaucoup de choses à faire, fais une liste. Une chose à la fois s’il te plait. Ce n’est pas un travail difficile ma technique, pas besoin d’être un savant. Je ne suis pas en train de te proposer une révolution dans ton code, les gros changements ne marchent pas, on ne sait jamais quoi faire. Tu réussiras si tu fais des petits changements, plein de petits changements tout le temps. » Charlotte réalise qu’elle voulait encore aller vite. Elle voit bien que rien que de penser à écrire la liste, ça l'énerve, elle a envie d‘aller plus vite que cela. « Grâce à ta liste, à chaque fois que tu modifies ton code, il doit être meilleur. Tu codes et tu vois d’autres modifications à faire : note-les, s’il te plait. Fais-toi un fichier TODO et liste tous tes points. » Devant l’ampleur du travail à faire, elle n’avait pas fait de liste. La liste aurait été trop grosse, démoralisante. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D « Tu sais voir quand les standards de code ne sont pas respectés, quand les nombres magiques sont utilisés, quand le formatage est incorrect, quand les classes sont trop grosses, que les noms sont mauvais, enfin tout ça tu sais très bien le faire. » Charlotte reçoit des félicitations, c’est une expérience nouvelle. « Prends ton temps ! Les tests vont te protéger, ils ne vont pas te tuer. Deviens une experte des petits pas. Quand on n’a pas de mémoire comme moi c’est facile, je suis obligé de noter tous les points à modifier, et j’écris autant de tests qu’il faut pour les traiter. Comme ça je libère mon esprit de tous ces problèmes que je vois et je consacre mon attention toute entière à la correction de chaque point. » C’est plus clair pour Charlotte maintenant : elle doit accepter de ne pas en faire trop. « Je sais que ça prend du temps de faire confiance. Tu as confiance en moi ? Eh bien fais confiance au process. Si c’est une discipline, c’est facile. » 69 O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D Le développement est sinueux, pas linéaire Cela fait maintenant deux semaines que Charlotte suit les conseils de Marc. Les nouvelles fonctions sont faciles à reconnaître, ce sont celles qui ont des tests. Une cinquantaine de tests pour une dizaine de nouvelles fonctions. Facile à lancer, facile à débugger. Avant, elle ne touchait plus à son code quand il marchait. Aujourd'hui, si elle ne peut pas y toucher, elle suspecte que le code ne marche pas. 70 Avant, coder vite la grisait. Aujourd’hui, coder lentement la rassure. Le lièvre et la tortue, ça l'énerve. C’est un exercice nouveau d’améliorer le code en permanence, un luxe qu’elle ne s’autorisait pas avant. Avant, elle l’améliorait un peu bien sûr. Un peu. Elle a encore plein de questions. Le refactoring est possible grâce aux tests écrits avant de coder. Ceux qui veulent aller vite ne font pas de refactoring et ne font pas autant de tests. Ses fondamentaux conception-développement-tests sont modifiés, c’est toute sa connaissance du génie logiciel qui est remise en cause. « Marc, la conception bouge beaucoup pendant le refactoring. — Oui, et alors ? — Alors, cela veut dire qu’au début la conception est fausse ? — Non, ça veut dire que tu améliores au fur et à mesure que tu construis. Je te l’ai déjà dit, personne ne peut construire du code parfait du premier coup. Le refactoring te permet de ne pas être coincée avec ta conception initiale. Quand tu es face à un problème, tu te sens capable de trouver la bonne solution en une fois ? — Pas toujours, non. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D — Le refactoring te permet de trouver la bonne réponse, car en plusieurs fois tu as plus de chances d’y arriver. — Je vois, donc je dois retravailler plusieurs fois mon code ? — Je répète, tu te sens capable de trouver la bonne solution en une fois ? — Non… — Ne pas refactorer, c’est croire que développer est une formule linéaire. C’est tout le contraire. Ce n’est pas parce que le code se lit de haut en bas qu’il a été écrit de haut en bas. L’écriture du code suit un chemin itératif, non linéaire. — C’est dommage de devoir refaire. — Pas refaire, améliorer. Si tu ne refactores pas, ton code pourrira. L'entropie est un phénomène naturel, le refactoring est un process pour lutter contre. » Marc sourit tout le temps, il est moins brutal. « Refactorer, c’est la meilleure méthode connue pour écrire du code améliorable. Le process fonctionne, tu peux lui faire confiance : tester-coder-refactorer, c’est LE process de construction d’un code maintenable. » 71 Charlotte réfléchit, elle ne voit pas comment expliquer ça à son chef lundi. « Tu es d’accord que ce process coûte plus cher que juste coder ? — Oui, la qualité du code coûte cher si c’est ce que tu veux dire. Tout le monde serait d’accord pour faire du code maintenable si ce n’était pas cher. Je te pose la question, ce code est-il maintenable ? — Oui oui. » Charlotte connaît maintenant le prix du code maintenable. Elle y repense, peut-être que ce code maintenable coûte moins cher que de devoir tout refaire de temps en temps, se convainc-t-elle. Il faudrait essayer ça au travail. Malik est curieux, avec lui ça devrait aller. Charlotte reconsidère sa notion de collage des Kapla. Ce n’est pas de la colle entre les kaplas que Marc a posé : ce sont des bouts de scotch. À chaque nouveau test, il enlève des bouts de scotch et il replace des bouts de scotch. Il modifie le nombre de Kapla ainsi que leur positionnement sans faire tanguer la tour. Il modifie des tests et il modifie du code sans rien casser. Il a trouvé un moyen de construire en solidifiant la construction. Et si ça se trouve, ce n’est pas plus cher. Le code avant refactoring et le code après refactoring ne sont pas comparables. J’espère bien que le code remanié aura moins de défauts. Charlotte a fait deux grandes découvertes : 1. La pratique du refactoring s’appuie sur les tests. 2. Les tests permettent de refactorer sans casser le code. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D Elle ne développait pas mal avant, elle développait dangereusement. Charlotte vivait dans l’angoisse de ne pas être efficace, elle avait du mal à refaire car refaire c’était casser, refaire c’était ralentir. Comme une artiste, elle était émotionnellement attachée à son travail, refaire était un aveu d’échec. Elle a appris que coder ce n’est pas faire du code refactoré, mais plutôt faire du code refactorable. 72 Le problème du garage était qu’il n’était plus rangeable, c’est pour ça qu’il a fallu tout ranger. D’ailleurs au dernier rangement elle a mis en place des espaces plus pratiques. Le garage aura besoin d’autres rangements, elle s’en doute bien. Elle espère seulement que les rangements suivants seront moins douloureux. Elle a trouvé des moyens de maintenir le garage rangé. Par exemple, le panier vide à l’entrée du garage qui permet de poser rapidement les petites affaires de vélo (lunettes, gants) sans devoir les ranger, et de les retrouver facilement à chaque sortie, c’est une amélioration qui marche bien, elle en est très fière. Charlotte comprend qu’elle doit réaliser un code aménageable, facile à maintenir. Le refactoring permet de maintenir le code rangé. Dans son code, il y aura des allers-retours ; le refactoring est le process non linéaire d’écriture du code. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D Le travail du développeur Deux mois ont passé depuis l’échange avec Marc. Charlotte et Malik vénèrent le refactoring. Ils se sont isolés des autres, ça tombe bien ils ne sont que deux développeurs sur leur projet. Ils ont bien tenté de présenter leur démarche aux autres développeurs de la société, ils ont animé un atelier à la communauté des développeurs. Les réactions ont été décourageantes : « Impossible chez nous, c’est trop gros. — Chez nous c’est très compliqué, il y a beaucoup de règles légales à respecter. — Moi je n’ai pas d’activité refactoring prévue dans mon rapport d’activités, si j’en fais je vais devoir dépasser sur une de mes autres activités prévues. » 73 Tant pis pour le projet de sauver le monde, Charlotte et Malik sauveront leur projet. Sylvain, leur PO, leur fait confiance, il parle tout le temps feedback utilisateurs et n’intervient pas dans leurs affaires. D'ailleurs, il n’a pas le temps, Charlotte et Malik ont toujours une version de logiciel à lui montrer. Nous sommes en août, Charlotte est à la plage. Malik est en arrêt, et ce n'était pas prévu, cas de force majeure. Sylvain n’a plus son équipe de choc mais il est serein, le logiciel a fait ses preuves pendant la recette avec le métier. Yoann sait tout ce qui se passe en production, c’est son travail. « Allo Sylvain ? Ton site est cassé, enfin une partie. » Sylvain arrête toutes ses activités. « Ça veut dire quoi ? Qui a fait quoi ? » — Je ne sais pas qui a fait quoi, je vois juste qu’un service ne fonctionne pas. Ça m’inquiète. Qui est là ? Ton équipe ne répond pas. — Personne. Personne n’est là. — C’est embêtant ça, Sylvain. — C’est pas mon problème, moi je ne m’occupe pas de technique. Demande aux autres développeurs. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D — Tu crois que les développeurs aiment bien les bugs peut-être ? Ils ne se sentent pas très concernés quand c’est leur code et que ça marche sur leur poste, alors quand ce n’est pas leur code je te laisse imaginer l’engouement. Bon j’appelle qui ? — Je ne sais pas ! Et toi tu peux non ? — Non, moi je ne suis pas compétent pour ça. » Sylvain est démuni. Yoann reprend : « Écoute, nous allons y arriver. Envoie-moi un développeur disponible ce matin, je lui explique les contraintes opérationnelles et il corrige ça. » Sylvain est énervé, ils sont embêtants ces informaticiens, ça ne peut pas être simple. Yoann a raison, aucun développeur ne se rend disponible. « Je ne sais pas ce qu’ils ont fait, je préfère ne pas y toucher. » « Je ne connais pas cette technologie, je ne suis pas la bonne personne. » « Ça sera trop long, je n’ai pas le temps. » 74 Sylvain se demande qui n’aura pas le courage de refuser : Alexandre. Un jeune stagiaire sympathique. Sympathique et stagiaire. Sylvain n’a pas vraiment le choix, et il ne veut plus que ce soit son problème. Il se prépare mentalement à expliquer en haut lieu les causes et les conséquences de l’incident. Yoann ne s’offusque pas du choix du développeur, ils commencent à travailler. « Allo Sylvain ? Tu peux faire des tests et me confirmer que c’est bon pour toi ? » Sylvain ne comprend pas ce que Yoann lui demande, il est dans ses slides en pleine analyse des impacts financiers. « Tester quoi ? Tu m’as dit que tu étais inquiet et que ça risquait de recommencer. — Maintenant ça marche, j’ai besoin de toi pour les derniers tests. » Sylvain se dit que c’est Noël, pourtant pas si tôt d’habitude. « Effectivement, ça marche, je ne vois pas de différences avec ce qu’ont fait Charlotte et Malik. — Bon, parfait, nous déployons la version. — Vous n’avez rien changé ? Il n’y a plus de problème ? — Alexandre a corrigé le problème. Il est chouette, tu devrais le garder. » O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D Sylvain juge ceci incompréhensible. Tous les autres développeurs-experts-soit-disant-très-fortssur-des-sujets-sensibles ne s’y sont pas risqués et Alexandre a tout plié, tout seul. Un génie, ce stagiaire. Sylvain le garde sur le projet et chante ses louanges au monde entier. Charlotte et Malik sont de retour, un peu penauds. Ils ont bien compris qu’ils ont raté un moment important et tentent de recoller les morceaux. Ils sont ravis d’avoir un nouveau collègue aussi compétent dans leur équipe, Alexandre n’est pourtant pas très expérimenté. « Ah c’est vous l’équipe de Sylvain. Merci à vous deux, vous êtes géniaux. — Alexandre, c’est plutôt toi le génie qui a sauvé le projet, bravo à toi. — Ah non non, moi j’ai juste lu et lancé vos tests. » Charlotte et Malik sont intrigués. 75 « J'ai regardé les logs et j'ai vu les données que recevait le service. J’ai cliqué sur testrun, puis j'ai modifié les données en entrée d’un test pour voir. J'ai vu ce qui ne passait pas. J’ai lu votre code, il est super bien écrit ! Trois corrections. J'ai relancé les tests, et c'est passé. Yoann a déployé et c'était fini. Je ne suis pas fort hein, je veux apprendre. Je suis très content de vous rencontrer, vous pouvez me montrer comment vous avez fait tout ça ? C’est super pratique. » Charlotte est impressionnée, même si elle se dit qu’il faut vite aider Alexandre à écrire de nouveaux tests plutôt que de remplacer les tests existants. Elle est fière que le code soit maintenable, même par un junior. Charlotte a progressé : elle connaît maintenant sa responsabilité de développeur. Elle ne rendra plus négociable les activités de refactoring. Ce doit être fait. Ce n’est pas clairement dit, mais tout le monde compte sur le développeur pour que les activités de refactoring soient réalisées. Le refactoring c’est tout le temps, et c’est normal. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D 76 O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D Le mot de la fin : Remerciements : Merci à Yohan et Marion, Christophe, Aryana, Marc, Alexandre, Ivan, Sonny, tous les relecteurs OCTO et OCTO Toulouse. O C T O P R E S E N T S > P R O J E C T E U R S S U R S Y LV I E P O N T H U S -V I O L L A N D OCTO Technology CABINET DE CONSEIL ET DE RÉALISATION IT “ Dans un monde complexe aux ressources finies, nous recherchons ensemble de meilleures façons d’agir. Nous œuvrons à concevoir et à réaliser les produits numériques essentiels au progrès de nos clients et à l'émergence d’écosystèmes vertueux. ” – Manifeste OCTO Technology – 78 2 PRODUITS PLUS DE 1OOO COLLABORATEURS 3 IMPLANTATIONS Paris Toulouse Hauts-de-France OCTO EN TÊTE DU PALMARÈS 6x 3 CONFÉRENCES La conférence tech par OCTO FORMATION Dépôt légal : Novembre 2022 Conçu, réalisé et édité par OCTO Technology. © OCTO Technology 2022 Les informations contenues dans ce document présentent le point de vue actuel d'OCTO Technology sur les sujets évoqués, à la date de publication. Tout extrait ou diffusion partielle est interdit sans l'autorisation préalable d'OCTO Technology. Les noms de produits ou de sociétés cités dans ce document peuvent être les marques déposées par leurs propriétaires respectifs.