Faire des Codings Dojo à distance ?

Les Coding Dojos, ces moments de partage enrichissants entre passionnés ont été remis en question avec le premier confinement de 2020.

Avec les Software Crafters Lyon, nous avons cependant décidé de garder 2 Coding Dojos par mois, mais à distance. Si on ajoute ceux auxquels j'ai pu participer dans le cadre de mes missions Ippon, en fait, j'en ai fait pas mal pendant cette période !

Cet article est l'occasion de vous partager mon avis sur le déroulement de ces sessions que la distance n'a pas toujours simplifié.

Un Coding Dojo : kesako ?

Avant d'aller plus loin, mettons-nous d'accord sur ce qu'est un Coding Dojo. La terminologie vient des arts martiaux : un Coding Dojo est un endroit (réel ou virtuel) où on fait des katas de code. Comme les katas dans les arts martiaux, ce sont de petits exercices pensés pour être répétés jusqu'à maîtriser parfaitement la compétence visée.

Il existe de très nombreux katas de code apportant des enseignements différents et ayant des difficultés variées. Il existe cependant une règle commune à tous les Coding Dojos : le code doit être fait en TDD.

Nous faisons régulièrement des résolutions sur notre chaine twitch (avec des rediffusions YouTube) et nous partageons le code produit sur un repo dédié, n'hésitez pas à jeter un œil pour vous faire une idée !

Les sessions se déroulent généralement sur une à deux heures. Une fois la date trouvée, il faut choisir le format, j'en connais 4 que je nomme ainsi :

  • Prepared : Un unique speaker qui connaît bien le kata va partager son écran et commencer une résolution en prenant en compte les questions et remarques du public.
  • Mob : Ce format est très proche du mob programming : un driver qui code, un navigator qui guide le driver en prenant en compte les remarques du mob constitué des autres participants. À intervalles réguliers (~10mn), le driver rejoint le mob, le navigator devient driver et un membre du mob devient navigator. La différence entre un Coding Dojo en mob et du mob programming étant qu'on ne travaille pas sur une vraie base de code mais sur un exercice jetable (et ça change pas mal de choses).
  • Classic : Dans les Coding Dojos classic, les participants se séparent en pair et font du pair programming : le driver code et le navigator le guide, on inverse les rôles à intervalles réguliers.
  • Randori : Le format randori ressemble beaucoup au mob, mais avec une différence majeure : les personnes dans l'assistance n'ont pas le droit d'intervenir pour donner leur avis (ils ne peuvent que poser des questions qui ne doivent pas guider la solution).

Dans tous les cas, on garde du temps (~15 mn) à la fin pour prendre les retours à chaud des participants. Personnellement, j'aime beaucoup demander un ROTI (Return On Time Invested) sous la forme d'une note de 0 à 5, en prenant spécifiquement les retours des notes les plus basses pour améliorer les sessions futures.

Quel que soit le format, il faudra un ou des facilitat·eur·rice·s / animat·eur·rice·s dont le rôle changera en fonction du format du dojo, du niveau des participants et du média utilisé. Dans tous les cas, ces personnes seront chargées de s'assurer que tous les participants passent un moment agréable en veillant à la bonne organisation et au bon déroulement de la session.

Voilà pour la "théorie" de ces sessions si formatrices. Voyons maintenant comment elles peuvent passer l'épreuve de la distance !

Les prepared coding dojos à distance

Alors là c'est facile ! Il vous faut un système de visio qui permette le partage d'écrans ! Il en existe beaucoup et vous avez certainement vos favoris. Pour ce type de session mon très grand favori est discord :

  • Gratuit ; non pas que payer pour un outil me gêne mais prendre le temps de faire les démarches pour le budget est, pour moi, un vrai frein !
  • Le serveur est toujours là donc les participants se connectent facilement de manière autonome ;
  • Facile à administrer (vous pouvez simplement gérer les mutes, kick, etc...) ;
  • Les limites de nombre de participants sont largement suffisantes.

Nous avons aussi un peu modifié ce format et fait des lives sur twitch que ce soit sur la chaîne Ippon ou sur la chaîne des Crafters Lyon. Même si les interactions sont un tout petit peu moins directes, nous avons de très bons retours sur cette variante !

