Bouchons, builds et blocages

Voilà déjà dix minutes que Gus est coincé dans cet embouteillage… Il s’exaspère; il est en retard. Ca y est, problème identifié : une bête boite blanche qui trône au milieu de la file de droite. Ah non, ce n’est pas une boite, c’est un vieux micro-ondes ! Un coup de volant à gauche, et Gus est reparti. En route!

Bien sûr, Gus pourrait s’arrêter et descendre de voiture pour dégager ce débris sur le bas côté. Tout le monde en profiterait. Mais Gus est déjà très en retard. Après-tout, le problème est derrière lui maintenant. La voie est libre, il en profite.

C’est situation représente un anti-pattern caractérisque, appelé tragédie des biens communs, et qui s’énonce ainsi :

L’accès libre à une ressource limitée pour laquelle la demande est forte conduit à une surexploitation de cette ressource et à sa détériotation.

L’intégration continue, ce bien commun

En s’installant à son poste de travail, Gus examine le statut du projet sur lequel il travaille et remarque:
« Tiens ? Le build est cassé ? » Ce à quoi un de ses coéquipiers répond: « Ouais… » sans décoller de son écran.

Build cassé signifie que les programmes sources distincts sur lesquels l’équipe intervient simultanément ne peuvent plus être assemblés, testés unitairement, recopiés et référencés dans l’entrepôt commun qui sert pour la version en cours de développement.

C’est assez grave. Plus personne ne peut synchroniser son travail. Quelques heures passées dans cette ornière, et réconcilier les sources va devenir une vraie « galère ».

Gus comprend cette situation, mais juge qu’en ce qui le concerne, la réparation peut attendre. Il a une classe à mettre au point, et il est déjà sacrément en retard. Il règne dans la pièce une atmosphère dense et morne, agaçante, un peu comme lorsque mille voitures sont ralenties par un micro-onde au milieu de la file de droite…

Le build qui reste cassé est également une « tragédie des bien communs ». Une plateforme d’intégration continue apporte cohérence, réactivité et performance au projet. Son coût d’exploitation vient de ce qu’il faut la maintenir. En s’abstenant de réparer le build, chacun privilégie pour un temps des tâches isolées, au détriment de celles de tous les autres. C’est comme si chacun disait: « nous sommes tous ralentis, notre performance en prend un coup mais pour moi ça peut aller, pour le moment je vais m’occupper de ma propre performance ».

Le build cassé des relations

Au bout d’une heure, Gus réalise qu’il a maintenant crucialement besoin que le build fonctionne à nouveau. Il tente une demande d’aide:
– Alex, c’est toi qui a cassé le build on dirait ?
– Ouais. J’ai eu un souci avec une dépendance cyclique.
– Tu peux me dire quand tu penses l’avoir réparé, stp ?
– Désolé, pas avant midi, là je pars en réunion.
– OK.

Nouvelle tragédie des biens communs : ce n’est certainement pas « OK » de laisser le build en cet état jusqu’à midi, mais Gus n’insiste pas. Alex a des années d’expérience, il sait ce qu’il fait et il est assez occuppé. Gus est relativement jeune, et nouveau dans ce projet. Et le silence de ses coéquipiers ne l’encourage pas à entamer une conversation qui pourrait devenir inconfortable.

Ici, les relations interpersonnelles de l’équipe constituent le bien commun. Leur valeur tient en ce qu’elles servent de base de départ pour inventer, décider et communiquer le plus efficacement et le plus rapidement possible. Cette qualité des relations doit bien sûr être « entretenue ». En évitant la confrontation à propos d’une situation conflictuelle donnée, chacun préserve son confort immédiat et maximise son effort indidividuel, au détriment de la cohésion de l’équipe (en se disant, peut être, que le problème disparaîtra avec le temps).

Que faire ? D’abord, observer.

Toute tragédie comporte une fatalité. Ici ce sont les boucles de renforcement positif qui sont fatales : à mesure que la ressource se détériore, ses usagers en font une exploitation renforcée, ce qui la détériore encore plus. Ces « optimisations locales » finissent par détruire ou stopper complètement le système global:

  • un bouchon de cinq kilomètres
  • quatre heures passées à fusionner des sources
  • une relation de travail qui prend fin, après des semaines à « jouer perso ».

