Vibe Coding: Ship by Feel, Verify by Test

An acrobat balances on a glowing tightrope with a ruler–pencil pole above a net woven from checkmarks, symbolizing intuitive coding secured by tests.
🧰 Glitch

“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 →

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.

MoveChatGPTClaude
Refactor + quick testsShips fast, minimal tests. Great for momentum.Defensive changes, thorough tests. Safer, slower.
Explain big filesBulletable summary + risks to check next.Context tour + architecture notes; fewer leaps.
Hold constraintsMay 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.

Next Glitch →

Proof: ledger commit 828e187
Updated Aug 30, 2025
Truth status: evolving. We patch posts when reality patches itself.