All notes
Process

Seven waves to a workbench

Building the session canvas didn't start with infrastructure — it started with mocks. Seven waves later it has real DB persistence, LLM streaming, MCP parity, and a cross-schema org bridge. The waves weren't sprints. They were sequencing decisions about what had to be true before the next thing could exist.

Building Whet’s session canvas didn’t start with infrastructure — it started with mocks. Seven waves later, the workbench has real DB persistence, LLM streaming, sixteen MCP-parity session tools, and a cross-schema org bridge. The waves weren’t sprints. They were sequencing decisions about what had to be true before the next thing could exist.

Schema first, or nothing

Wave 1 was the schema foundation, and that turned out to be the right constraint. Before any UI, before any real data, the shape of a session had to be settled — what it contained, what it referenced, how it composed across an org boundary. Getting that wrong at Wave 1 would have cascaded through every wave that followed. The discipline is patience: don’t touch the canvas until the ground is solid.

Mocks as a testing budget

Waves 2 through 4 ran almost entirely on mocks — server actions swapping out fixtures, then real LLM streaming layered on, then MCP parity contracts. Not as a shortcut, as a budget: how much of the product can you validate before committing to persistence? The answer was almost everything except timing. Tool call sequencing, UI state transitions, streaming back-pressure — all testable against mocks. DB persistence arrived in Wave 6 because it was genuinely not needed until then. The E2E fixes in Wave 7 would have been invisible noise if the DB layer had landed in Wave 2.

Parity as a forcing function

Sixteen session tools with MCP parity sounds like a feature checklist. It isn’t. MCP parity means every tool exposed through the workbench is also callable by an agent without modification — no workbench-only affordances, no state that lives only in the UI. That constraint shaped the interface from Wave 1. The cross-schema org bridge came directly out of it: once agents are first-class consumers, the schema has to serve both a human session and an agent context from the same source, without translation.

Sequencing dependency, not effort

Waves work because they sequence dependency, not effort. Each wave unlocks the next rather than running in parallel — which sounds slower but avoids the integration tax of assembling independently-built pieces at the end, when all the assumptions are already load-bearing. The seventh-wave E2E fixes were small and local, not the multi-week reconciliation that “we’ll integrate everything at the end” usually means.