---
title: Relisez le plan, pas la pull request
description: Overmind ne relit plus ses propres pull requests : la revue par les pairs porte désormais sur un plan d’une page et demie, écrit avant que l’agent ne code. Notes sur la conférence de Dylan Ratcliffe, la boucle until derrière, et un lead time passé de 3,2 à 1,3 jour.
date: 2026-10-15
tags: agents de code IA, revue de code, planification, MCP
---

Overmind ne relit plus ses propres pull requests. Presque tout le code que l’entreprise met en production n’est plus lu par aucun humain, auteur compris. La revue n’a pas disparu pour autant. Elle s’est déplacée vers un plan d’environ une page et demie, dont on débat avant qu’un agent écrive la moindre ligne, et dans les trois semaines qui ont suivi le changement, l’équipe a fermé trois fois plus d’issues, tandis que le lead time tombait de 3,2 jours à 1,3.

La conférence, c’est [Pull Requests Are Dead, Long Live Peer Review](https://www.youtube.com/watch?v=5lq5zp6wYbQ), de Dylan Ratcliffe, fondateur et CEO d’[Overmind](https://overmind.tech/), donnée à AGNTCon + MCPCon North America 2026. Overmind utilise l’IA pour simuler les changements sur de grosses infrastructures back-end. Dans ma [note sur l’usine logicielle](/fr/notes/software-factory-2022-to-lights-off.html), la partie lente de ma propre installation, c’est ma file de revue. Cette conférence, c’est la réponse d’une équipe à ce problème.

## La revue remplissait quatre rôles

Comme la plupart des équipes, Overmind comptait sur la revue de code pour bien plus que les bugs. Elle attrapait les bugs, elle couvrait la conformité SOC 2 et ISO 27001, elle formait les ingénieurs juniors, et elle construisait une vision partagée de la façon dont le système fonctionne vraiment.

Ce qui faisait marcher tout ça, c’est qu’un humain tenait à chaque ligne. Commentez la pull request d’une personne, et il en sort quelque chose de bon dans tous les cas. Si vous avez raison, elle apprend et le produit s’améliore. Si elle conteste, c’est qu’il existe une contrainte que vous ignoriez, et maintenant vous la connaissez.

Commentez la pull request d’un bot qui traite lui-même les commentaires de revue, et vous obtenez le même acquiescement empressé, que vous ayez entièrement raison ou entièrement tort. C’est sa première leçon : l’IA n’est pas votre pair, donc la revue par les pairs ne s’applique pas à son travail.

<figure class="fd-fig rp-peer" aria-labelledby="rp1-cap" data-desc="Ce que faisait la revue de code chez Overmind : attraper les bugs, assurer la conformité SOC 2 et ISO 27001, former les ingénieurs juniors et construire une vision partagée du fonctionnement du système. Puis le même commentaire de revue envoyé à deux auteurs. Quand l’auteur est une personne, il en sort quelque chose de bon dans tous les cas : si vous aviez raison, elle apprend et le produit s’améliore ; si elle avait raison, vous découvrez une contrainte que vous ignoriez. Quand l’auteur est un bot qui traite lui-même les commentaires de revue, il acquiesce et applique le commentaire, que vous ayez eu raison ou tort. Leçon numéro un : l’IA n’est pas votre pair, donc la revue par les pairs ne s’applique pas à son travail.">
<ol class="rp-jobs" aria-label="Ce que faisait la revue de code">
<li><b>1</b>Attraper les bugs</li>
<li><b>2</b>Conformité SOC 2 et ISO 27001</li>
<li><b>3</b>Former les ingénieurs juniors</li>
<li><b>4</b>Une vision partagée du fonctionnement du système</li>
</ol>
<div class="mp-two-row">
<div class="mp-two-card">
<p class="mp-two-who">L’auteur est une personne</p>
<p class="rp-cmt">Votre commentaire de revue</p>
<p class="rp-out"><span class="rp-k">Si vous aviez raison</span>Elle apprend, et le produit s’améliore</p>
<p class="rp-out"><span class="rp-k">Si elle avait raison</span>Vous découvrez une contrainte que vous ignoriez</p>
</div>
<p class="mp-two-vs">vs</p>
<div class="mp-two-card mp-two-peter">
<p class="mp-two-who">L’auteur est un bot</p>
<p class="rp-cmt">Votre commentaire de revue</p>
<p class="rp-out rp-out-ai"><span class="rp-k">Si vous aviez raison</span>Acquiesce et applique</p>
<p class="rp-out rp-out-ai"><span class="rp-k">Si vous aviez tort</span>Acquiesce et applique</p>
</div>
</div>
<p class="mp-strip"><b>Leçon 1</b><span>L’IA n’est pas votre pair, donc la revue par les pairs ne s’applique pas à son travail.</span></p>
<figcaption id="rp1-cap">Les quatre rôles, puis un même commentaire envoyé à deux auteurs. Seule la personne vous donne une réponse qui dépend de qui avait raison.</figcaption>
</figure>

## Deux personnes ont livré plus que toute l’entreprise

En début d’année, Overmind comptait environ 80 % d’ingénieurs. Le produit, c’était Dylan et un product manager. Ils trouvaient l’idée, faisaient la recherche et posaient le cadrage, c’est-à-dire l’architecture de haut niveau. Venaient ensuite une réunion de passation, une série de questions, puis les ingénieurs planifiaient et construisaient avec l’IA.

Le hic : une fois que Dylan avait tout fait jusqu’au cadrage, confier directement le travail à un agent allait plus vite que le confier à une personne. Il vit à San Francisco, une bonne partie de ses ingénieurs sont en Europe, et l’agent ne dort jamais.

Une semaine, le product manager et lui ont donc produit plus que toutes les autres personnes de l’entreprise réunies, sur chaque indicateur qu’ils suivaient : lignes de code, pull requests, tickets fermés et story points. Ça ne fait que six personnes, mais ce sont deux personnes qui abattent le travail de six ingénieurs à plein temps. « Aucun de nous deux n’est ingénieur », a-t-il dit.

Il reconnaît ouvertement avoir sérieusement envisagé de licencier la moitié des ingénieurs pour les remplacer par des product managers. Il ne l’a pas fait. À la place, il a fait venir tout le monde en France pendant une semaine pour remettre le process à plat.

<figure class="fd-fig rp-week" aria-labelledby="rp2-cap" data-desc="Une semaine chez Overmind, dessinée comme une balançoire. D’un côté, Dylan et son product manager, deux personnes qui confient le travail directement aux agents. De l’autre, les six autres personnes de l’entreprise. Le côté à deux pèse plus lourd que les six sur chaque indicateur suivi : lignes de code, pull requests, tickets fermés et story points. La phrase de Dylan : aucun de nous deux n’est ingénieur. Ce qu’il a envisagé : licencier la moitié des ingénieurs et les remplacer par des product managers. Ce qu’il a fait : faire venir tout le monde en France pendant une semaine pour remettre le process à plat.">
<svg class="rp-week-art" viewBox="0 0 480 170" aria-hidden="true"><path class="rp-fulcrum" d="M240,118 L222,160 H258 Z"/><line class="rp-ground" x1="40" y1="160" x2="440" y2="160"/>
<g class="rp-beam"><rect class="rp-plank" x="56" y="112" width="368" height="7"/>
<circle class="rp-prod" cx="92" cy="94" r="13"/><circle class="rp-prod" cx="124" cy="94" r="13"/><rect class="rp-agent" x="146" y="82" width="24" height="24"/>
<circle class="rp-eng" cx="290" cy="94" r="11"/><circle class="rp-eng" cx="316" cy="94" r="11"/><circle class="rp-eng" cx="342" cy="94" r="11"/><circle class="rp-eng" cx="368" cy="94" r="11"/><circle class="rp-eng" cx="394" cy="94" r="11"/><circle class="rp-eng" cx="329" cy="68" r="11"/></g></svg>
<div class="rp-week-k">
<p><svg class="rp-key" viewBox="0 0 16 16" aria-hidden="true"><circle class="rp-prod" cx="8" cy="8" r="6.5"/></svg><svg class="rp-key" viewBox="0 0 16 16" aria-hidden="true"><circle class="rp-prod" cx="8" cy="8" r="6.5"/></svg><svg class="rp-key" viewBox="0 0 16 16" aria-hidden="true"><rect class="rp-agent" x="2" y="2" width="12" height="12"/></svg><b>Dylan et le product manager</b>qui confient le travail directement aux agents</p>
<p><svg class="rp-key" viewBox="0 0 16 16" aria-hidden="true"><circle class="rp-eng" cx="8" cy="8" r="6.5"/></svg><b>Les six autres</b>tout le reste de l’entreprise</p>
</div>
<p class="rp-metrics"><span class="rp-k">Devant sur chaque indicateur</span><span>lignes de code</span><span>pull requests</span><span>tickets fermés</span><span>story points</span></p>
<div class="rp-pair">
<p><span class="rp-k">Envisagé</span><s>Licencier la moitié des ingénieurs, embaucher des product managers</s></p>
<p><span class="rp-k">Fait</span><b>Faire venir tout le monde en France une semaine</b></p>
</div>
<p class="mp-strip"><b>Dylan</b><span>« Aucun de nous deux n’est ingénieur. »</span></p>
<figcaption id="rp2-cap">La production d’une semaine, telle que Dylan l’a racontée. Il n’a donné aucun chiffre, seulement « plus que tous les autres réunis » : la bascule montre quel côté l’a emporté, pas de combien.</figcaption>
</figure>

## Le travail s’est déplacé vers la gauche

Voici la slide que j’ai retenue de la conférence, redessinée. Avant, le produit avait l’idée, la recherche et le cadrage, et l’ingénierie avait le plan, la construction et la livraison. Désormais, le produit garde l’idée, l’ingénierie prend la recherche, le cadrage et le plan, et un agent construit et livre.

<figure class="fd-fig rp-moved" aria-labelledby="rp3-cap" data-desc="Le travail s’est déplacé vers la gauche, redessiné d’après la slide de la conférence. Six étapes : idée, recherche, cadrage, plan, construction, livraison. Avant : le produit avait l’idée avec une personne, la recherche avec une et le cadrage avec deux ; l’ingénierie avait le plan avec trois personnes, la construction avec cinq et la livraison avec trois. Désormais : le produit a l’idée avec deux personnes ; l’ingénierie a la recherche avec quatre, le cadrage avec quatre et le plan avec deux ; un agent se charge de la construction et de la livraison, un pour chacune. La légende de la slide : une fois le plan écrit, le confier à un agent allait plus vite que le confier à une personne.">
<div class="rp-shift" role="img" aria-label="Six étapes, avant et maintenant. Avant : le produit avait Idée (1 personne), Recherche (1) et Cadrage (2) ; l’ingénierie avait Plan (3), Construction (5) et Livraison (3). Maintenant : le produit a Idée (2 personnes) ; l’ingénierie a Recherche (4), Cadrage (4) et Plan (2) ; un agent fait Construction (1) et Livraison (1).">
<p class="rp-row rp-row-h"><span></span><span class="rp-when">Avant</span><span class="rp-when">Maintenant</span></p>
<p class="rp-row"><span class="rp-stage">Idée</span><span class="rp-seg rp-p"><em>Produit</em><i></i></span><span class="rp-seg rp-p rp-now"><em>Produit</em><i></i><i></i></span></p>
<p class="rp-row"><span class="rp-stage">Recherche</span><span class="rp-seg rp-p"><em>Produit</em><i></i></span><span class="rp-seg rp-e rp-now"><em>Ingénierie</em><i></i><i></i><i></i><i></i></span></p>
<p class="rp-row"><span class="rp-stage">Cadrage</span><span class="rp-seg rp-p"><em>Produit</em><i></i><i></i></span><span class="rp-seg rp-e rp-now"><em>Ingénierie</em><i></i><i></i><i></i><i></i></span></p>
<p class="rp-row"><span class="rp-stage">Plan</span><span class="rp-seg rp-e"><em>Ingénierie</em><i></i><i></i><i></i></span><span class="rp-seg rp-e rp-now"><em>Ingénierie</em><i></i><i></i></span></p>
<p class="rp-row"><span class="rp-stage">Construction</span><span class="rp-seg rp-e"><em>Ingénierie</em><i></i><i></i><i></i><i></i><i></i></span><span class="rp-seg rp-a rp-now"><em>Agent</em><i></i></span></p>
<p class="rp-row"><span class="rp-stage">Livraison</span><span class="rp-seg rp-e"><em>Ingénierie</em><i></i><i></i><i></i></span><span class="rp-seg rp-a rp-now"><em>Agent</em><i></i></span></p>
</div>
<p class="rp-legend"><span><i class="rp-dot"></i>une personne sur le travail</span><span class="rp-arrow"><b aria-hidden="true">←</b>le travail s’est déplacé à gauche</span></p>
<p class="mp-strip"><b>Leçon 2</b><span>Si votre métier consiste à transformer des specs détaillées en code de qualité, vous n’avez plus de métier. C’est vrai depuis janvier et Opus 4.5, dit-il.</span></p>
<figcaption id="rp3-cap">Redessiné d’après la slide. Sa légende : « Une fois le plan écrit, le confier à un agent allait plus vite que le confier à une personne. »</figcaption>
</figure>

Sa deuxième leçon est sortie de cette semaine-là : si vous pensez que votre métier consiste à transformer des specs détaillées en code de qualité, vous n’avez plus de métier. Selon lui, c’est vrai depuis janvier et Opus 4.5.

## Une page, 24 heures, aucune question

Déplacer les ingénieurs vers la gauche s’est accompagné d’une règle. Le produit remet un document d’une page. L’ingénieur qui le reçoit montre une démo sous 24 heures, et n’a le droit de poser aucune question pendant ce temps.

Un document d’une page est plein de trous, et c’est tout l’intérêt. Est-ce que ça doit marcher sur mobile ? Allez vérifier si les gens utilisent ce genre d’app sur mobile. Obligés de lever l’ambiguïté eux-mêmes, les ingénieurs avaient le plus souvent raison.

Personne ne peut absorber toute cette nouvelle ambiguïté et continuer à tenir à chaque ligne de code, cela dit. Le détail ligne par ligne est donc passé aux agents.

<figure class="fd-fig rp-handover" aria-labelledby="rp4-cap" data-desc="La nouvelle passation, en trois étapes. Un : le produit remet un document d’une page, plein de trous à dessein. Deux : l’ingénieur a 24 heures et n’a le droit de poser aucune question. Trois : il montre une démo, où chaque trou est comblé selon son propre jugement, par exemple en allant vérifier si les gens utilisent ce genre d’app sur mobile. Obligés de lever l’ambiguïté eux-mêmes, les ingénieurs avaient le plus souvent raison.">
<ol class="mp-trio">
<li><svg class="mp-grow-art" viewBox="0 0 170 100" aria-hidden="true"><rect class="rp-doc" x="55" y="6" width="60" height="88"/><rect class="mp-ln" x="63" y="18" width="40" height="5"/><rect class="mp-ln" x="63" y="30" width="44" height="4"/><rect class="rp-gap" x="63" y="40" width="44" height="4"/><rect class="mp-ln" x="63" y="50" width="30" height="4"/><rect class="rp-gap" x="63" y="60" width="44" height="4"/><rect class="rp-gap" x="63" y="70" width="36" height="4"/><rect class="mp-ln" x="63" y="80" width="40" height="4"/></svg><p class="mp-trio-n"><b>1</b>Une page</p><p class="mp-trio-what">Venue du produit, pleine de trous exprès</p></li>
<li><svg class="mp-grow-art" viewBox="0 0 170 100" aria-hidden="true"><circle class="rp-clock" cx="72" cy="52" r="38"/><line class="rp-hand-h" x1="72" y1="52" x2="72" y2="30"/><line class="rp-hand" x1="72" y1="52" x2="72" y2="22"/><circle class="rp-pin" cx="72" cy="52" r="3"/><text class="rp-q" x="136" y="62" text-anchor="middle">?</text><line class="rp-strike" x1="118" y1="68" x2="154" y2="32"/></svg><p class="mp-trio-n"><b>2</b>24 heures</p><p class="mp-trio-what">Aucune question autorisée</p></li>
<li><svg class="mp-grow-art" viewBox="0 0 170 100" aria-hidden="true"><rect class="rp-screen" x="30" y="14" width="110" height="66"/><path class="rp-play" d="M76,34 L100,47 L76,60 Z"/><rect class="rp-stand" x="78" y="80" width="14" height="8"/><rect class="rp-stand" x="62" y="88" width="46" height="4"/></svg><p class="mp-trio-n"><b>3</b>Une démo</p><p class="mp-trio-what">Chaque trou comblé selon le jugement de l’ingénieur</p></li>
</ol>
<p class="mp-strip"><b>Résultat</b><span>Laissés seuls face à l’ambiguïté, les ingénieurs avaient le plus souvent raison.</span></p>
<figcaption id="rp4-cap">La règle de la semaine en France. Les traits en pointillés du document sont les trous que l’ingénieur doit combler seul.</figcaption>
</figure>

## Toutes les boucles d’agents ne se valent pas

Quand l’équipe a étudié comment les gens construisent des « usines logicielles » et des « usines lumières éteintes » agentiques, la plupart faisaient tourner ce qu’il appelle une boucle do-while. L’agent prend un ticket, décide de l’approche, fait les compromis, écrit le code et les tests, enregistre parfois une vidéo de démo, et ouvre une pull request tout à la fin. Ensuite, un humain doit reconstituer chaque décision à partir du code.

L’idée que l’IA lui prenne son travail l’inquiète un peu. Ce qui l’inquiète davantage, c’est que l’IA lui prenne la partie intéressante et qu’on le paie pour valider des décisions prises sans lui.

L’équipe a donc construit une boucle until. Des agents explorent la base de code, par exemple pour vérifier s’il existe déjà une pratique pour ce genre de changement. Des humains décident de l’approche, font les compromis et écrivent un plan d’implémentation, qu’un pair relit. Puis un agent écrit le code et un second agent le compare au plan. Le moindre écart renvoie le code, et la boucle tourne jusqu’à ce que code et plan correspondent.

<figure class="fd-fig rp-loops" aria-labelledby="rp5-cap" data-desc="Où se place la revue dans deux types de boucle d’agents. La boucle do-while, celle de la plupart des usines logicielles agentiques : un agent prend un ticket, décide de l’approche et des compromis, écrit le code, les tests et parfois une vidéo de démo, puis ouvre une pull request ; c’est seulement là qu’un humain la relit, en reconstituant chaque décision à partir du code. La boucle until d’Overmind : des agents explorent la base de code, des humains décident de l’approche et des compromis et écrivent le plan, et un pair relit le plan. Ensuite, un agent écrit le code et un agent de revue compare le code au plan, et ces deux étapes se répètent jusqu’à ce que le code corresponde au plan. Le code part alors en production sans qu’aucun humain ne le lise.">
<div class="mp-two-row">
<div class="mp-two-card">
<p class="mp-two-who">La plupart des usines d’agents</p>
<p class="mp-two-name">do-while</p>
<ol class="rp-flow">
<li><span class="rp-who rp-who-ai">Agent</span>Prend un ticket</li>
<li><span class="rp-who rp-who-ai">Agent</span>Décide de l’approche et des compromis</li>
<li><span class="rp-who rp-who-ai">Agent</span>Écrit le code et les tests, parfois une vidéo de démo</li>
<li><span class="rp-who rp-who-ai">Agent</span>Ouvre une pull request</li>
<li class="rp-rev"><span class="rp-who">Humain</span>Relit : reconstitue chaque décision à partir du code</li>
</ol>
</div>
<p class="mp-two-vs">vs</p>
<div class="mp-two-card mp-two-peter">
<p class="mp-two-who">Ce que fait tourner Overmind</p>
<p class="mp-two-name">until</p>
<ol class="rp-flow">
<li><span class="rp-who rp-who-ai">Agent</span>Explore la base de code</li>
<li><span class="rp-who">Humain</span>Décide de l’approche et des compromis</li>
<li><span class="rp-who">Humain</span>Écrit le plan</li>
<li class="rp-rev"><span class="rp-who">Humain</span>Relit : un pair lit le plan</li>
<li class="rp-until"><span class="rp-until-t">Se répète jusqu’à ce que le code corresponde au plan</span>
<ol class="rp-flow">
<li class="rp-tick"><span class="rp-who rp-who-ai">Agent</span>Écrit le code</li>
<li class="rp-tick rp-tick-2"><span class="rp-who rp-who-ai">Agent</span>Compare le code au plan</li>
</ol></li>
<li><span class="rp-who rp-who-out">Prod</span>Livre, sans qu’aucun humain lise le code</li>
</ol>
</div>
</div>
<figcaption id="rp5-cap">Les deux boucles, de haut en bas. La ligne surlignée marque l’endroit où un humain relit : à la fin dans l’une, avant que le code existe dans l’autre.</figcaption>
</figure>

Une fois que la boucle ressemble à ça, la place de la revue par les pairs saute aux yeux : avant que la boucle démarre.

## Relisez le plan, puis arrêtez de lire

Les plans ont droit à une vraie revue, parce que les gens y tiennent de nouveau. Quand quelqu’un commente aujourd’hui une pull request de Dylan, sa réaction honnête, c’est : « Je n’ai même pas lu ce code. Si ça se trouve, vous êtes le premier à l’avoir lu. » Quand quelqu’un commente son plan, il argumente, parce qu’il en a écrit chaque ligne et sait pourquoi chacune est là.

Il traite un plan approuvé comme un changement pré-approuvé. La plupart des dispositifs de conformité connaissent déjà l’idée : un changement bien défini peut être approuvé à l’avance, tant que vous faites exactement ça. La boucle ne peut pas se terminer tant que le code ne correspond pas à un plan approuvé, donc le code part en production sans seconde revue humaine.

Deux contrôles gardent le système honnête :

- Des humains vérifient par sondage un petit pourcentage des comparaisons entre plan et code, pour s’assurer que l’agent de revue ne se trompe pas.
- Si l’agent de code trouve une meilleure idée, ou une vraie raison de ne pas suivre le plan, il consigne un écart, et un humain en prend acte.

Overmind était en plein audit au moment de la conférence. Dylan est convaincu que le process est conforme, et il le saura à la fin de l’audit.

L’outillage n’a aucune interface utilisateur. Les plans s’écrivent dans Claude Code ou dans n’importe quel harnais (harness), et envoyer un plan, le récupérer ou laisser une revue, ce sont tous des appels MCP.

<figure class="fd-fig rp-gate" aria-labelledby="rp6-cap" data-desc="Comment un changement arrive en production chez Overmind. Des humains écrivent un plan d’environ une page et demie, avec les compromis et leurs raisons, et une fois qu’un pair l’approuve, il compte comme un changement pré-approuvé. La boucle until tourne sur des agents : l’un écrit le code, un autre le compare au plan, et la boucle ne peut pas se terminer tant qu’ils ne correspondent pas. Le résultat part en production sans seconde revue humaine. Deux contrôles gardent le système honnête : des humains vérifient par sondage un petit pourcentage des comparaisons entre plan et code, et quand l’agent de code s’écarte du plan, pour une meilleure idée ou une vraie raison, il consigne un écart dont un humain prend acte. Il n’y a pas d’interface utilisateur : les plans s’écrivent dans Claude Code ou dans n’importe quel harnais, et les envoyer, les récupérer et les relire, ce sont des appels MCP.">
<div class="rp-gate-in">
<div class="flow" role="group" aria-label="D’un plan approuvé à la production, en passant par la boucle until">
  <div class="flow-node">
    <p class="flow-label">Humains</p>
    <h3>Plan approuvé</h3>
    <p class="rp-stamp" aria-hidden="true">Approuvé</p>
    <ul>
      <li>Environ une page et demie</li>
      <li>Les compromis et leurs raisons</li>
      <li>Un changement pré-approuvé</li>
    </ul>
  </div>
  <div class="flow-link" aria-hidden="true"><span>→</span></div>
  <div class="flow-node flow-node--core">
    <p class="flow-label">Agents</p>
    <h3>La boucle until</h3>
    <ul>
      <li>L’un écrit le code</li>
      <li>L’autre le compare au plan</li>
      <li>Pas de sortie tant qu’ils diffèrent</li>
    </ul>
  </div>
  <div class="flow-link" aria-hidden="true"><span>→</span></div>
  <div class="flow-node">
    <p class="flow-label">Pas de seconde revue</p>
    <h3>Production</h3>
    <ul>
      <li>Du code qu’aucun humain n’a lu</li>
      <li>Conforme à un plan approuvé</li>
    </ul>
  </div>
</div>
</div>
<div class="rp-pair">
<p><span class="rp-k">Sondage</span>Des humains vérifient un petit pourcentage des comparaisons entre plan et code</p>
<p><span class="rp-k">Un écart</span>L’agent consigne pourquoi il a quitté le plan, et un humain en prend acte</p>
</div>
<p class="mp-strip"><b>Sans UI</b><span>Les plans s’écrivent dans Claude Code ou dans n’importe quel harnais. Les envoyer, les récupérer et les relire, ce sont des appels MCP.</span></p>
<figcaption id="rp6-cap">Le changement pré-approuvé, de bout en bout, avec les deux contrôles en dessous. L’audit était encore en cours au moment de la conférence.</figcaption>
</figure>

## Trois semaines plus tard

L’équipe a changé de process en une semaine, puis a comparé les trois semaines suivantes aux trois précédentes. Le nombre d’issues terminées a triplé, celui des commits aussi. Le lead time, entre le moment où un ticket est pris et celui où il tourne en production, est tombé de 3,2 jours à 1,3.

Ce sont les chiffres d’une petite équipe, trois semaines contre trois semaines, mesurés par l’entreprise elle-même. Et Overmind vend désormais un produit construit sur exactement cette idée : prenez la conférence comme un argument solide, venant de quelqu’un qui a un intérêt dans l’affaire.

<figure class="fd-fig rp-weeks" aria-labelledby="rp7-cap" data-desc="Les résultats d’Overmind dans les trois semaines qui ont suivi le changement, comparés aux trois semaines d’avant. Les issues terminées ont été multipliées par trois. Les commits ont été multipliés par trois. Le lead time, entre le moment où un ticket est pris et celui où il tourne en production, est passé de 3,2 jours à 1,3 jour, dessiné en deux barres à l’échelle.">
<div class="mp-stats">
<p><b>3×</b><span>issues terminées</span></p>
<p><b>3×</b><span>commits</span></p>
<p><b>1,3 jour</b><span>de lead time, contre 3,2</span></p>
</div>
<div class="rp-bars">
<p class="rp-bars-h">Lead time, du ticket pris au code en production</p>
<p class="rp-bar"><span>Les trois semaines d’avant</span><i class="rp-w-before"></i><b>3,2 jours</b></p>
<p class="rp-bar rp-bar-win"><span>Les trois semaines d’après</span><i class="rp-w-after"></i><b>1,3 jour</b></p>
</div>
<figcaption id="rp7-cap">Les propres chiffres d’Overmind pour sa propre équipe, tels que Dylan les a donnés sur scène. Les deux barres sont à l’échelle.</figcaption>
</figure>

## Le goulot d’étranglement, c’était l’attention

L’équipe n’a jamais passé 90 % de ses journées en revue de code, donc le facteur 3 ne vient pas du temps de revue économisé. Sa réponse : l’attention. Les pull requests obligeaient à jongler avec trop de balles à la fois et à changer de contexte en permanence.

L’ancienne chronologie d’un changement : environ 3 heures à écrire le code, 15 minutes à ouvrir la pull request, une journée et demie à attendre un relecteur débordé, puis une heure d’allers-retours. Vous ne pouvez rien en oublier, parce que vous êtes le seul à comprendre le code. Le temps qu’un commentaire revienne, il avait écrit 15 000 lignes de plus et ne se souvenait plus de ce qu’il essayait de faire, au point qu’abandonner le changement pouvait être plus simple que de s’y replonger. Environ quatre heures et demie de travail ont vécu dans sa tête pendant une quarantaine d’heures.

Un plan s’écrit plus vite, et se relit beaucoup plus vite, que 3 000 lignes de Go. Une fois approuvé, vous le retenez comme la description du fonctionnement du système. Le code n’existe pas encore, mais il existera dans trois heures environ, parce qu’il n’y a pas d’autre sortie de la boucle. Ça coûte deux heures d’attention, à peu près.

<figure class="fd-fig rp-head" aria-labelledby="rp8-cap" data-desc="Combien de temps un changement vit dans votre tête, sur une échelle de 40 heures. Avec la revue de pull request : environ 3 heures à écrire le code, 15 minutes à ouvrir la pull request, environ une journée et demie à attendre un relecteur, puis une heure de revue. Environ quatre heures et demie de travail, et vous gardez tout ça en tête pendant environ 40 heures. Avec la revue de plan : deux heures environ pour écrire le plan et le faire relire, et c’est tout ce que vous gardez en tête, puis environ 3 heures de boucle d’agent auxquelles vous ne pensez plus.">
<div class="rp-tl" role="img" aria-label="Sur une échelle de 40 heures. Pull request : 3 heures de code, 15 minutes pour l’ouvrir, environ 36 heures d’attente, 1 heure de revue, le tout dans votre tête. Plan : deux heures environ dans votre tête, puis environ 3 heures de boucle d’agent hors de votre tête.">
<p class="rp-tl-label"><b>Pull request</b>environ 4,5 h de travail, environ 40 h dans la tête</p>
<p class="rp-tl-head rp-w-all"></p>
<p class="rp-tl-track"><i class="rp-t-work rp-w-code"></i><i class="rp-t-work rp-w-open"></i><i class="rp-t-wait rp-w-wait"></i><i class="rp-t-work rp-w-rev"></i></p>
<p class="rp-tl-label"><b>Plan</b>deux heures environ dans la tête</p>
<p class="rp-tl-head rp-w-plan"></p>
<p class="rp-tl-track"><i class="rp-t-work rp-w-plan"></i><i class="rp-t-agent rp-w-code"></i></p>
<p class="rp-tl-axis"><span>0 h</span><span>10 h</span><span>20 h</span><span>30 h</span><span>40 h</span></p>
</div>
<ul class="rp-tl-key">
<li><i class="rp-t-head"></i>dans la tête</li>
<li><i class="rp-t-work"></i>votre temps de travail effectif</li>
<li><i class="rp-t-wait"></i>attente, toujours dans la tête</li>
<li><i class="rp-t-agent"></i>boucle d’agent, sortie de la tête</li>
</ul>
<figcaption id="rp8-cap">Les durées de son exemple, à l’échelle. Il n’a pas détaillé les « deux heures environ » du plan, donc elles sont dessinées en un seul bloc.</figcaption>
</figure>

## Une recette se refuse plus facilement qu’un plat

Debout dans la cuisine, au moment de décider quoi préparer, c’est facile de dire « Je n’ai pas envie de salade. » Une fois la salade faite, vous ne pouvez plus. Demander à quelqu’un de refaire un plat demande une énergie à la Gordon Ramsay, et c’est exactement ça, rejeter une pull request. C’est dur émotionnellement, et c’est pourquoi c’étaient en général les ingénieurs les plus seniors qui s’en chargeaient.

Les plans ont changé ça. Overmind a désormais 2,8 fois plus de chances de rejeter un plan qu’elle n’en a jamais eu de rejeter une pull request, et les rejets viennent de toute l’équipe, produit compris. C’est aussi bien moins cher : un plan rejeté ajoute environ 40 minutes de lead time, alors que le moindre commentaire sur une pull request ajoutait 16 heures.

Sa grande crainte au départ, c’était de voir des agents écrire les plans et d’autres agents les relire, sans personne pour rien lire. Il dit que les chiffres montrent que ce n’est pas arrivé. Les plans sont assez courts pour que les gens les lisent, et ils y tiennent.

Ça ouvre aussi une porte aux juniors. Un junior qui ne comprend pas un plan peut en discuter avec son agent jusqu’à ce qu’il le comprenne, et rejeter ce qui n’a toujours pas de sens. Le product manager de Dylan relit les plans d’ingénierie exactement comme ça, et quand il conteste, il a raison environ 80 % du temps.

Dylan voit une victoire dans les 8 % de plans abandonnés. Le quoi semblait bon, le comment a montré que ça n’en valait pas la peine, et personne n’a eu à le construire juste parce que c’était déjà dans le sprint.

<figure class="fd-fig rp-recipe" aria-labelledby="rp9-cap" data-desc="Une recette face à un plat. Avant que quoi que ce soit soit cuisiné, il est facile de dire je n’ai pas envie de salade : c’est un plan, et toute l’équipe rejette des plans désormais, produit compris. Une fois le plat cuisiné, le renvoyer demande une énergie à la Gordon Ramsay : c’est une pull request, et en général seuls les ingénieurs les plus seniors le faisaient. Le coût d’une objection, à l’échelle : un plan rejeté ajoute environ 40 minutes de lead time, le moindre commentaire sur une pull request ajoutait 16 heures. Overmind a 2,8 fois plus de chances de rejeter un plan qu’elle n’en a jamais eu de rejeter une pull request, les objections du product manager sur les plans sont justes environ 80 % du temps, et 8 % des plans sont abandonnés avant que le moindre code existe.">
<div class="mp-two-row">
<div class="mp-two-card mp-two-peter">
<p class="mp-two-who">Avant la cuisson</p>
<p class="mp-two-name">Une recette</p>
<svg class="mp-two-art" viewBox="0 0 300 100" aria-hidden="true"><rect class="rp-doc" x="104" y="6" width="92" height="88"/><rect class="rp-doc-h" x="104" y="6" width="92" height="16"/><rect class="rp-box" x="114" y="32" width="8" height="8"/><rect class="mp-ln" x="128" y="34" width="56" height="4"/><rect class="rp-box" x="114" y="48" width="8" height="8"/><rect class="mp-ln" x="128" y="50" width="44" height="4"/><rect class="rp-box" x="114" y="64" width="8" height="8"/><rect class="mp-ln" x="128" y="66" width="52" height="4"/><rect class="rp-box" x="114" y="80" width="8" height="8"/><rect class="mp-ln" x="128" y="82" width="36" height="4"/></svg>
<p class="mp-two-line">« Pas envie de salade », c’est facile à dire</p>
<p class="mp-two-line">Le plan : tout le monde en rejette désormais</p>
</div>
<p class="mp-two-vs">vs</p>
<div class="mp-two-card">
<p class="mp-two-who">Une fois cuisiné</p>
<p class="mp-two-name">Un plat</p>
<svg class="mp-two-art" viewBox="0 0 300 100" aria-hidden="true"><path class="rp-leaf" d="M134,58 Q125,33 100,24 Q109,49 134,58 Z"/><path class="rp-vein" d="M134,58 L107,31"/><path class="rp-leaf" d="M146,58 Q147,29 128,8 Q127,37 146,58 Z"/><path class="rp-vein" d="M146,58 L132,19"/><path class="rp-leaf" d="M158,58 Q175,34 170,6 Q153,30 158,58 Z"/><path class="rp-vein" d="M158,58 L167,17"/><path class="rp-leaf" d="M166,58 Q193,48 204,22 Q177,32 166,58 Z"/><path class="rp-vein" d="M166,58 L196,30"/><path class="rp-leaf" d="M152,58 Q160,38 150,18 Q142,38 152,58 Z"/><path class="rp-vein" d="M152,58 L150,27"/><circle class="rp-olive" cx="122" cy="48" r="7"/><circle class="rp-olive" cx="182" cy="46" r="6"/><path class="rp-bowl" d="M96,52 H204 Q200,92 150,92 Q100,92 96,52 Z"/><rect class="rp-base" x="132" y="92" width="36" height="5"/></svg>
<p class="mp-two-line">Le renvoyer demande une énergie à la Gordon Ramsay</p>
<p class="mp-two-line">La pull request : les seniors s’en chargeaient</p>
</div>
</div>
<div class="rp-bars">
<p class="rp-bars-h">Lead time ajouté par une objection</p>
<p class="rp-bar rp-bar-win"><span>Un plan est rejeté</span><i class="rp-w-40m"></i><b>+40 min</b></p>
<p class="rp-bar"><span>Une pull request reçoit un commentaire</span><i class="rp-w-16h"></i><b>+16 h</b></p>
</div>
<div class="mp-stats">
<p><b>2,8×</b><span>plus de chances de rejeter un plan qu’une pull request</span></p>
<p><b>80 %</b><span>des objections du product manager étaient justes</span></p>
<p><b>8 %</b><span>des plans abandonnés avant toute ligne de code</span></p>
</div>
<figcaption id="rp9-cap">La salade, puis les chiffres de la conférence. Les deux barres d’objection sont à l’échelle : 40 minutes contre 16 heures.</figcaption>
</figure>

## Le comment compte toujours

Il a conclu en contredisant une phrase de Paul Graham : « Quand n’importe qui peut fabriquer n’importe quoi, ce qui fait la différence, c’est ce que vous choisissez de fabriquer. » Pour Dylan, ce qui fait la différence, c’est toujours la façon dont vous le fabriquez.

Deux ordinateurs portables peuvent avoir exactement la même fiche technique et être des produits complètement différents. La différence, ce sont des centaines de décisions sur le comment, prises en cours de route, et ce sont elles qui décident si un produit est performant, s’il tient la charge et s’il reste facile à déboguer. Son conseil : ne restez pas en bas d’une boucle où l’agent prend ces décisions à votre place, et refusez les outils qui vous y mettent.

Ce qui change, c’est le niveau auquel vous y répondez. Vous ne vous souciez plus de l’organisation des fichiers ni du nom des fonctions. Vous décidez toujours de la façon dont les données circulent, dont l’authentification fonctionne et dont le système gère les pannes.

<figure class="fd-fig rp-how" aria-labelledby="rp10-cap" data-desc="Le comment compte toujours. Deux ordinateurs portables peuvent avoir exactement la même fiche technique et être pourtant des produits complètement différents, à cause des centaines de décisions sur le comment prises en cours de route. Ces décisions remontent d’un niveau. Vous les prenez toujours dans le plan : comment les données circulent, comment l’authentification fonctionne, comment le système gère les pannes. Les agents les prennent dans le code : comment les fichiers sont organisés et comment les fonctions sont nommées. Le conseil de Dylan : ne restez pas en bas d’une boucle où l’agent prend ces décisions à votre place, et refusez les outils qui vous y mettent.">
<svg class="rp-how-art" viewBox="0 0 480 130" aria-hidden="true"><rect class="rp-doc" x="208" y="8" width="64" height="76"/><rect class="rp-doc-h" x="208" y="8" width="64" height="14"/><rect class="mp-ln" x="216" y="32" width="46" height="4"/><rect class="mp-ln" x="216" y="42" width="40" height="4"/><rect class="mp-ln" x="216" y="52" width="48" height="4"/><rect class="mp-ln" x="216" y="62" width="34" height="4"/>
<path class="rp-arc" d="M206,50 Q150,46 128,64"/><path class="rp-arc" d="M274,50 Q330,46 352,64"/>
<g class="rp-lap rp-lap-a"><rect x="58" y="66" width="104" height="56"/><rect class="rp-lap-scr" x="66" y="72" width="88" height="44"/><rect class="rp-scr-ln" x="74" y="80" width="56" height="4"/><rect class="rp-scr-ln" x="74" y="90" width="70" height="4"/><rect class="rp-scr-ln" x="74" y="100" width="44" height="4"/><rect class="rp-lap-kb" x="44" y="122" width="132" height="6"/></g>
<g class="rp-lap rp-lap-b"><rect x="318" y="62" width="104" height="60"/><rect class="rp-lap-scr2" x="326" y="68" width="88" height="48"/><rect class="rp-scr-tile" x="334" y="76" width="34" height="14"/><rect class="rp-scr-tile" x="372" y="76" width="34" height="14"/><rect class="rp-scr-tile" x="334" y="94" width="34" height="14"/><rect class="rp-scr-tile" x="372" y="94" width="34" height="14"/><rect class="rp-lap-kb2" x="306" y="122" width="128" height="6"/></g></svg>
<p class="rp-how-k"><span>Un produit</span><span class="rp-how-mid">Même fiche technique</span><span>Un autre produit</span></p>
<div class="rp-layers">
<p class="rp-layer rp-layer-you"><span class="rp-k">Vous décidez toujours, dans le plan</span><span class="rp-chips"><span>le flux des données</span><span>le fonctionnement de l’authentification</span><span>la gestion des pannes</span></span></p>
<p class="rp-layer rp-layer-ai"><span class="rp-k">Les agents décident, dans le code</span><span class="rp-chips"><span>l’organisation des fichiers</span><span>le nommage des fonctions</span></span></p>
</div>
<p class="mp-strip"><b>Dylan</b><span>Ne restez pas en bas de la boucle, et refusez les outils qui vous y mettent.</span></p>
<figcaption id="rp10-cap">Même fiche technique, deux produits : la différence, c’est le comment. Les questions de comment ne disparaissent pas, elles remontent dans le plan.</figcaption>
</figure>

## Essayez

Overmind a publié son outil interne sous le nom d’[until](https://until.dev/), « des tickets adossés à git, pour les humains et les agents ». Vous écrivez le plan, quelqu’un le valide, chaque section du plan devient une tâche que vos agents prennent en charge, et un agent de revue compare le code au plan, si bien que tout ce qui manque ou dépasse vous revient sous forme de décision. Pour l’instant, c’est sur liste d’attente uniquement, et le site cite Claude Code, Cursor, Codex, Pi, Factory Droid, Amp et OpenCode.

L’argument existe aussi sous forme de manifeste, [AI Is Not Your Peer](https://notyourpeer.com/), signé Dylan Ratcliffe, James Lane et David Schmitt. Sa phrase clé : « L’artefact qui mérite une revue, c’est le plan que nous avons écrit avant que l’agent écrive quoi que ce soit. »

<figure class="fd-fig rp-until" aria-labelledby="rp11-cap" data-desc="until, l’outil qu’Overmind a tiré de son outil interne, en quatre étapes d’après son site. Un : vous écrivez le plan ; chaque fonctionnalité commence par un plan, et le plan vous appartient. Deux : quelqu’un le valide ; aucun agent ne démarre tant qu’une personne n’a pas dit oui. Trois : les agents prennent les tâches ; chaque section du plan devient une tâche avec son propre nom, et vos agents les prennent en charge. Quatre : vérifier l’écart ; un agent de revue compare le code au plan, et tout ce qui manque ou dépasse vous revient sous forme de décision. L’outil est sur liste d’attente, et le site cite Claude Code, Cursor, Codex, Pi, Factory Droid, Amp et OpenCode.">
<ol class="rp-steps">
<li><p class="rp-step-n"><b>01</b>Vous écrivez le plan</p><p class="rp-step-s">Chaque fonctionnalité commence par un plan, et le plan vous appartient</p></li>
<li><p class="rp-step-n"><b>02</b>Quelqu’un le valide</p><p class="rp-step-s">Aucun agent ne démarre tant qu’une personne n’a pas dit oui</p></li>
<li class="rp-step-ai"><p class="rp-step-n"><b>03</b>Les agents prennent les tâches</p><p class="rp-step-s">Chaque section du plan devient une tâche nommée</p></li>
<li class="rp-step-ai"><p class="rp-step-n"><b>04</b>Vérifier l’écart</p><p class="rp-step-s">Tout ce qui manque ou dépasse vous revient sous forme de décision</p></li>
</ol>
<p class="rp-metrics"><span class="rp-k">Harnais cités</span><span>Claude Code</span><span>Cursor</span><span>Codex</span><span>Pi</span><span>Factory Droid</span><span>Amp</span><span>OpenCode</span></p>
<p class="mp-strip"><b>Liste d’attente</b><span>Des tickets adossés à git, pour les humains et les agents.</span></p>
<figcaption id="rp11-cap">Les quatre étapes telles que until.dev les décrit. Les deux premières reviennent aux humains, les deux dernières aux agents.</figcaption>
</figure>

Pour aller plus loin :

- [Pull Requests Are Dead, Long Live Peer Review](https://www.youtube.com/watch?v=5lq5zp6wYbQ), la conférence, 25 minutes
- [AI Is Not Your Peer](https://notyourpeer.com/), le manifeste
- [until](https://until.dev/), l’outil de revue de plan, sur liste d’attente
- [L’usine logicielle agentique, c’est celle de 2022 avec une seule case changée](/fr/notes/software-factory-2022-to-lights-off.html), là où la revue est devenue mon goulot d’étranglement
- [Ce qui casse quand un agent IA gère un vrai commerce](/fr/notes/what-breaks-when-an-agent-runs-a-business.html), une autre conférence d’AGNTCon + MCPCon

Regardez [la conférence](https://www.youtube.com/watch?v=5lq5zp6wYbQ), puis essayez de relire votre prochaine tâche d’agent sous forme de plan, avant que le moindre code existe. Dites-moi si votre lead time bouge.
