A Valentine’s love letter to vibe coding (it’s complicated)

Happy Valentine’s Day! Instead of writing about roses and chocolates, I figured I’d write about my other great love affair of the past year. One that has kept me up late, filled my weekends, and occasionally made me question my life choices. I’m talking, of course, about vibe coding.

For those who haven’t heard the term, “vibe coding” is what the kids are calling it these days when you tell an AI what you want your app to do and watch it spit out functioning code. No Stack Overflow rabbit holes. Fewer 2 AM debugging sessions. Just describing features like you’re ordering a sandwich and watching the magic happen.

And like any good love story, this one deserves an honest look. Because the truth is, I’m not breaking up with vibe coding. But I’m also not going to pretend it’s perfect. So let’s get into it.

The Honeymoon Phase

You know that scene in the 80’s movie Weird Science where Gary and Wyatt hook up a Barbie doll to their computer and accidentally create Kelly LeBrock? That’s what vibe coding feels like at first. You punch in some prompts, lightning strikes (metaphorically), and suddenly something incredible exists that wasn’t there before. It’s intoxicating.

The speed is what gets you hooked. What used to take weeks now happens in an afternoon. Need a feature? Tell the AI. Want to pivot? New conversation, new direction. It’s like having a developer who never sleeps, never judges you for not knowing the difference between a class and a function, and always responds to your messages. No wonder people are falling in love.

And here’s the thing: for people who actually know how to code, this is genuinely a game changer. Boilerplate that used to eat up your afternoon? Done in minutes. Repetitive tasks? Handed off. It’s a legitimate productivity multiplier when it’s in the right hands.

But (and you knew there was a but coming)…

When You Don’t Know What You’re Looking At

Remember how in Weird Science, things were great until the mutant bikers showed up and the house turned into a chaotic mess? That’s what happens with vibe coding when you don’t understand the fundamentals. You created something cool, but you didn’t really understand what was happening under the hood. So when problems show up, you’re just frantically typing new prompts hoping the AI fixes what the AI broke.

Vibe coding is a bit like IKEA furniture. Sure, you can assemble that BILLY bookshelf without reading the instructions, and it’ll probably hold your books. But you definitely don’t want to find out it wasn’t built right when it’s fully loaded.

The code AI generates works. That’s not the problem. The problem is “works” and “works well” are two very different things. Your AI-generated app might run beautifully on your laptop but fall apart under real load. It might have security holes you wouldn’t spot without experience. It might be structured so adding features later feels like playing Jenga with a leaning tower.

And here’s what most people don’t realize until it’s too late: AI-generated codebases get harder to maintain over time. That clean-looking code the AI produced six months ago? Good luck figuring out why it was structured that way when you need to modify it. The AI can’t tell you its reasoning, and if you didn’t understand it when it was written, you definitely won’t understand it when it breaks.

I’ve seen this pattern a few times now. Someone builds an entire project through vibe coding, it works great, they’re pumped. Then they need authentication. Or they need to scale to real users. Or integrate with a third-party API that doesn’t play nice. Suddenly they’re stuck, because they don’t understand the foundation they built everything on.

Your Relationship Is Only As Good As Your Communication

Here’s something non-technical people often miss: garbage in, garbage out. The AI is only as good as what you tell it. Vague prompt? Vague code. Incomplete requirements? Incomplete solution. Ask it to “make it better” and you’ll get… something. Whether that something is actually better is anyone’s guess.

And if you’re bouncing between different AIs (Claude for this feature, ChatGPT for that one, Copilot for the other thing), you’re building a Frankenstein codebase. Each AI has its own patterns, its own style, its own opinions about how code should be structured. String enough of those together and you’ve got a project that looks like it was written by a committee that never actually met.

Use Git Like Your Relationship Depends On It

A quick pro tip for anyone vibe coding: use Git. Seriously.

When you’re vibe coding, you’re letting the AI make decisions about your codebase. Sometimes brilliant. Sometimes… less brilliant. Version control becomes your safety net. Every time the AI generates code that works, commit it. Before you ask for the next feature, commit. It’s like saving your game before a boss fight.

Because when the AI makes a change that breaks something subtle three prompts down the road, you can just roll back. No drama. Just git revert and you’re back to the last known good state. I’ve watched people vibe code entire features, realize something went sideways a while ago, and have to start over from scratch because they didn’t commit along the way. Don’t be that person.

Where I Land

So here’s my honest take on this relationship: vibe coding is a killer tool, but it’s not a replacement for expertise. It’s a force multiplier for people who know what they’re doing, and a dangerous shortcut for people who don’t.

The sweet spot is using AI to accelerate development while keeping someone who actually speaks code in the loop. Someone who can review what the AI produces and immediately spot the difference between “clever solution” and “this will explode in production.” Someone who understands architecture well enough to guide the AI toward good patterns instead of letting it make questionable decisions on your behalf.

Think of vibe coding like Google Translate. It’ll get you 80% of the way there, and for casual conversation, that’s probably fine. But if you’re negotiating a contract or writing something important, you want someone who actually speaks the language checking the work.

Let the AI handle the boilerplate and the repetitive stuff. Let it speed up your workflow. But keep someone around who actually knows what’s happening under the hood, whether that’s you after you’ve learned enough, or a developer you trust.

Because at the end of the day, “it works” is just the beginning. The real question is: will it keep working? And more importantly, will you know how to fix it when it doesn’t?

With the right expertise backing it up? Absolutely.

Without it? Probably. But “probably” is doing a lot of heavy lifting there.

So happy Valentine’s Day to vibe coding. You’re fun, you’re fast, and you’ve earned your place in my workflow. Just don’t expect me to let you make all the decisions around here. This is a partnership, not a takeover.

And if you’re wondering whether your own AI-assisted project is solid or sketchy, or you want someone in your corner who can tell the difference, you know where to find me.

Simon McCaffrey

Simon has been building software for Canadian businesses for 27 years, from Toronto, on too much coffee. He wires AI into how businesses actually run, and tells you when it is not worth it yet.