En fait, je trouve que ce format est même meilleur depuis que nous sommes tous habitués à utiliser des outils de communication à distance ! Il permet la participation d'un plus grand nombre de personnes et donc des rencontres intéressantes. L'occasion pour le speaker d'avoir de nouvelles suggestions de la part des participants et pour les participants de voir plus facilement ce type de présentations.

Les Mobs à distance

Pour les mobs à distance, il vous faut, là aussi, simplement une visio avec partage d'écran parce que, en fait, les outils de partage d'IDE ne sont pas encore satisfaisants...

Nous avons vraiment essayé, plusieurs fois, d'utiliser ces outils pour que tout le monde puisse coder sur la même base de code mais ça ne fonctionne vraiment pas. Il faut garder en tête qu'une ou deux heures c'est vite passé. On ne peut pas passer 20 minutes à accompagner tout le monde pour installer un outil qui va planter chez certains au bout de quelques minutes d'utilisation.

Ne trouvant pas d'outil permettant une collaboration saine sur un même code nous avons adapté le format et nous gardons maintenant un (ou deux) driver pour toute la session. Les éventuels changements de driver se font en partageant le code sur un repo.

Des différents essais que nous avons pu faire, cela fonctionne beaucoup mieux lorsque le driver est un développeur expérimenté qui sera à l'aise, à la fois avec son environnement de travail et pour faire du live coding. Il est plus intéressant de choisir une technologie qui pourra être codée de manière fluide qu'une technologie connue par le plus grand nombre !

Certes, cette adaptation du format change l'exercice et les points d'attention pour l'animation mais ces sessions sont souvent très appréciées. Tant que tout le monde s'assure que le driver n'en fait pas qu'à sa tête et écoute bien son navigator ce sont des sessions vraiments enrichissantes pour tout le monde :

  • Pour le driver qui doit être à l'écoute tout en étant capable de comprendre puis traduire (en code) les idées émises par le navigator ;
  • Pour le navigator qui doit écouter les idées des autres et prendre des décisions (à la fin, c'est lui qui doit trancher) ;
  • Pour tous les participants qui découvrent les approches plébiscitées par les différents navigators.

Malgré une adaptation nécessaire, ce sont des sessions que nous faisons régulièrement. Elles offrent un avantage non négligeable par rapport aux sessions classiques à distance : si un participant a des soucis de connexion, il ne met pas son binôme au "chômage technique".

Les coding dojos classiques à distance

Pour ce format il vous faudra un outil de visio et de partage d'écran qui permette le passage d'une salle virtuelle à une autre, du coup, bah... discord ! Avant la session préparez différents channels pour que les binômes / trinômes puissent ensuite s'y déplacer.

Quelques années passées à organiser ce type d'événements aux Software Crafters Lyon nous ont appris plusieurs choses :

  • Ce sont parmi les sessions les plus accessibles qui soient mais elles ne sont pas vraiment rassurantes pour les participants. En tant qu'animateur il faut donc faire attention à mettre les gens à l'aise en maintenant une bonne ambiance et en s'assurant que tout le monde puisse prendre la parole.
  • Il ne faut pas laisser des personnes venant pour la première fois binômer entre elles. Il faut les mettre en binôme avec un habitué ou faire un trinôme (si elles sont venues ensemble et veulent faire la session ensemble).
  • Les habitués peuvent, sans problème, être navigators sur des langages qu'ils ne connaissent pas du tout.

Avec ces règles en tête nous commençons la session en demandant aux gens de changer leur pseudo pour ajouter :

  • S'ils se sentent à l'aise avec le format, le langage, etc... ou non. Nous appelons ça les "vieux" pour les personnes à l'aise et les "jeunes" pour les autres ;
  • Les environnements de développement qu'ils ont de fonctionnels sur leur poste (et qu'ils peuvent donc caster).

Une fois cette modification faite, en fonction du ratio "jeunes" / "vieux" nous demandons au personnes du groupe minoritaire de se déplacer chacun dans un channel. Quand les gens sont seuls dans leur channel nous demandons aux autres de les rejoindre et faisons des groupes avec ceux qui sont restés dans le channel d'accueil.

