
On paper, vibe coding sounds like the dream. You tell an AI what you want, and it spits out the code. No syntax errors, no endless Googling, no wasted hours trying to spot that missing semicolon you somehow forgot to hit. To outsiders, it probably sounds like the future of programming: “Why learn to code at all when the computer can just do it for you?” and I kind of agree with that sentiment.
As a developer, you see the result on the screen and you think it might be good, but you don’t know what it actually is until you open it up and look what’s under the hood. What has this AI created? Is it good code? Is it bad code? It’s often bad code, but also there’s good code in it as well.
Until you look under the hood, it’s both.
When Beginners Try
I watched Sara Dietschy try vibe coding the other night and it was a great video, a really honest look at the reality of vibe coding. She jumped in as a beginner thinking the AI would carry her across the finish line. Instead, it took weeks because she had to learn the fundamentals along the way.
It was funny when she was quoting the original tweet about vibe coding and se mentioned she doesn’t know what “the diffs” are:

By the end of the video, she was talking about how she had to learn what Git was. I have a feeling she knows about the diffs now 😀
That’s the trap. If you don’t already know how to code, vibe coding is a mess. You think you’re building something, but really you’re just letting AI put out unsupervised and unreviewed potential garbage and hoping it works.
How I Use It
For me, vibe coding works because I already know how to code. I can steer it, fix it, and use it to offload the boring parts. I use Cursor a lot. It’s basically a VS Code fork with AI agents built in. But here’s where my setup gets weird: I’m not a VS Code user (I hate the default colour scheme and am too busy to go messing around with themes). I’m a JetBrains guy. So I hate the Cursor editor and just can’t use it for proper editing.
So I end up running both at once…
Cursor for the AI prompts, and JetBrains/PHPStorm to fix it.
I also flick between models a lot. It’s usually between Cursor and GPT-5. I’ve been finding that I’m enjoying GPT-5 a lot, but it’s pretty slow. It thinks too much and for too long, and just sits there. So I’ll find myself in PHPStorm writing out little things like button styles and hitting cancel on GPT-5, then I’ll switch over to Claude and back and forth it goes.
Backend vs Frontend
Vibe coding really shines for backend tasks. If I need some super complex database query, I can let cursor handle it in seconds in seconds. I don’t want to waste half a day doing my head in with nested queries and joins.
Frontend, though? er…. well…. It often overcomplicates things I could (and do) hand-code faster. A basic component that would take me 2 minutes ends up taking 20 because I’m constantly not accepting the changes, making it run again unitl I end up yelling at it (did I mention that I don’t really type anymore, most of my typing is speech-to-text these days if I’m not in public).
So does it save me time? Absolutely. But not in the “finish faster” sense—more in the “spend my time better” sense. I get to focus on the UX and the polish instead of grinding through boring CRUD stuff (which face it, until its a specific feature, that’s most of what makes up an app).
Why It’s Bullshit and Brilliant
This is why vibe coding feels like such a paradox. It’s bullshit in that if you let it go, it will create a whole bunch of awful, messy, sloppy code, including methods that sometimes just never get called because “why not?!”. But it’s also brilliant because there are certain things that I don’t have to focus my energy on as hard anymore, which means that things may take the same amount of time, but my energy is spent on the end user’s experience rather than just getting the damn thing to work.