Introduction
Il y a quelques jours jâai participĂ© Ă un meetup Evil mob programming : un coding dojo oĂč on peut vraiment ĂȘtre MĂ©chant. Jâai beaucoup aimĂ© cet exercice amusant et enrichissant. Ce retour dâexpĂ©rience va vous permettre, jâespĂšre, de mieux comprendre le rĂŽle de chacun dans le dĂ©veloppement de nouvelles fonctionnalitĂ©s dans un projet.
Quel Ă©tait lâexercice ?
Du Mob Programming ?
Je vous invite Ă lire cet article pour comprendre prĂ©cisĂ©ment le concept, ici je ne rentrerai pas dans les dĂ©tails. Le Mob Programming est une approche du dĂ©veloppement oĂč toute lâĂ©quipe travaille en mĂȘme temps sur le mĂȘme code, au mĂȘme endroit et sur un unique ordinateur : du Pair Programming Ă plusieurs.
Le but de cet exercice est dâarriver Ă produire quelque chose tous ensemble et de permettre Ă tous de participer activement au dĂ©veloppement.
Différents rÎles
Trois rĂŽles sont utilisĂ©s dans cette pratique. Comme pour le Pair Programming, on retrouve un âDriverâ et un âNavigatorâ :
-
Le âNavigatorâ est lĂ pour donner la route Ă suivre pour arriver Ă une nouvelle fonctionnalitĂ© ou au terme de lâexercice dans le cas de notre kata. Câest lui qui communique avec le âDriverâ pour lui donner la prochaine Ă©tape Ă effectuer et le code quâil va devoir produire.
-
Le âDriverâ implĂ©mente ce que le âNavigatorâ explique Ă lâoral. Tout le code quâil produit vient du âNavigatorâ, câest, pour rĂ©sumer, lâinterprĂšte entre lâhomme et lâordinateur.
-
Le reste de lâĂ©quipe participe activement en donnant son point de vue sur les choix du âNavigatorâ. Elle ne communique pas directement avec le âDriverâ pour garder un environnement productif.
Tout le monde y passe
Chacun, Ă tour de rĂŽle, va pouvoir passer au clavier pour ĂȘtre le âDriverâ ou avoir le rĂŽle de âNavigatorâ.
Dans notre cas, nous Ă©tions trĂšs nombreux (une quinzaine de âmobeursâ), nous changions de place toutes les 4 minutes. CâĂ©tait un peu court Ă mon goĂ»t, je pense que des rotations toutes les 8 Ă 10 minutes sont plus pertinentes si on fait lâexercice sur un plus gros laps de temps.
Mode âEvilâ ?
Avant de dĂ©marrer lâexercice, nous avons tirĂ© une carte pour savoir si nous allions avoir le rĂŽle de âMĂ©chantâ ou de âGentilâ. Les âGentilsâ ont un comportement bienveillant, ils tentent de faire avancer la session. Les âMĂ©chantsâ, en revanche, doivent essayer de la saboter sans que personne ne s'en rende compte.
Lâexercice proposĂ© ?
Nous avons travaillĂ© sur le kata âTennis Refactoringâ d'Emily Bache :
Nous sommes appelĂ©s Ă reprendre le travail dâun collĂšgue qui a travaillĂ© pour une sociĂ©tĂ© de Tennis. Le contrat signĂ© avec le client est de 10h et notre collĂšgue nâa travaillĂ© que 8h30 sur le projet. Notre commercial nous demande de reprendre le projet pour le temps restant. Quand on dĂ©couvre le code, tous les tests passent et le travail est terminĂ© (le service est rendu). Nous devons profiter du temps quâil nous reste pour retravailler le code existant pour le rendre plus lisible et pour pouvoir faire un retour Ă notre collĂšgue sur sa façon de coder.
Comment sâest passĂ© la session ?
PremiÚres minutes de découverte
Nous avons pris le temps au dĂ©but de lâexercice de parcourir le code Ă©crit par notre collĂšgue pour comprendre ce quâil a implĂ©mentĂ©. Les tests Ă©taient dĂ©jĂ prĂ©sents, ils nous ont aidĂ© Ă comprendre que le but est de donner le score en anglais en fonction du nombre de points marquĂ© par les deux joueurs de tennis.
Par exemple si le joueur âAâ a marquĂ© deux fois et le joueur âBâ a marquĂ© trois fois, le score est de 30-40. Le programme doit alors nous donner âThirty-Fortyâ. En cas dâĂ©galitĂ©, le score sâĂ©nonce de cette maniĂšre : Fifteen-All pour un 15-15. En cas dâavantage ou de fin de set, le score est âAdvantage Aâ pour le score : Adv-40 et âWin for Aâ si le joueur âAâ remporte le set.
On sâest assurĂ© que les rĂšgles Ă©taient bien comprises par tous avant de se lancer dans le refacto.
Les tests existants ne sont pas forcĂ©ment d'une grande qualitĂ©, nous aurions pu commencer par les modifier mais nous avons prĂ©fĂ©rĂ© nous attaquer Ă lâimplĂ©mentation.
Ă lâattaque du code
Maintenant que tout le monde est au point, il est temps de commencer. Les âMĂ©chantsâ peuvent commencer Ă sâamuser en tentant de saboter le travail de lâĂ©quipe.
Exemple de sabotage
Pour cet exercice, jâai eu la chance dâavoir le rĂŽle de âMĂ©chantâ. Il est assez simple (et surtout bien amusant) de ralentir le travail de lâĂ©quipe. Je vous donne quelques exemples de sabotage avec une comparaison dans la vie rĂ©elle.
â© InterfĂ©rer avec le âNavigatorâ
Pour rappel, câest uniquement le âNavigatorâ qui donne la route Ă suivre pour mener le dĂ©veloppement. Il est possible de rendre son rĂŽle pĂ©nible : parler plus fort que lui, parler Ă sa place au âDriverâ, enlever la concentration du groupe avec des blagues, des trolls, âŠ
Comparable Ă :
-
un collĂšgue qui pose des questions qui nâont rien Ă voir avec le sujet,
-
un téléphone qui sonne en plein milieu de la session,
-
âJo lârigoloâ avec ses blagues de Kaamelott.
⩠Se lancer dans un refacto compliqué
Tout le monde nâa pas la mĂȘme logique et ne code pas de la mĂȘme maniĂšre, il est donc facile dâimposer un choix qui peut paraĂźtre simple mais qui finalement ne mĂšne Ă rien. Cela fait perdre du temps et peut donner un sentiment de frustration aux autres membres de lâĂ©quipe.
Comparable Ă :
-
quelquâun qui veut mettre en pratique la derniĂšre nouveautĂ© du langage de programmation sans mĂȘme lâavoir comprise,
-
partir dans un dĂ©veloppement sans sâassurer que les autres comprennent ce que lâon fait.
â© Ne pas Ă©couter le reste de lâĂ©quipe
Quand on est âDriverâ ou âNavigatorâ, on a une plus grande responsabilitĂ©. Il faut donc faire au mieux pour que ce quâon fait soit compris de tous. Si on nâĂ©coute pas les autres, on peut facilement nuire au travail de lâĂ©quipe. Par exemple, un âDriverâ qui nâen fait quâĂ sa tĂȘte peut dĂ©truire tout le travail dâun autre ou rendre le code parfaitement incomprĂ©hensible.
Comparable Ă :
-
un dĂ©veloppeur qui nâen fait quâĂ sa tĂȘte et ne veut pas Ă©couter le point de vue des autres,
-
lâĂ©quipe qui nâĂ©coute pas ceux qui connaissent le mĂ©tier.
Ce qui fait avancer le développement
Certains avait le rĂŽle de âGentilsâ et devaient, malgrĂ© les embĂ»ches des âMĂ©chantsâ, faire avancer le dĂ©veloppement. Voici ce qui permet le bon avancement de la fonctionnalitĂ©.
⩠Des experts métiers
Certaines personnes connaissaient dĂ©jĂ le kata et ont pu facilement donner une direction Ă suivre pour arriver au bout du dĂ©veloppement. Si on compare avec le monde rĂ©el, il est important de faire participer un expert mĂ©tier qui connaĂźt parfaitement ce qui est attendu. MĂȘme sâil ne sait pas coder, il sera bien utile pour produire un code comprĂ©hensible.
Il est important de toujours garder contact avec les experts mĂ©tier qui savent ce quâil faut au final.
â© De lâĂ©coute
Un âGentilâ veillait particuliĂšrement Ă ce que les rĂŽles soient respectĂ©s : seul le âNavigatorâ Ă©change avec le âDriverâ. Il recentrait Ă©galement les personnes sur une unique tĂąche, pour ne pas avoir plusieurs conversations en mĂȘme temps.
Il faut apprendre Ă mettre son orgueil de cĂŽtĂ©, tout le monde peut avoir une bonne idĂ©e et doit avoir la chance de sâexprimer.
â© De la bienveillance
Il y avait tout type de profil dans lâassistance. Il faut veiller Ă ne pas rabaisser les autres mobeurs et adopter une communication non violente. Cela fait progresser tout le monde et fait grandir lâĂ©quipe plus rapidement.
Conclusion
Ce Mob Programming nâĂ©tait quâun exercice, un jeu pour mieux comprendre comment fonctionne une Ă©quipe. Avant de mettre en place ce type dâapproche, il faut se demander si câest pertinent et ce que ça va apporter. Plusieurs essais peuvent ĂȘtre nĂ©cessaires avant de trouver la bonne configuration : nombre de personnes prĂ©sentes, durĂ©e des rotations, âŠ
Je me suis bien amusĂ© lors de cette session, je vous encourage Ă organiser ou participer Ă ce type dâĂ©vĂ©nement qui permet de faire Ă la fois du team building et dĂ©couvrir une nouvelle façon de coder Ă plusieurs. En plus, si on peut ĂȘtre un âMĂ©chantâ, on y prend encore plus de plaisir. đ