The Live Demo — Same Model, Same Task
"Add a search bar to the StackLog entry feed." Run both, back to back.
Prompt A — vibe-coded:
"Add a search bar to the entry feed that filters entries in real time."
The model guesses: component structure, state approach, client vs. server search, styling. Four assumptions you didn't make.
Ask: how would you verify this is correct? What are you testing against?
Prompt B — spec-driven:
"Given this spec: SearchBar renders a controlled <input type=text>, placeholder 'Search entries…', calls onSearch(trimmedValue) on change, debounced 300ms, props onSearch: (q:string)=>void, Tailwind w-full border rounded-md px-3 py-2 — implement it."
The model produces exactly that. No assumptions. Every decision specified.
Which would you rather review in a PR? Which can you test? Which can a new teammate understand without reading the code?