CodeRetreat à SEEK: Clean Code vs Comfort Zone

C'est lundi matin. Ce n'est pas un moment typique pour les développeurs de vous sortir directement de votre zone de confort de codage et de vous diriger vers eXtreme Learning pendant toute une journée.

Pourtant, c'est ce que 20 courageux ingénieurs logiciels de SEEK et 3 codeurs invités de la communauté #DevOpsGirls ont signé le 16 avril 2018. Ils n'avaient aucune idée de ce dans quoi ils s'embarquaient. Des mentalités agiles et de croissance pour la victoire!

Paires codant Game of Life de Conway, suivant les pratiques TDD et XP

"Pratiquez et améliorez votre métier."

Un codeRetreat est un événement reproductible d'une journée qui se concentre sur la mise en pratique des principes fondamentaux du développement logiciel, en utilisant certaines des pratiques XP (eXtreme Programming), telles que Test Driven Development (TDD), Pair Programming et Simple Design. L'objectif est de continuer à s'améliorer pour réduire le coût du changement et d'écrire du code qui accepte ouvertement le changement.

Alors que l'objectif quotidien des développeurs est de terminer le prochain livrable, l'objectif des développeurs lors d'une retraite de code est de pratiquer et d'apprendre - et non de terminer.

Après nous être rappelé ces principes fondamentaux du code propre et adaptable, nous avons sauté directement dans les sessions de codage.

L’aventure qui attendait l’équipe consistait à aborder le jeu de la vie de Conway en 4 sessions, à chaque fois de recommencer, à chaque fois de changer de partenaire de jumelage, à chaque fois avec différents défis amusants (aka contraintes). Nous voulions chasser nos ingénieurs de leur zone de confort de codage pour eXtreme Learning après tout!

Commençons!

Chaque session dure 45 minutes. Après chaque session, les équipes suppriment leur code. C'est souvent à ce moment que le serment commence. Le but de la suppression de leur code est de rester fortement concentré sur l'apprentissage. Le court laps de temps rend pratiquement impossible pour les participants de terminer le jeu de la vie de Conway. Étant donné que tout le monde supprime son code après chaque session, peu importe si le code est vraiment terrible ou vraiment bon. Cela donne beaucoup de liberté pour expérimenter avec différentes approches de codage et TDD.

Session # 1: Échauffement

Se familiariser avec le problème, le TDD et l'appairage.

réchauffer()
{
   timeRemaining = timer (45, time.minutes)
   while (timeRemaining)
   {
     travailler en équipe de deux()
     codeSolution ()
   }
   deleteAllCode ()
}

Session # 2: Appairage Ping Pong

À tour de rôle pour écrire le test ou l'implémentation qui échoue.

pingPongPairing ()
{
   timeRemaining = timer (45, time.minutes)
   while (timeRemaining)
   {
     driver.writeFailingTest ()
     swapDriver ()
     driver.makeTestPass ()
     driver.refactor ()
   }
   deleteAllCode ()
}
Une des paires de ping-pong TDD

Session # 3: Coupure du son en sourdine

Pas de conversation pendant la session (exception: inconnues dans la langue / IDE).

mutePairing ()
{
  personA.canTalk = false
  personB.canTalk = false
  pingPongPairing ()
}

Session # 4: Baby Steps

Temps de codage - boîtes de 4 minutes pour écrire et valider les tests.

pas de bébé()
{
  timeRemaining = timer (45, time.minutes)
  while (timeRemaining)
  {
    stepTimer = timer (4, time.minutes)
    essayer{
      writeFailingTest ()
      makeTestPass ()
      gitCommit ()
    }
    catch (timeOut)
    {
      gitRevert ()
    }
  }
  deleteAllCode ()
}
Le temps est compté!

Apprentissage itératif sur 3 niveaux

Un codeRetreat vise à maximiser l'apprentissage en exposant les paires à un problème complexe tout en introduisant des contraintes comme des formats de session difficiles.

Apprentissage à plusieurs niveaux. Photo de Element5 Digital sur Unsplash
CodeRetreat a amélioré mes compétences et ma carrière plus que toute autre activité que j'ai jamais faite. Même en tant que facilitateur, j'ai tellement appris. (Jim Hurne, ingénieur logiciel américain et facilitateur chevronné de codeRetreat)

Nous avons ancré les apprentissages des gens en prenant le temps de les réfléchir et de les partager en groupe: apprentissage itératif = session + rétro.