Bien qu’il n’existe pas de solution miracle pour éviter ces anti-patterns, il est très utile d’apprendre à les reconnaître, en interprétant les situations observées ou vécues à travers un calque « systémique ». On peut alors les détecter suffisamment tôt pour les rendre manifestes, et les désamorcer.

Quels tragédie des biens communs avez-vous détecté dans votre travail dernièrement ?

Cet article a été posté dans Méthode.

5 commentaires sur “Bouchons, builds et blocages”

  • Excellent article ! Il manque juste un élément clé bien souvent évacué par l'idéologie XP : le chef. Le chef est le garant du bien commun. Le scénario se transforme ainsi : Pierre, Responsable de l'équipe fait un point matinal (le fameux stand up meeting) et note avec l'équipe que la build est cassée. L'équipe est immédiatement mis en mouvement pour corriger la build et les tâches sont immédiatement réparties et discutées dans cet unique but. Toute l'équipe se focalise sur ce problème à part quelques personnes dont il est identifié qu'elles peuvent poursuivre le travail tout en se tenant prête à basculer sur le problème de la build si cela peut-être utile.
  • Excellent article en effet! J'adore l'efficacité des messages qui passent grâce à la métaphore du micro-onde sur l'autoroute. D'ailleurs, nous pouvons revenir en arrière pour voir ce que deviendrai Pierre, le responsable de l'autoroute, et son micro-onde. Que ferait-il selon vous face au micro-onde sur l'autoroute et les bouchons qui vont avec? Je me lance: Pierre, l'élu de la région qui s'occupe de l'autoroute, passe une loi qui oblige les automobiliste à s'arrêter pour ramasser les obstacles qu'ils rencontrent. Il place des policiers le long de l'autoroute pour faire respecter sa loi et il se fait réelir grâce aux statistique montrant une baisse de quantité de bouchon. D'autres idées de ce que pourrai faire Pierre?
  • Quand il n'y a plus de café grand-mère et que le groupe se prend plusieurs poses à la machine a café pour contourner le vrai problème : il faut racheter du café ! Bah quoi ? C'est moi qui ai fait le café hier matin et j'en ai acheté la semaine dernière, ce n'est plus mon tour ! Je vais donc à la machine en attendant qu'un autre s'en charge...
  • Oh oui, excellent cet article ! Une tragédie des biens communs pas rencontrée au travail mais au supermarché, pendant que je faisais la queue : quelqu'un fait tomber l'enorme panneau publicitaire au milieu du rayon. On regarde d'un oeil noir le méchant responsable, qui s'est retourné, a constaté l'accident et a poursuit tranquillement son chemin. Qu'est ce qu'on fait maintenant? Les caddies ne peuvent plus passer, les autres doivent faire de grandes enjambées. Un caddie aura meme préféré faire demi tour et se taper un rayon supplémentaire plutot que ramasser le panneau... En dehors du fait qu'on considère notre tache plus urgente que le build commun, il y a aussi cet aspect : "il y a un responsable. C'est à lui de corriger, pas à moi". C'est si fort que meme si je n'ai rien à faire, je ne veux pas le corriger. Quitte à me taper 20 m de trajet de plus, c'est "une question de principe". Ce sentiment d'injustice et cette fierté inutile nous font facilement perdre notre bon sens.
  • @zeugyou Sauf que... un élu n'est jamais réélu pour avoir mis plus de policier sur le bord de la route. Et que quand il y en a, leur rôle est justement de sanctionner ceux qui s'arrêtent sur l'autoroute. C'est interdit de sortir de son véhicule sur l'autoroute : c'est considéré comme dangereux. (Articles R421-2 et R421-6 du code de la route.) Surtout pour ramasser un micro-onde. Blague à part, excellent article. Qui n'a jamais été bloqué sur un parking au trois-quarts vide, parce que le véhicule devant lui attendait que la-place-à-côté-de-la-porte se libère , en stationnant au milieu de l'allée ?
    1. Laisser un commentaire

      Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *


      Ce formulaire est protégé par Google Recaptcha