You’re Not Bad at Vibe Coding — You’re Just Doing It Backwards

December 24th, 202514 min read

There is a growing sentiment on Twitter/X that "Vibe Coding" is just a polite way of saying "writing bad code fast." Serious developers roll their eyes at the idea of prompting an LLM to build a production app.

And honestly? They're right. Most people are terrible at vibe coding.

They treat the AI like a magic wand. They type "Build me a SaaS," hit enter, and then get angry when the result is a hallucinated mess of `undefined` variables and broken imports.

The problem isn't the tool. It's the workflow. You aren't bad at vibe coding. You're just doing it backwards.

1. Pick a Mainstream Stack (And Stick to It)

Vibe coding is not the time to experiment with that new Rust frontend framework that has 12 stars on GitHub.

LLMs are trained on the internet. They are geniuses at Next.js, React, Tailwind, and Python. They are idiots at obscure, bleeding-edge tech.

If you want to move fast, you need to stay on the paved road. The AI knows the potholes on the paved road. It knows the shortcuts.

2. The "PRD-Lite": Write Before You Prompt

Most devs skip this step. They jump straight to the code.

Wrong.

Before you open Cursor, open a markdown file. Write a "PRD-Lite" (Product Requirements Document). It doesn't need to be fancy. Just a bulleted list of exactly what you want to happen.

# Feature: User Dashboard
- User logs in via Supabase Auth.
- Fetches recent projects from 'projects' table.
- Displays projects in a grid (3 cols on desktop, 1 on mobile).
- Clicking a project goes to /project/[id].
- Empty state: "Create your first project" button.

Paste this into the AI. Now it has a map. Without a map, it will just wander aimlessly until it hits a token limit.

3. Version Control is Your Undo Button

AI is destructive. It will happily delete your entire `utils` folder because it thought you didn't need it anymore.

Commit early. Commit often.

The Workflow: 1. Feature works? `git commit -m "feat: dashboard works"` 2. Ask AI to refactor. 3. AI breaks everything. 4. `git reset --hard HEAD` 5. Try again with a better prompt.

If you aren't committing every 10 minutes, you are playing Russian Roulette with your codebase.

4. Provide a Working Example (The Anchor)

LLMs are pattern matchers. If you ask for a "Button component," it will give you a generic button.

If you want your button, paste an example of an existing component from your codebase.

"Create a `Card` component that follows the same styling patterns as this `Button` component:" [Paste Button.tsx]

This "anchors" the AI to your specific style, naming conventions, and library choices.

5. Context Decay: When to Start Fresh

Have you ever noticed that after 20 messages, the AI starts getting stupid? It forgets what file you're working on. It starts hallucinating imports.

This is Context Decay.

The Fix: As soon as a feature is done, close the chat. Start a new one.

"But it needs context!"

No, it doesn't. It needs the current file and maybe one or two related files. It doesn't need the history of how you debugged a CSS error 45 minutes ago.

6. Build Small, Test Often

Don't ask for "The entire authentication flow."

Ask for: 1. The login page UI. 2. The Supabase client setup. 3. The form submission handler. 4. The redirect logic.

Verify each step. If step 1 is broken, step 4 will be a disaster. Vibe coding is iterative, not instant.

7. Human Taste > AI Output

This is the most important part. The AI can write the code, but it cannot judge the quality.

That's your job.

You are the Art Director. The AI is the intern. You don't just ship whatever the intern gives you. You review it. You tweak the padding. You rename the variables. You say, "This user flow feels clunky, let's try a modal instead."

Vibe coding doesn't replace engineering. It replaces typing.

8. When to Avoid Vibe Coding

There are times when you should put the AI away and write the code yourself.

  • Complex Infrastructure: Terraform, AWS configs, Kubernetes. One hallucination here can cost you thousands of dollars.
  • Security-Critical Logic: Cryptography, payment processing, auth tokens. Verify every single line.
  • Deep Optimization: If you need to shave 5ms off a render loop, the AI won't help you. It optimizes for "average," not "extreme performance."

Conclusion

Vibe coding is a skill. It requires practice. It requires discipline. And most importantly, it requires you to stop being a "coder" and start being a "builder."

Do it right, and you'll feel like a wizard. Do it backwards, and you'll just be a frustrated dev yelling at a cloud.

Is Your Vibe Off?

Not sure if your workflow is producing quality code? Run a Vibe Check.

Analyze Your Code’s Vibe →
Vibe Code Detector