---
title: Review the plan, not the pull request
description: Overmind stopped reading its own pull requests and moved peer review to a page-and-a-half plan written before an agent writes any code. Notes on Dylan Ratcliffe's talk, the until loop behind it, and lead time down from 3.2 to 1.3 days.
date: 2026-10-15
tags: AI coding agents, code review, planning, MCP
---

Overmind stopped reading its own pull requests. Almost all the code it ships to production is now read by no human, the author included. Review didn't go away, though. It moved to a plan of about a page and a half that people argue over before an agent writes a line, and in the three weeks after the switch the team closed three times as many issues while lead time fell from 3.2 days to 1.3.

The talk is [Pull Requests Are Dead, Long Live Peer Review](https://www.youtube.com/watch?v=5lq5zp6wYbQ) by Dylan Ratcliffe, founder and CEO of [Overmind](https://overmind.tech/), from AGNTCon + MCPCon North America 2026. Overmind uses AI to simulate changes to large back-end infrastructure. In my [software factory note](/notes/software-factory-2022-to-lights-off.html), the slow part of my own setup is my review queue. This talk is one team's answer to that.

## Review was doing four jobs

Like most teams, Overmind leaned on code review for much more than bugs. It caught bugs, it covered SOC 2 and ISO 27001 compliance, it trained junior engineers, and it built a shared picture of how the system actually works.

What made it work is that a human cared about every line. Comment on a person's pull request and something good happens either way. If you're right, they learn and the product gets better. If they push back, there's a constraint you didn't know about, and now you do.

Comment on a pull request from a bot that addresses its own review comments, and you get the same eager agreement whether you're absolutely right or absolutely wrong. That's his first lesson: AI is not your peer, so you can't peer review its work.

<figure class="fd-fig rp-peer" aria-labelledby="rp1-cap" data-desc="What code review was doing at Overmind: catching bugs, SOC 2 and ISO 27001 compliance, training junior engineers, and building a shared picture of how the system works. Then the same review comment sent to two authors. When the author is a person, something good happens either way: if you were right, they learn and the product gets better; if they were right, you learn a constraint you didn't know. When the author is a bot that addresses its own review comments, it agrees and addresses the comment whether you were right or wrong. Lesson one: AI is not your peer, so you can't peer review its work.">
<ol class="rp-jobs" aria-label="What code review was doing">
<li><b>1</b>Catching bugs</li>
<li><b>2</b>SOC 2 and ISO 27001 compliance</li>
<li><b>3</b>Training junior engineers</li>
<li><b>4</b>A shared picture of how the system works</li>
</ol>
<div class="mp-two-row">
<div class="mp-two-card">
<p class="mp-two-who">The author is a person</p>
<p class="rp-cmt">Your review comment</p>
<p class="rp-out"><span class="rp-k">If you were right</span>They learn, and the product gets better</p>
<p class="rp-out"><span class="rp-k">If they were right</span>You learn a constraint you didn't know</p>
</div>
<p class="mp-two-vs">vs</p>
<div class="mp-two-card mp-two-peter">
<p class="mp-two-who">The author is a bot</p>
<p class="rp-cmt">Your review comment</p>
<p class="rp-out rp-out-ai"><span class="rp-k">If you were right</span>Agrees and addresses it</p>
<p class="rp-out rp-out-ai"><span class="rp-k">If you were wrong</span>Agrees and addresses it</p>
</div>
</div>
<p class="mp-strip"><b>Lesson 1</b><span>AI is not your peer, so you can't peer review its work.</span></p>
<figcaption id="rp1-cap">The four jobs, then one comment sent to two authors. Only the person gives you an answer that depends on whether you were right.</figcaption>
</figure>

## Two people out-shipped the company

At the start of the year Overmind was about 80% engineers. Product was Dylan and one product manager. They came up with the idea, did the research and worked out the shape, meaning the high-level architecture. Then came a handover meeting, a round of questions, and engineers planned and built it with AI.

The catch: once Dylan had done everything up to the shape, handing it straight to an agent was faster than handing it to a person. He lives in San Francisco, a bunch of his engineers are in Europe, and the agent never sleeps.

So one week he and the product manager produced more than every other person in the company combined, on every metric they had: lines of code, pull requests, tickets closed and story points. That's only six people, but it's two people doing the work of six full-time engineers. "Neither of us are engineers," he said.

He's open that he seriously considered firing half the engineers and replacing them with product managers. He didn't. He flew everyone to France for a week to sort out the process instead.

<figure class="fd-fig rp-week" aria-labelledby="rp2-cap" data-desc="One week at Overmind, drawn as a seesaw. On one side, Dylan and his product manager, two people handing work straight to agents. On the other, the six other people in the company. The two-person side outweighs the six on every metric they tracked: lines of code, pull requests, tickets closed and story points. Dylan's line: neither of us are engineers. What he considered was firing half the engineers and replacing them with product managers. What he did was fly everyone to France for a week to sort out the process.">
<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 and the product manager</b>handing work straight to 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>The other six</b>everyone else in the company</p>
</div>
<p class="rp-metrics"><span class="rp-k">Ahead on every metric</span><span>lines of code</span><span>pull requests</span><span>tickets closed</span><span>story points</span></p>
<div class="rp-pair">
<p><span class="rp-k">Considered</span><s>Fire half the engineers, hire product managers</s></p>
<p><span class="rp-k">Did</span><b>Flew everyone to France for a week</b></p>
</div>
<p class="mp-strip"><b>Dylan</b><span>"Neither of us are engineers."</span></p>
<figcaption id="rp2-cap">One week's output as Dylan told it. He gave no amounts, only "more than everyone else combined", so the tilt shows which side won, not by how much.</figcaption>
</figure>

## The work moved left

This is the slide I grabbed from the talk, redrawn. Before, product owned the idea, the research and the shape, and engineering owned the plan, the build and the ship. Now product keeps the idea, engineering does the research, the shape and the plan, and an agent builds and ships.

<figure class="fd-fig rp-moved" aria-labelledby="rp3-cap" data-desc="The work moved left, redrawn from the talk's slide. Six stages: idea, research, shape, plan, build, ship. Before: product owned the idea with one person, the research with one and the shape with two; engineering owned the plan with three people, the build with five and the ship with three. Now: product owns the idea with two people; engineering owns the research with four, the shape with four and the plan with two; an agent does the build and the ship, one each. The slide's caption: once the plan existed, handing it to an agent was faster than handing it to a person.">
<div class="rp-shift" role="img" aria-label="Six stages, before and now. Before: Product had Idea (1 person), Research (1) and Shape (2); Engineering had Plan (3), Build (5) and Ship (3). Now: Product has Idea (2 people); Engineering has Research (4), Shape (4) and Plan (2); an agent does Build (1) and Ship (1).">
<p class="rp-row rp-row-h"><span></span><span class="rp-when">Before</span><span class="rp-when">Now</span></p>
<p class="rp-row"><span class="rp-stage">Idea</span><span class="rp-seg rp-p"><em>Product</em><i></i></span><span class="rp-seg rp-p rp-now"><em>Product</em><i></i><i></i></span></p>
<p class="rp-row"><span class="rp-stage">Research</span><span class="rp-seg rp-p"><em>Product</em><i></i></span><span class="rp-seg rp-e rp-now"><em>Engineering</em><i></i><i></i><i></i><i></i></span></p>
<p class="rp-row"><span class="rp-stage">Shape</span><span class="rp-seg rp-p"><em>Product</em><i></i><i></i></span><span class="rp-seg rp-e rp-now"><em>Engineering</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>Engineering</em><i></i><i></i><i></i></span><span class="rp-seg rp-e rp-now"><em>Engineering</em><i></i><i></i></span></p>
<p class="rp-row"><span class="rp-stage">Build</span><span class="rp-seg rp-e"><em>Engineering</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">Ship</span><span class="rp-seg rp-e"><em>Engineering</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>one person on the work</span><span class="rp-arrow"><b aria-hidden="true">←</b>the work moved left</span></p>
<p class="mp-strip"><b>Lesson 2</b><span>If your job is turning detailed specs into high-quality code, you're out of a job. True since January and Opus 4.5, he says.</span></p>
<figcaption id="rp3-cap">Redrawn from the slide. Its caption: "Once the plan existed, handing it to an agent was faster than handing it to a person."</figcaption>
</figure>

His second lesson came out of that week: if you think your job is turning detailed specs into high-quality code, you're out of a job. He says that's been true since January and Opus 4.5.

## One page, 24 hours, no questions

Moving engineers left came with a rule. Product hands over a one-page doc. The engineer who gets it shows a demo within 24 hours, and can't ask a single question in that time.

A one-page doc is full of gaps, and that's the point. Does this need to work on mobile? Go and research whether people use this kind of app on mobile. Forced to settle the ambiguity themselves, the engineers were mostly right.

Nobody can absorb all that new ambiguity and still care about every line of code, though. So the line-by-line detail went to agents.

<figure class="fd-fig rp-handover" aria-labelledby="rp4-cap" data-desc="The new handover, in three steps. One: product hands over a one-page doc, deliberately full of gaps. Two: the engineer has 24 hours and is not allowed to ask a single question. Three: they show a demo, with every gap filled by their own call, for example researching whether people use this kind of app on mobile. Forced to settle the ambiguity themselves, the engineers were mostly right.">
<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>One page</p><p class="mp-trio-what">From product, full of gaps on purpose</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 hours</p><p class="mp-trio-what">Zero questions allowed</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>A demo</p><p class="mp-trio-what">Every gap filled by the engineer's own call</p></li>
</ol>
<p class="mp-strip"><b>Result</b><span>Left to settle the ambiguity themselves, the engineers were mostly right.</span></p>
<figcaption id="rp4-cap">The rule from the France week. The dashed lines in the doc are the gaps the engineer has to fill alone.</figcaption>
</figure>

## Not every agent loop is equal

When they studied how people build agentic "software factories" and "dark factories", most ran what he calls a do-while loop. The agent picks up a ticket, decides the approach, makes the trade-offs, writes code and tests, maybe records a demo video, and opens a pull request at the very end. Then a human has to reverse-engineer every decision from the code.

He's a little worried about AI taking his job. He's more worried about AI taking the interesting part and leaving him paid to sign off on decisions he wasn't in the room for.

So they built an until loop. Agents research the codebase, for example to check whether there's already a practice for this kind of change. Humans decide the approach, make the trade-offs and write an implementation plan, and a peer reviews it. Then an agent writes the code and a second agent compares it with the plan. Any difference sends it back, and it loops until code and plan match.

<figure class="fd-fig rp-loops" aria-labelledby="rp5-cap" data-desc="Where review sits in two kinds of agent loop. The do-while loop, which most agent software factories run: an agent picks up a ticket, decides the approach and the trade-offs, writes the code and tests and maybe a demo video, and opens a pull request; only then does a human review it, reverse-engineering every decision from the code. The until loop Overmind runs: agents research the codebase, humans decide the approach and the trade-offs and write the plan, and a peer reviews the plan. Then an agent writes the code and a review agent compares the code with the plan, and those two steps repeat until the code matches the plan. The code then ships with no human reading it.">
<div class="mp-two-row">
<div class="mp-two-card">
<p class="mp-two-who">Most agent factories</p>
<p class="mp-two-name">do-while</p>
<ol class="rp-flow">
<li><span class="rp-who rp-who-ai">Agent</span>Picks up a ticket</li>
<li><span class="rp-who rp-who-ai">Agent</span>Decides the approach and the trade-offs</li>
<li><span class="rp-who rp-who-ai">Agent</span>Writes code and tests, maybe a demo video</li>
<li><span class="rp-who rp-who-ai">Agent</span>Opens a pull request</li>
<li class="rp-rev"><span class="rp-who">Human</span>Reviews: reverse-engineers every decision from the code</li>
</ol>
</div>
<p class="mp-two-vs">vs</p>
<div class="mp-two-card mp-two-peter">
<p class="mp-two-who">What Overmind runs</p>
<p class="mp-two-name">until</p>
<ol class="rp-flow">
<li><span class="rp-who rp-who-ai">Agent</span>Researches the codebase</li>
<li><span class="rp-who">Human</span>Decides the approach and the trade-offs</li>
<li><span class="rp-who">Human</span>Writes the plan</li>
<li class="rp-rev"><span class="rp-who">Human</span>Reviews: a peer reads the plan</li>
<li class="rp-until"><span class="rp-until-t">Repeats until the code matches the plan</span>
<ol class="rp-flow">
<li class="rp-tick"><span class="rp-who rp-who-ai">Agent</span>Writes the code</li>
<li class="rp-tick rp-tick-2"><span class="rp-who rp-who-ai">Agent</span>Compares the code with the plan</li>
</ol></li>
<li><span class="rp-who rp-who-out">Prod</span>Ships, with no human reading the code</li>
</ol>
</div>
</div>
<figcaption id="rp5-cap">Both loops, top to bottom. The marker row is where a human reviews: at the end of one, before the code exists in the other.</figcaption>
</figure>

Once the loop looks like that, the place for peer review is obvious: before the loop starts.

## Review the plan, then stop reading

Plans get real review because people care about them again. When someone comments on Dylan's pull request today, his honest reaction is "I didn't even read that code. If anything, you're the first one to have read it." When someone comments on his plan, he argues back, because he wrote every line and knows why each one is there.

He treats an approved plan as a pre-approved change. Most compliance setups already know that idea: a well-defined change can be approved in advance, as long as you do exactly that. The loop can't exit until the code matches an approved plan, so the code goes to production without a second human review.

Two checks keep it honest:

- Humans sample a small percentage of the plan-versus-code checks, to make sure the review agent isn't getting them wrong.
- If the coding agent finds a better idea, or a real reason it can't follow the plan, it records a difference, and a human acknowledges it.

Overmind was being audited when he gave the talk. He strongly believes the process is compliant, and he'll know when the audit ends.

The tooling has no user interface at all. Plans get written in Claude Code or whatever harness someone uses, and sending a plan, pulling it down and leaving a review are all MCP calls.

<figure class="fd-fig rp-gate" aria-labelledby="rp6-cap" data-desc="How a change reaches production at Overmind. Humans write a plan of about a page and a half with the trade-offs and why, and once a peer approves it, it counts as a pre-approved change. The until loop runs on agents: one writes the code, another compares it with the plan, and the loop can't exit until they match. The result goes to production with no second human review. Two checks keep it honest: humans sample a small percentage of the plan-versus-code checks, and when the coding agent leaves the plan, for a better idea or a real reason, it records a difference that a human acknowledges. There is no user interface: plans are written in Claude Code or any harness, and sending, pulling and reviewing them are MCP calls.">
<div class="rp-gate-in">
<div class="flow" role="group" aria-label="From an approved plan, through the until loop, to production">
  <div class="flow-node">
    <p class="flow-label">Humans</p>
    <h3>Approved plan</h3>
    <p class="rp-stamp" aria-hidden="true">Approved</p>
    <ul>
      <li>About a page and a half</li>
      <li>The trade-offs and why</li>
      <li>A pre-approved change</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>The until loop</h3>
    <ul>
      <li>One writes the code</li>
      <li>One compares it with the plan</li>
      <li>Can't exit until they match</li>
    </ul>
  </div>
  <div class="flow-link" aria-hidden="true"><span>→</span></div>
  <div class="flow-node">
    <p class="flow-label">No second review</p>
    <h3>Production</h3>
    <ul>
      <li>Code no human has read</li>
      <li>Matches an approved plan</li>
    </ul>
  </div>
</div>
</div>
<div class="rp-pair">
<p><span class="rp-k">Sampling</span>Humans spot-check a small percentage of the plan-versus-code checks</p>
<p><span class="rp-k">A difference</span>The agent records why it left the plan, and a human acknowledges it</p>
</div>
<p class="mp-strip"><b>No UI</b><span>Plans are written in Claude Code or any harness. Sending, pulling and reviewing them are MCP calls.</span></p>
<figcaption id="rp6-cap">The pre-approved change, end to end, with the two checks underneath. The audit was still open at the time of the talk.</figcaption>
</figure>

## Three weeks later

They changed the process in one week, then measured the next three weeks against the three before. Issues completed tripled, and so did commits. Lead time, from a ticket being picked up to running in production, fell from 3.2 days to 1.3.

These are one small team's numbers, three weeks against three weeks, measured by the company itself. And Overmind now sells a product built on this exact idea, so take the talk as a strong argument from someone with a stake in it.

<figure class="fd-fig rp-weeks" aria-labelledby="rp7-cap" data-desc="Overmind's results in the three weeks after the switch, against the three weeks before. Issues completed went up three times. Commits went up three times. Lead time, from a ticket being picked up to running in production, fell from 3.2 days to 1.3 days, drawn as two bars to scale.">
<div class="mp-stats">
<p><b>3×</b><span>issues completed</span></p>
<p><b>3×</b><span>commits</span></p>
<p><b>1.3 days</b><span>lead time, down from 3.2</span></p>
</div>
<div class="rp-bars">
<p class="rp-bars-h">Lead time, ticket picked up to running in production</p>
<p class="rp-bar"><span>Three weeks before</span><i class="rp-w-before"></i><b>3.2 days</b></p>
<p class="rp-bar rp-bar-win"><span>Three weeks after</span><i class="rp-w-after"></i><b>1.3 days</b></p>
</div>
<figcaption id="rp7-cap">Overmind's own numbers for its own team, as Dylan gave them on stage. The two bars are to scale.</figcaption>
</figure>

## Attention was the bottleneck

They were never spending 90% of their day on code review, so the 3x didn't come from skipping review time. His answer is attention. Pull requests kept too many balls in the air and forced constant context switching.

The old timeline for one change: about 3 hours writing code, 15 minutes opening the pull request, a day and a half waiting for a busy reviewer, then an hour of back and forth. You can't forget any of it, because you're the only one who understands the code. By the time a comment came back, he'd written 15,000 more lines and couldn't remember what he was trying to do, so abandoning the change could be easier than switching back into it. About four and a half hours of work lived in his head for about 40 hours.

A plan is faster to write and much faster to review than 3,000 lines of Go. Once it's approved, you commit it to memory as how the system works. The code doesn't exist yet, but it will in about three hours, because there's no other way out of the loop. That costs a couple of hours of attention.

<figure class="fd-fig rp-head" aria-labelledby="rp8-cap" data-desc="How long one change lives in your head, on a 40-hour scale. With pull request review: about 3 hours writing the code, 15 minutes opening the pull request, about a day and a half waiting for a reviewer, then an hour of review. About four and a half hours of work, and you hold all of it in your head for about 40 hours. With plan review: a couple of hours writing the plan and getting it reviewed, which is all you hold in your head, then about 3 hours of agent loop you no longer think about.">
<div class="rp-tl" role="img" aria-label="On a 40-hour scale. Pull request: 3 hours of code, 15 minutes to open it, about 36 hours waiting, 1 hour of review, all of it in your head. Plan: a couple of hours in your head, then about 3 hours of agent loop out of it.">
<p class="rp-tl-label"><b>Pull request</b>about 4.5 h of work, about 40 h in your head</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>a couple of hours in your head</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>in your head</li>
<li><i class="rp-t-work"></i>your hands-on time</li>
<li><i class="rp-t-wait"></i>waiting, still in your head</li>
<li><i class="rp-t-agent"></i>agent loop, out of your head</li>
</ul>
<figcaption id="rp8-cap">The durations from his example, to scale. He didn't split the "couple of hours" for the plan, so it's drawn as one block.</figcaption>
</figure>

## A recipe is easier to reject than a meal

Standing in the kitchen deciding what to cook, it's easy to say "I don't feel like salad." Once the salad is made, you can't. Telling someone to cook a meal again takes Gordon Ramsay energy, and that's what rejecting a pull request is. It's emotionally hard, which is why it was usually only the most senior engineers who did it.

Plans changed that. Overmind is now 2.8 times more likely to reject a plan than it ever was to reject a pull request, and the rejections come from everyone on the team, product included. It's also far cheaper: a rejected plan adds about 40 minutes of lead time, while any comment at all on a pull request added 16 hours.

His big worry going in was agents writing the plans and agents reviewing them, with nobody reading anything. He says the numbers show it didn't happen. Plans are short enough that people read them, and they care about them.

It also gives juniors a way in. A junior who doesn't follow a plan can talk it through with their agent until they do, and reject whatever still doesn't make sense. Dylan's product manager reviews engineering plans exactly like that, and when he pushes back, he's right about 80% of the time.

Dylan counts the 8% of plans they abandon as a win. The what looked good, the how showed it wasn't worth it, and nobody had to build it just because it was already in the sprint.

<figure class="fd-fig rp-recipe" aria-labelledby="rp9-cap" data-desc="A recipe against a meal. Before anything is cooked, it's easy to say I don't feel like salad: that's a plan, and everyone on the team rejects plans now, product included. Once the meal is cooked, sending it back takes Gordon Ramsay energy: that's a pull request, and usually only the most senior engineers did it. The cost of pushback, to scale: a rejected plan adds about 40 minutes of lead time, any comment on a pull request added 16 hours. Overmind is 2.8 times more likely to reject a plan than it ever was to reject a pull request, the product manager's pushback on plans is right about 80 percent of the time, and 8 percent of plans are dropped before any code exists.">
<div class="mp-two-row">
<div class="mp-two-card mp-two-peter">
<p class="mp-two-who">Before it's cooked</p>
<p class="mp-two-name">A recipe</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">"I don't feel like salad" is easy to say</p>
<p class="mp-two-line">The plan: everyone rejects them now</p>
</div>
<p class="mp-two-vs">vs</p>
<div class="mp-two-card">
<p class="mp-two-who">Once it's cooked</p>
<p class="mp-two-name">A meal</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">Sending it back takes Gordon Ramsay energy</p>
<p class="mp-two-line">The pull request: senior engineers did it</p>
</div>
</div>
<div class="rp-bars">
<p class="rp-bars-h">Lead time added by pushback</p>
<p class="rp-bar rp-bar-win"><span>A plan gets rejected</span><i class="rp-w-40m"></i><b>+40 min</b></p>
<p class="rp-bar"><span>A pull request gets any comment</span><i class="rp-w-16h"></i><b>+16 h</b></p>
</div>
<div class="mp-stats">
<p><b>2.8×</b><span>more likely to reject a plan than a pull request</span></p>
<p><b>80%</b><span>of the product manager's pushback was right</span></p>
<p><b>8%</b><span>of plans dropped before any code exists</span></p>
</div>
<figcaption id="rp9-cap">The salad, then the numbers from the talk. The two pushback bars are to scale: 40 minutes against 16 hours.</figcaption>
</figure>

## The how still matters

He closed by disagreeing with a Paul Graham line: "When anyone can make anything, the big differentiator is what you choose to make." Dylan says the differentiator is still how you make it.

Two laptops can share the exact same spec sheet and be completely different products. The difference is hundreds of how decisions along the way, and those decide whether a product performs, scales and stays easy to debug. His advice: don't sit at the bottom of a loop where the agent makes those calls for you, and say no to tools that put you there.

What changes is the layer you answer them at. You stop caring how the files are organized or what the functions are called. You still decide how data flows, how authentication works and how the system handles failure.

<figure class="fd-fig rp-how" aria-labelledby="rp10-cap" data-desc="The how still matters. Two laptops can share the exact same spec sheet and still be completely different products, because of the hundreds of how decisions made along the way. Those decisions move up a layer. You still decide them in the plan: how data flows, how authentication works, how the system handles failure. Agents decide them in the code: how the files are organized and how the functions are named. Dylan's advice: don't sit at the bottom of a loop where the agent makes those calls for you, and say no to tools that put you there.">
<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>One product</span><span class="rp-how-mid">Same spec sheet</span><span>Another product</span></p>
<div class="rp-layers">
<p class="rp-layer rp-layer-you"><span class="rp-k">You still decide, in the plan</span><span class="rp-chips"><span>how data flows</span><span>how authentication works</span><span>how it handles failure</span></span></p>
<p class="rp-layer rp-layer-ai"><span class="rp-k">Agents decide, in the code</span><span class="rp-chips"><span>how the files are organized</span><span>how the functions are named</span></span></p>
</div>
<p class="mp-strip"><b>Dylan</b><span>Don't sit at the bottom of the loop, and say no to tools that put you there.</span></p>
<figcaption id="rp10-cap">Same spec, two products: the difference is the how. The how questions don't go away, they move up into the plan.</figcaption>
</figure>

## Try it

Overmind published the internal tool as [until](https://until.dev/), "git-backed tickets for people and agents". You write the plan, someone signs it off, each section of the plan becomes a job your agents claim, and a review agent compares the code with the plan, so anything missing or extra comes back to you as a decision. It's waitlist-only right now, and the site lists Claude Code, Cursor, Codex, Pi, Factory Droid, Amp and OpenCode.

The argument also exists as a manifesto, [AI Is Not Your Peer](https://notyourpeer.com/), by Dylan Ratcliffe, James Lane and David Schmitt. Its key line: "The artifact worth reviewing is the plan we wrote before the agent wrote anything."

<figure class="fd-fig rp-until" aria-labelledby="rp11-cap" data-desc="until, the tool Overmind published from its internal one, in four steps from its site. One: you write the plan; every feature starts with a plan, and the plan is yours. Two: someone signs it off; no agent starts until a person says yes. Three: agents take the jobs; each section of the plan becomes a job with its own name, and your agents claim them. Four: check the difference; a review agent compares the code with the plan, and anything missing or extra comes back to you as a decision. It's on a waitlist, and the site lists Claude Code, Cursor, Codex, Pi, Factory Droid, Amp and OpenCode.">
<ol class="rp-steps">
<li><p class="rp-step-n"><b>01</b>You write the plan</p><p class="rp-step-s">Every feature starts with a plan, and the plan is yours</p></li>
<li><p class="rp-step-n"><b>02</b>Someone signs it off</p><p class="rp-step-s">No agent starts until a person says yes</p></li>
<li class="rp-step-ai"><p class="rp-step-n"><b>03</b>Agents take the jobs</p><p class="rp-step-s">Each section of the plan becomes a named job</p></li>
<li class="rp-step-ai"><p class="rp-step-n"><b>04</b>Check the difference</p><p class="rp-step-s">Anything missing or extra comes back to you as a decision</p></li>
</ol>
<p class="rp-metrics"><span class="rp-k">Listed harnesses</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>Waitlist</b><span>Git-backed tickets for people and agents.</span></p>
<figcaption id="rp11-cap">The four steps as until.dev describes them. The first two are people, the last two are agents.</figcaption>
</figure>

If you want more:

- [Pull Requests Are Dead, Long Live Peer Review](https://www.youtube.com/watch?v=5lq5zp6wYbQ), the talk, 25 minutes
- [AI Is Not Your Peer](https://notyourpeer.com/), the manifesto
- [until](https://until.dev/), the plan-review tool, on a waitlist
- [The agentic software factory is the 2022 one with one box swapped](/notes/software-factory-2022-to-lights-off.html), where review became my bottleneck
- [What breaks when an AI agent runs a real business](/notes/what-breaks-when-an-agent-runs-a-business.html), another AGNTCon + MCPCon talk

Watch [the talk](https://www.youtube.com/watch?v=5lq5zp6wYbQ), then try reviewing your next agent task as a plan before any code exists. Tell me if your lead time moves.
