A plain coding agent has a bad habit. You describe a feature. It invents a shape. It starts writing files. Twenty minutes later you are reviewing an implementation of the first idea it had.
That is not how I want to build software. It is also not how I used to build software before agents.
When the work was expensive, we wrote a technical design. We argued about it. We revised the data model. We threw away a page. Only then did someone open the editor for real. The document was not bureaucracy. It was a cheap way to kill a bad design before it became a week of code.
pstack's multi-design path is that habit, restored for agents. I wrote about finding it, then about building with it. I stopped trusting the claim on vibes. I counted.
What I measured
I mined my local Cursor transcripts for runs where /poteto-mode opened a multi-model design arena and a later cross-judge (or I) picked a base design. August through September 2026. Thirty-one arenas with a clear base pick.
The headline:
- 10% of bases shipped unchanged.
- 90% of bases were the spine plus grafts from losing candidates.
- In 58% of arenas, candidate 1 was not the base.
- When grafts happened, they pulled from about 1.5 loser sources on average.
In roughly nine out of ten arenas, the winning design was not accepted as-is. Ideas from the losers still made it in. Taking the first candidate alone would have missed the eventual base in more than half the runs.
That is the whole post, with receipts.
The first design is a trap
Agents are fast. Speed makes the first design feel free. It is not free. Once the files exist, you are no longer choosing a design. You are negotiating with a half-built one. Renaming modules. Untangling props. Pretending a refactor is still "the feature."
A plain agent will follow its first sketch to the end. It does not know that sketch was a coin flip. It treats the first coherent plan as the plan.
pstack's answer is blunt. Exhaust the design space. When the right answer is not obvious, build competing sketches. Compare them. A second flavor of the same shape does not count. Only then commit.
The prototype playbook is the cheap UI version of that. Throwaway. Fast. Ugly is fine. Architect is the shape version: sketch types and boundaries, run competing design packages, synthesize, implement against the pick. If the sketch is wrong, scrap it.
I already believed that loop. The transcripts showed me how often "the pick" was still incomplete.
Nine out of ten bases still get edited
Out of 31 arenas:
| Outcome | Count | Share |
|---|---|---|
| Base + grafts from losers | 28 | 90% |
| Shipped unchanged | 3 | 10% |
"Unchanged" here means the synthesis record had no grafts from other candidates. It does not mean I never touched code later. Even on that generous definition, pure tournament wins are rare.
Arena is usually not "candidate 3 won, ship candidate 3." It is closer to: pick a spine, steal a few organs. Mean graft sources among modified bases is about 1.5. Median 1. Max 4.
If you only generate one design, you do not just risk picking the wrong spine. You also never see the organ you would have stolen.
Candidate 1 is not a majority
Which slot became the base:
| Candidate | Arenas | Share |
|---|---|---|
| C1 | 13 | 42% |
| C2 | 3 | 10% |
| C3 | 8 | 26% |
| C4 | 7 | 23% |
C1 leads. It is not a majority. More than half the time, the base was someone else's first draft.
That matters if your workflow is "ask one model once." You are sampling from the C1 column only. In this set, that column is wrong as the eventual base 58% of the time.
I am not saying C1 is trash. I am saying finishing C1 by default is how you quietly delete the better base.
Models are not interchangeable, and they are not the point
On a gold subset of 14 arenas where all four runners were distinct model families, base wins looked like this:
| Model | Base wins | Share |
|---|---|---|
| Grok 4.6 | 5 | 36% |
| Claude Fable | 5 | 36% |
| Claude Opus | 3 | 21% |
| GPT-5.6 Sol | 1 | 7% |
Grok and Fable tied. Opus trailed. GPT Sol rarely won the spine.
Do not read this as a universal LLM ranking. It is this panel, these tasks, this judge pool, my repos. The useful sentence is smaller: if one model always goes first and always ships, you are paying for a panel you never use.
The panel exists so a weak C1 can lose. And so a strong C1 can still borrow a boundary, an error type, or a settle path from a loser.
The synthesis step is not a rubber stamp
Parents usually agree with the cross-judge on the base. Not always.
One delete-settle arena is the example I keep. The judge preferred a named error type. I shipped a smaller settle-shaped variant of that same family. The arena still earned its keep. The options were on the table. The synthesis was a decision, not an auto-accept.
That is the old design-doc meeting. Someone brings a draft. Someone else kills a name. You leave with a thinner version of the right idea. You do not leave with "whatever the first author typed."
Same job as a technical design doc
Strip the tool names and the loop is familiar:
- Name the decision.
- Produce more than one real option.
- Look at them together.
- Pick a spine.
- Steal what is worth stealing.
- Implement the result, not the brainstorm.
A design doc used to hold steps 1 through 5 on paper because code was expensive. Agents made code cheap enough that people skipped the paper. Skipping the paper did not make design cheap. It moved the cost into the PR.
Competing prototypes and arena packages put the cheap review back where it belongs: before the files harden.
When I skip the arena
Not every task needs four candidates. A bug with a clear root cause. A refactor with a known target. A change where the codebase already has one pattern and you should follow it.
The trap is calling everything "obvious" because an agent can produce code in one pass. Novel UI. New ownership boundaries. Feel-based interaction. Error and loading contracts. Those are where the first design lies to you, and where my 90% graft rate keeps showing up.
What I am not claiming
I am not claiming you need pstack. I am not claiming three prototypes for every button. I am not claiming my model table generalizes past this panel. I am not claiming agents replace taste.
I am claiming this: if you let the agent implement its first-and-only design, you removed the cheapest review step in the pipeline. In my last month of arenas, that step changed the base more than half the time, and it still edited nine out of ten winners after the base was chosen.
I still read the diffs. I still pick. The agents make the options. I do not want them to make the decision by finishing first.