Autre exemple: imaginons que vous soyez tenté de mettre en place l’architecture hexagonale. Ici aussi, vous pourriez lancer l’idée et essayer d’obtenir l’adhésion de tous les développeurs autour de celle-ci avant de mettre la main à la pâte. Ce faisant, il y a un risque non-négligeable que cette discussion ait des difficultés à aboutir en l’absence d’exemples concrets d’implémentation in-situ et s’enlise. Au lieu de cela, vous pourriez très bien mettre en place l’architecture hexagonale sur un périmètre réduit (une petite feature par exemple) en time-boxant votre effort sur quelques jours et vous engager auprès du reste de l’équipe à discuter a posteriori des résultats en revue collective, décidant seulement alors de conserver le code produit et adopter cette nouvelle architecture ou bien, au contraire, de la rejeter.
Les expérimentations, telles que décrites ci-dessus, sont des espaces de “liberté encadrée”. Dans ces espaces précisément délimités, il est possible, sans accord explicite de l’ensemble de ses coéquipiers, de s'affranchir des règles explicites ou implicites en vigueur dans l’équipe pour tenter de nouvelles choses et ce, sans l'impacter (pas directement du moins). L’impact vis-à-vis de l’équipe sera en effet limité à l’investissement en temps que vous consacrerez à l'expérimentation. Pour rendre possible de tels espaces de liberté, il est nécessaire de leur poser un cadre et de le communiquer. Celui-ci définira à minima:
La raison pour laquelle je préconise de passer par ce genre d’expérimentation, (discussions et prise de décision a posteriori, plutôt qu’a priori) est simple : il est fort probable que certaines (voire la plupart) de vos expérimentations ne soient pas concluantes. Dépenser le temps et l'énergie nécessaires pour faire monter toute l'équipe à bord d’un essai infructueux serait alors une perte sèche. Pire encore, vous pourriez abandonner votre idée en cours de route et ne peut-être jamais savoir si elle en valait le coup restant ainsi ignorant (et frustré). En expérimentant de nouvelles choses en petits groupes, l’apprentissage est garanti : en cas d’échec, vous avez la certitude que le changement proposé n'était pas judicieux et ce, à moindres frais. Fail early, learn fast!
Si, de plus, vous communiquez régulièrement votre avancement avec vos coéquipiers “sceptiques”, ces derniers viendront enrichir l'expérimentation de leurs réserves. Ainsi, à l’issue de l’expérimentation, l’équipe aura tous les éléments pour mener une discussion constructive basée sur un artefact concret. Concernant l'expérimentation sur l’architecture hexagonale, un de vos collègues sceptiques pourrait par exemple vous dire “J’ai peur que si on se lance là-dedans, on ait ensuite deux architectures différentes qui cohabitent dans l’application”. Concernant celle sur le NoEstimates vous pourriez entendre : “mais si on n’estime plus en Story Points, est-ce que ça veut dire que l’atelier de Grooming saute ?”. Parfait ! Vous avez là deux nouveaux éléments à observer pendant vos expérimentations : le risque de fragmentation de l'architecture et l'intérêt (ou non) de conserver un grooming sans estimer. C’est précisément là que les choses deviennent intéressantes et que la complémentarité entre enthousiastes et sceptiques opère. Si l’adoption de l’architecture hexagonale ou du NoEstimates sont en effet des idées pertinentes, elles survivront à ces réserves supplémentaires et n’en seront que plus robustes. Au contraire, si elles en meurent, cela n'en sera que tant mieux : dans votre contexte précis, à cet instant t, ces idées n’étaient de toute évidence pas pertinentes. Enthousiastes et sceptiques, chacun à leur manière, œuvrent ainsi au bien de l'équipe. Les enthousiastes créent le mouvement et les sceptiques le canalisent, en limitent la dispersion et garantissent la stabilité des pratiques de l’équipe : l'équilibre entre les deux est primordial. Ensemble, ils contribuent à l’amélioration continue.
while(true) { val result = trySomething() if (result.isPositive()) { keepDoingIt() } else { dropThatThing() } }
Il arrive que les résultats d’une expérimentation fassent l’objet d’un consensus tacite et immédiat. En ces rares occasions, l’ensemble de l’équipe a conscience que l’expérimentation s’est soldée par un franc succès ou bien par un lamentable échec. Adopter ou rejeter la proposition de changement qui la motive est alors une évidence. La plupart du temps cependant, il faudra trancher et prendre une décision. Dans une équipe, il existe de nombreuses façons de prendre une décision^<a href="#note2">2</a>^. En effet, celle-ci adoptera différents modes de prise de décision en fonction du périmètre et des conséquences potentielles d'une décision. Il est cependant assez rare que ce modus operandi soit explicite. Plus l’équipe est consciente et alignée sur le procédé de prise de décision et plus il sera aisé et rapide pour elle de se mettre d’accord. Dans l’optique de rendre ces derniers explicites, on peut par exemple définir les classes de décisions qui peuvent être prises individuellement vis-à-vis de celles qui, au contraire, doivent être prises en incluant tout ou partie de l’équipe. On pourra décider si une décision collective sera prise par consentement (tout le monde est en faveur), par consensus (personne n’est contre), avec un Decider, par un vote à la majorité ou bien de toute autre façon. Certains types de décisions peuvent être prises individuellement mais faire obligatoirement l’objet d’une consultation préalable de l’équipe. D’autres peuvent être la prérogatives de certains ou encore faire l’objet d’un droit de véto. Chacun de ces modes de prises de décisions peut se révéler pertinent en fonction du contexte et évoluer dans le temps. Rendre explicite la façon dont sont prises telles ou telles décisions dans l’équipe maximise sa capacité à s’adapter et performer. Il en va de même vis-à-vis des expérimentations. Le fonctionnement par expérimentations favorise la prise d’initiatives personnelles ou en petits groupes. Toutefois, l'idée n'est pas de multiplier les pratiques et d'affaiblir les standards de l'équipe mais bien d'en favoriser l'émergence et surtout l’évolution. Aussi est-il judicieux de passer par un mode de décision à minima consultatif quant à l’adoption ou le rejet des changements proposés.
Si le fonctionnement par expérimentations évite que l’équipe ne s’enlise dans le status quo, facilite sa remise en question et lui permet de changer, il ne rend pas pour autant le changement nécessairement rapide ou même aisé.
Dans le livre Mastery, George Leonard invite le lecteur à voir le changement comme le déplacement d'un solide dans un fluide : plus le solide est volumineux et le fluide visqueux et plus son déplacement sera lent. Ainsi, mécaniquement et inexorablement, plus le changement proposé est important et l'équipe qui y fera face inerte, plus votre patience devra être grande. C'est possiblement très frustrant mais hélas, vous et vos camarades d'expérimentation n'y pourrez rien. Accueillez et acceptez cette lenteur aussi tôt que possible afin de préserver votre motivation. Pour l’équipe, il est bien plus intéressant que vous proposiez régulièrement de petites expérimentations ciblées plutôt que de grandes remises en cause tous azimuts (façon Big Bang) au risque d'épuiser votre motivation et de claquer la porte en vous en allant.
Cela invite à la considération suivante : si vous comptez soumettre de nombreuses idées de changement à l’équipe, il vous faudra distribuer l'effort dans la durée de façon soutenable en priorisant et en ménageant vos attentes.
Je vous propose un exercice : faites la liste des points qui vous aimeriez améliorer dans votre équipe et des changements que vous aimeriez soumettre pour y remédier. Attribuez une note de 1 à 10 au potentiel qu'aurait chaque changement de faire du bien à l'équipe selon vous. Attribuez ensuite une note de 1 à 10 quant à l'énergie requise pour mettre en place ces changements. Enfin, classez ces changements par ordre décroissant de ratio “amélioration potentielle perçue / énergie requise perçue”.
Attention au biais de confirmation : il est possible que vous tendiez naturellement à surévaluer le potentiel et à sous-évaluer l'énergie requise de tel ou tel changement pour influer sur sa priorité. Ce n’est pas très grave, l’important c’est surtout de se poser les bonnes questions en connaissance de cause.
Les 2-3 premiers items de la liste sont les choses sur lesquelles vous devriez concentrer votre énergie. Concernant ces items, quelles sont alors les expérimentations que vous pourriez mener (périmètre, mode de partage et de prise de décision, contingence en cas de rejet) ? Lesquels de vos coéquipiers seraient partant pour mener cette expérimentation avec vous ?
Pour conserver sa motivation il est également nécessaire de ne pas viser trop haut trop vite. Je vous invite donc à reprendre la liste issue du paragraphe précédent. Vos deux ou trois items prioritaires sont-ils facilement actionnables ? En cas de doute, il est intéressant de les décomposer en sous items. Pour ce faire, essayez de visualiser le gap qui existe entre la situation actuelle et la situation qui serait pour vous idéale. Par exemple : imaginons que votre item numéro 1 soit “Améliorer la qualité de code”. Essayez de visualiser la distance entre la qualité du code actuellement produit par l'équipe et celle d’un code qui, pour vous, ne serait pas une contrainte.
Vous avez ce gap en tête ? Bien, essayez maintenant d’imaginer parcourir les dix premiers pourcents de cette distance. Quels sont alors les signes concrets qui montrent que vous avez parcouru ces 10% ? Avoir posé des tests unitaires ? Que l’équipe propose spontanément des revues de code ? Avoir refactoré telle ou telle partie du code ? Ceci devrait être votre objectif : dix. petits. pourcents. Obtenir une amélioration de 10% est beaucoup plus précieux pour l’équipe que d’échouer dans la tentative d’en obtenir 50. Tâchez de vous remémorer ceci alors que vous traverserez des moments de doute et de frustration pendant lesquels vous aurez l'impression de pédaler dans la semoule car les choses ne vont pas assez vite ni assez loin à votre goût.
Cet article vous a plu ? Votre équipe adresse la problématique de l’amélioration continue différemment ? Vous avez un conseil ou un retour d'expérience à partager sur le sujet ? N'hésitez pas à contribuer en laissant un commentaire ci-dessous !
[1]
[2] cf. la notion de Decision Stack dans Brave New Work de Aaron Dignan