Parfois certains veulent faire un mob, d'autres ont déjà des binômes formés à l'avance. Ça ne pose aucun problème, il faut trouver une organisation pour que tout le monde passe un bon moment !

À partir de là, le rôle des animateurs va changer en fonction des participants (et de l'envie des animateurs) :

  • Si tous les binômes ont un "vieux", les animateurs peuvent, s'ils le souhaitent, participer comme n'importe quel participant.
  • Si les anciens manquent, ou si les animateurs le souhaitent, ils peuvent passer la session à changer de groupe pour distiller les connaissances et découvertes de chaque groupe. Le but n'est pas forcément de donner des solutions (même si ça peut être intéressant) mais de poser les bonnes questions pour créer une réflexion.

Même si on ne peut plus simplement changer de rôle (le driver fera souvent toute la session) ces Coding Dojos restent des sources d'apprentissage incroyables ! J'aurais beaucoup aimé connaître ces formats plus tôt dans ma carrière. J'aurais gagné quelques années !

Les randoris à distance

Oubliez, mauvaise idée ! Sans outil fiable pour coder en même temps sur la même base de code, ce format ne fonctionne tout simplement pas.

Les contraintes qui fonctionnent à distance

Je disais en introduction que les katas sont des petits exercices faits pour être répétés jusqu'à maîtriser une compétence particulière.

Pour trouver de nouvelles manières de faire ces résolutions, nous faisons parfois les katas avec des contraintes qui nous poussent à trouver de nouvelles solutions. Voici quelques contraintes intéressantes qui fonctionnent à distance (certaines peuvent se cumuler).

Immutable

Tous les objets doivent être immuables (ils ne peuvent pas changer d'état).

Cette contrainte semblera bien triviale pour les participants codant dans des paradigmes fonctionnels mais peut être un vrai challenge pour de jeunes développeurs travaillant dans des paradigmes objet. Ce pattern étant très puissant, il est toujours bon de s'exercer à l'utiliser !

Primitive obsession

Il ne faut jamais manipuler directement de types primitifs (int, float, boolean, String, Collection, ...) mais toujours les encapsuler dans des objets.

Le but de cette contrainte est de chercher de meilleures responsabilités pour les objets et de faire apparaître des opérations métiers spécifiques. Il n'est pas rare qu'après un kata avec cette contrainte, certains participants se rendent compte qu'en fait, on a rarement besoin directement d'une Collection ou d'une String :).

No flow control

Les instructions qui permettent le contrôle du flux d'exécution (if, for, while, ...) sont interdites.

En fonction du kata et du langage cette contrainte peut être un véritable casse-tête qui permet d'explorer de nouvelles solutions, d'avoir de nouvelles idées. Bien souvent, les solutions se trouvent dans les paradigmes fonctionnels.

Blind navigator

Le navigator ne voit pas le code (très facile à faire en remote : il suffit de ne pas partager l'écran).

Cette contrainte oblige une bien meilleure communication. Le navigator doit réussir à exprimer clairement sa vision en donnant juste ce qu'il faut de détails. Le driver, quant à lui, doit arriver à décrire de manière limpide l'état de la solution.

TCR

TCR pour Test && Commit || Revert est une approche dans laquelle on revert le code si un test ne passe pas. Dans le cadre d'un Coding Dojo je préfère cette variante : on a 2 minutes pour être dans une step verte (le code compile et les tests passent). Si, au bout de 2 minutes, tout n'est pas vert alors on revert.

Cette contrainte force les baby steps (petites étapes) et demandera au navigator d'imaginer un cycle que son driver pourra faire dans le temps imparti !

Pour conclure

Les Coding Dojos à distance fonctionnent très bien avec quelques adaptations. Ils sont un excellent moyen de garder du contact, de la cohésion et de l'intérêt pour le développement.

Je ne peux que vous conseiller d'y participer ou d'en organiser. Pour votre première organisation n'hésitez pas à vous faire aider par un animateur habitué à l'exercice : cela apportera une plus grande fluidité et augmentera le taux d'adhésion des participants !