Available for work·Book a call
All articles/Vibe Coding Is Real — Here's How to Do It Right
AIDeveloper ToolsProductivityClaude Code

Vibe Coding Is Real — Here's How to Do It Right

June 15, 20264 min read

A year ago "vibe coding" was a joke. Now it's how a lot of serious software gets shipped. If you're still writing every line from scratch on anything but the most critical logic, you're just slower than you need to be.

But the failure mode is real too: AI-generated code that looks right, passes a quick glance, and silently breaks in production. Here's the difference between using AI effectively and just generating technical debt faster.

Know what you're delegating

AI is excellent at:

  • Boilerplate and scaffolding
  • Converting between formats (JSON → TypeScript types, SQL → ORM queries)
  • Writing tests for code you've already written
  • First drafts of things you'll review and refine

AI is bad at:

  • Understanding your system's invariants
  • Knowing which of two valid-looking approaches is right for your specific context
  • Anything that requires understanding business logic it's never seen

The mistake is treating AI as a blackbox oracle. Treat it as a very fast junior developer who needs to be told exactly what matters.

Write the spec before you write the prompt

The quality of AI output is bounded by the quality of your prompt. A vague prompt gets vague code.

Before prompting, write one paragraph that covers:

  1. What this function does
  2. What it must NOT do
  3. What the inputs and outputs look like
  4. Any edge cases that matter

That paragraph is your prompt. The discipline of writing it also forces you to think through the design, which means you'll catch problems before the AI generates 200 lines of code in the wrong direction.

Review the diff, not the result

When AI generates code, review the diff like you'd review a PR from a developer you just hired. Don't just run it and see if it works.

What to check:

  • Does it handle the error cases?
  • Does it introduce any dependencies I didn't expect?
  • Are there any hardcoded values that should be config?
  • Is there anything that looks right but would fail at scale?

Running the code and seeing it work is not a review. It's testing the happy path.

Keep the AI in the loop for iteration

AI-assisted coding works best as a conversation, not a single shot. After the first generation:

  1. Run the code
  2. Paste any errors back with context ("this fails when the input is empty — fix it")
  3. Point out design issues ("this works but the naming is confusing, rename X to Y")
  4. Ask it to add tests ("write unit tests for the edge cases in this function")

Each iteration is fast. The code gets better. You stay in control of the direction.

Own the architecture

AI can write a function. It cannot design a system. Every architectural decision — which service owns what data, how the components communicate, where the boundaries are — should come from you.

When I use AI, I've already decided:

  • The file structure
  • The data model
  • Which external services are involved
  • What the API contract looks like

Then I use AI to fill in the implementation. If you let AI make architectural decisions, you'll have code that works individually and a system that doesn't hold together.

Treat generated code as a starting point

The output of AI is a first draft. Sometimes a very good first draft. Sometimes wrong in subtle ways that only become obvious later.

The difference between vibe coding well and generating debt is simple: do you understand the code you're shipping? If you can't explain why each part is there and what would break if it were removed, you don't own the code. You're just the person who prompted it.


Vibe coding is a legitimate skill. It makes you faster without making you worse — if you stay sharp about the parts that require human judgment. The developers who'll be left behind aren't the ones who use AI. They're the ones who stopped thinking.