Les 3 niveaux d'apprentissage tout au long de la journée portaient sur l'appariement, le TDD et l'itération sur le même problème:

  • Le jumelage avec différentes personnes tout au long de la journée conduit à des apprentissages à multiples facettes de différentes approches du même problème - conceptuellement et par programmation (langages de programmation, conception de logiciels, IDE, outils, recherche, style de communication).
  • En codant le même problème encore et encore, l'équipe s'est rendu compte qu'il n'y avait pas une seule façon de commencer à concevoir, coder et tester une solution. La décision initiale de commencer à l'extérieur (concevoir l'environnement d'abord) ou à l'intérieur (concevoir les règles du jeu d'abord) a déterminé l'approche TDD de l'équipe et combien elle ferait et à quelle vitesse elle apprendrait et validerait sa conception. .
  • Grâce à la mise au point TDD (Test Driven Development) des sessions, les équipes ont été invitées à penser très petites. Il y a eu beaucoup de moments «aha» sur les difficultés de cette discipline, et plus important encore, sur les avantages de suivre cette approche, car TDD aide à guider la conception de la solution, sans sur-ingénierie de la solution.
    Dans Agile et Lean, nous travaillons avec des équipes pour nous concentrer sur la réduction des déchets tout au long du cycle de vie de la livraison des produits. Nous décomposons les problèmes en petits morceaux et nous nous concentrons sur la livraison des articles les plus précieux au client pour augmenter la vitesse et la valeur de l'apprentissage.
    TDD permet de réduire les déchets en génie logiciel en se concentrant sans relâche sur la création de ce qui est pertinent et précieux. Tout cela conduit à un code plus propre et plus adaptable. Il s'agit d'une leçon importante pour les ingénieurs logiciels dans un monde où la vitesse, l'adaptabilité et la valeur client font ou cassent le succès des individus, des équipes et des entreprises.
L'équipe se réunit pour partager ses apprentissages et observations

Qu'ont dit nos ingénieurs logiciels?

Ping Pong Pairing: Recherche de trous

C'était précieux de regarder quelqu'un d'autre écrire du code juste pour passer mes tests unitaires, car sans les hypothèses et le contexte intégrés dans leur solution, cela a montré des trous dans mes tests que je n'avais peut-être pas remarqué travailler en solo. (J. J.)

Appariement silencieux: un code expressif pour le futur

De la session 3 où nous ne pouvions pas parler à nos partenaires - C'est très relatif d'avoir à écrire du code auto-expressif car notre futur soi ou quelqu'un d'autre serait similaire à notre partenaire silencieux qui devait juste donner un sens à ce que signifie le code . (A.K.)

TDD: le faire mal

La session nous a fait réfléchir / repenser la façon dont nous faisons le TDD. Nous travaillions sur une étude de cas sur TDD et nous avions conçu tous nos scénarios de test dès le départ, je me demandais toujours pourquoi nous n'avions pas de sortie tangible (code) même après tant de jours de travail. Maintenant, j'ai la réponse, nous avons mal fait TDD. Ce ne sont pas des tests en premier, nous l'avons maintenant refactorisé et avons commencé à écrire un test unique, puis implémentez-le. (P.S.)
La concentration est palpable pendant la session délicate de «couplage muet»

Leçons de facilitation apprises

Il y a également eu des apprentissages pour nous en tant que facilitateurs.

Préparation TDD
L'un des plus grands défis de nos équipes était la configuration initiale de leur environnement TDD. Nous avons demandé aux gens de se préparer avec leur ordinateur portable, de configurer avec un IDE de leur choix, prêt pour TDD et installé git. Mais ce n'était pas assez explicite. Certaines équipes ne sont même pas parvenues à participer à un exercice car elles ont pris tout le temps à configurer leur environnement.

La prochaine fois, nous offrirons plus de soutien à nos équipes dès le départ. Surtout pour un code interne Retraiter. Pour un codeRetreat externe, nous serions plus explicites sur ce que signifie un environnement prêt pour TDD et comment ils peuvent le tester pour qu'il soit prêt pour CodeRetreat :)

Appariement aléatoire
Une idée qui nous a été suggérée après la journée était de trouver des jeux pour randomiser l'appariement. Naturellement, les gens ont tendance à s'associer avec des gens autour d'eux ou avec des personnes avec lesquelles ils sont habitués à travailler, il est donc bénéfique de trouver des moyens amusants de contrer cela.

Facilitation en action - il est temps d'arrêter et de supprimer le code

Diversité & #DevOpsGirls

Un groupe diversifié de personnes a assisté à l'événement. De nos développeurs de logiciels associés les plus juniors à nos développeurs principaux les plus seniors (également connus sous le nom de Tech Leads dans d'autres sociétés). Nous avions un grand nombre de femmes en technologie présentes avec 8 des 20 participantes. C'est beaucoup plus élevé que le ratio <10% habituel dans n'importe quelle équipe.

Les animateurs de CodeRetreat Victoria Schiffer, Michelle Gleeson avec nos #DevOpsGirls Software Engineers Edit, Padmavathi et Natalia

Nous avons été ravis de soutenir la communauté Melbourne #DevOpsGirls en ouvrant notre formation interne à 3 ingénieurs logiciels externes. Nous avons apprécié de leur faire partager leurs compétences en conception et en ingénierie et pour nos paires d'apprendre avec leur expérience et leurs commentaires.

Il y avait une ambiance incroyable dans la salle et quelques conversations fantastiques alors que tout le monde essayait de résoudre le même problème tout en étant confronté aux mêmes contraintes.

Conclusion

À la fin de la journée, tout le monde était épuisé en réfléchissant à ses défis et à ses expériences. Nous espérons également que notre codeRetreat nous a aidés à atteindre l'objectif de SEEK, en aidant nos ingénieurs logiciels à vivre une vie professionnelle plus épanouissante et productive et à aider notre propre organisation à réussir.

Intéressé par codeRetreats - voici plus!

www.coderetreat.org
En savoir plus sur codeRetreats, leur historique, comment en organiser ou en faciliter un et où trouver le prochain événement près de chez vous.

La prochaine Journée mondiale de CodeRetreat #gdcr est prévue pour le 17 novembre 2018. Enregistrez la date, vérifiez s'il y aura un événement #gdcr dans votre région et suivez @coderetreat sur twitter ou rejoignez l'équipe de créateurs de logiciels.

Pour en savoir plus sur une autre exécution de CodeRetreat interne à REA, consultez cet article de blog: http://rea.tech/tdd-in-bash-aka-our-1st-internal-code-retreat-rea/

Un merci spécial à Michelle Gleeson pour avoir co-organisé la journée avec moi et le plaisir du jumelage sur le pseudo-code des sessions. Aussi à Jo Piechota pour avoir soutenu l'événement en interne. Merci également à SEEK - Tim Smart et Craig Penfold pour avoir parrainé l'événement pour nos ingénieurs logiciels. Enfin, merci à Theresa Neate de nous aider à soutenir #DevOpsGirls en invitant 3 ingénieurs logiciels externes de #DevOpsGirls.