“Trust your instincts. Then make them beg for unit tests.”
You already vibe code. You glance at a file, feel where it’s wrong, and sketch the fix before you can explain it. LLMs just turned that instinct into a workflow. The trick isn’t to worship the vibe—it’s to instrument it so hunches become shippable code instead of poetic bugs.
Still think you’re in control?
AI isn’t magic. But understanding it feels like a superpower. Go deeper with our no-fluff guides and AI literacy tools.
Browse the Talking to Machines Series →Vibe coding = improvise the first draft with an LLM, then prove it with falsifiers and tests.
Choose ChatGPT for momentum, Claude for caution—but let tests, not vibes, be the judge.
Ship one small refactor today with property tests and stamped hashes; keep it only if review time drops.
What “vibe coding” actually is
It’s fast, conversational prototyping with an AI copilot where you lead with intent and examples, not specs. You sketch the shape (“split invoices by month, keep UTC, idempotent”), the model throws scaffolding, and you nail it down with falsifiers—tiny proofs that kill pretty lies. Vibe coding ≠ cowboy coding. It’s improvised first draft, adversarial verification immediately after.
Why it works (and when it doesn’t)
Pattern engines love structure that’s 80% obvious and 20% quirky. That’s most glue work: scripts, migrations, refactors, adapters, docstrings, tests, scaffolds. Where vibe coding fails is where ambiguity + consequences meet: auth, money flows, migrations with sharp edges, compliance. Use the vibe to explore; use formal constraints to gate anything with a blast radius.
The loop (six steps, tight and boring)
Intent sketch: one paragraph in plain English, plus 2–3 tiny I/O examples.
Scaffold ask: “Generate a minimal function + stub tests; no frameworks.”
Pin constraints: name the gotchas (UTC, idempotency, nulls, large inputs).
Falsifiers first: write a couple of property tests or line-number checks that must pass on old vs new.
Short hops: iterate in small diffs; keep the AI on a single sub-task; stop it from narrating.
Receipts: save outputs, run tests, paste hashes under the diff. If it’s not provable, it’s vibes.
(Yes, that’s one list. You’ll live.)
ChatGPT vs Claude inside the vibe
You’re not picking a mascot; you’re picking a failure mode.
Move | ChatGPT | Claude |
---|---|---|
Refactor + quick tests | Ships fast, minimal tests. Great for momentum. | Defensive changes, thorough tests. Safer, slower. |
Explain big files | Bulletable summary + risks to check next. | Context tour + architecture notes; fewer leaps. |
Hold constraints | May drift on long sessions—nudge often. | Holds tone/limits longer; asks for confirmation. |
Rule of thumb: grab ChatGPT when velocity unblocks people; grab Claude when the repo is brittle or policy-heavy. Either way, the tests decide—not your feelings.
Falsifiers you can copy-paste into prompts
“Before any code, generate 3 property-based tests that the new function must satisfy; include a shrinking case.”
“Give me a one-paragraph summary of this file plus 3 risks with line numbers where a refactor could break behavior.”
Run those before you let the model decorate your repo with confidence.
What to ship today (small, real, stamped)
Pick a 100–200 LOC utility. Ask the model for a minimal refactor + tests. Add one property test that would have caught your last bug. Save outputs as files and paste the hashes under the PR. If the tests don’t shrink your review time this week, the vibe didn’t pay rent.