Vibe coding
Fast exploration through prompts, examples, and iteration. Good for discovery, risky for commitments.
Vibe coding can be useful for exploration. It becomes risky when the same vague prompt is used for production changes. Spec coding keeps the creative pass, but adds boundaries before implementation.
Fast exploration through prompts, examples, and iteration. Good for discovery, risky for commitments.
Implementation starts after scope, criteria, non-goals, and evidence are written down.
Use vibe coding to explore options, then convert the chosen direction into a spec before production code.
The problem is not experimentation. The problem is letting a model convert an ambiguous wish into production behavior without a reviewable contract.
Spec coding does not remove speed. It moves the slow questions earlier: what counts as done, what is out of scope, and what evidence will prove the result.
Use this when a request sounds clear in conversation but still leaves the AI room to invent behavior.
# Vibe Request To Spec Vague request: - Clarifying questions: - Who is affected? - What exact behavior changes? - What must not change? - Which failure or permission path matters? - What evidence proves it? Spec version: ## Outcome - ## Scope - In: - Out: ## Acceptance Criteria - [ ] Given ..., when ..., then ... - [ ] Failure path: - [ ] Boundary path: ## Evidence - Test: - Manual check: - Changed files: Do not generate production code until this is testable.
The same request becomes much safer when it stops asking for a vibe and starts naming behavior.
Vague: - Make checkout feel more reliable. Spec: ## Outcome - Show a recoverable error when payment authorization times out. ## Scope - In: payment submit handler, checkout error banner, payment tests - Out: provider client API, database schema, order confirmation page ## Acceptance Criteria - [ ] Given payment authorization times out, when the user submits checkout, then the page shows "Payment is taking longer than expected" and keeps the order pending. - [ ] Given the user retries after timeout, when the provider succeeds, then the order moves to paid once. - [ ] Given the provider returns card_declined, when checkout submits, then no retry banner is shown. ## Evidence - npm test -- checkout-payment - Screenshot: timeout banner state
The prompt invites iteration but never defines what done means.
The model invents copy, states, retries, or error behavior that nobody approved.
Reviewers learn the scope only after code has already been generated.
Use the comparison to choose the right next artifact.
Convert a vague request into a bounded AI coding packet.
Open generatorTurn the selected direction into pass/fail behavior.
Write criteriaCommit the final decision as a durable source of truth.
Copy spec.mdNo. It is useful for exploration. It becomes risky when vague prompts directly change production behavior.
It adds a short upfront step, but usually reduces rewrite time because success and evidence are defined before code exists.
Switch when the work touches production behavior, data, APIs, permissions, payments, background jobs, or shared helpers.
Explore freely, then write the spec before the generated code becomes a product decision.
Convert a prompt