ctrlship
ctrlship

Why vibe coding feels like a drug (and why that's a feature)

| 7 min read

My alarm goes off at 4 AM on a Sunday. For a side project. If a friend told me he was doing this, I’d tell him to see a doctor.

At some point during that session, I started googling why I can’t leave this stuff alone. Turns out vibe coding pushes a lot of the same buttons as slot machines.

I used to design things and then wait

Here’s how building software used to work for me. I design something I’m genuinely proud of. I’m excited. I want to see it live. Then reality kicks in. The dev team is buried in work. They’re putting out fires, racing toward deadlines. My design joins the line of things waiting to get built. Sometimes I’d wait weeks. Sometimes months. By the time it finally made it, that initial spark was long gone.

Now I type a prompt. Ten seconds later, working code. No line. No waiting for anyone.

You pull a lever every 30 seconds, except sometimes the slot machine builds you an entire login screen.

The Sunday I lost five hours

I sat down at 4 AM to fix one layout issue on this blog. Just the spacing between cards on the post list. Twenty minutes, tops.

By 9 AM I had rewritten the entire homepage, added dark mode, rebuilt the navigation, and was halfway through an RSS feed. My dog was still asleep in bed with my wife. Smart choice, honestly.

This keeps happening. Not because I’m disciplined or passionate or whatever people say on LinkedIn. It’s because nothing breaks my focus. I don’t write code, I don’t read error messages, I don’t debug. I just stay in the part I’m actually good at: deciding what the thing should do, how it should look, what it should feel like. “Make the sidebar collapsible.” “Move the CTA above the fold.” The thinking never stops because the interruptions never come.

I built an F1 dashboard in a weekend

Last week I built a working F1 dashboard. Live standings, articles, race schedules, everything an F1 fan would want in one place. For me and a few friends. In a weekend. The real reason I started it? I wanted to learn how Vercel works. My brain doesn’t learn from documentation. It learns by building something real and letting AI walk me through it like a kid crossing the street.

Me. A designer who has never written a line of code on purpose. A guy whose entire debugging strategy is screenshotting an error and asking AI to fix the AI.

I didn’t convince a developer to build my idea. I didn’t wait for sprint planning. I didn’t compromise because the team ran out of time. I built exactly what I wanted and shipped it before Monday.

That feeling is the dangerous part. Once you’ve shipped something yourself, going back to waiting feels like punishment. You want to do it again. And again. And the next idea is already forming before you’ve closed the laptop.

Saturday, 6 AM, and the animation finally works

I like to think I work fast. But even at my fastest, the pace of design work has a ceiling. I work remotely from Poland for a Canadian company. When I start my day, my team is asleep. I finish something at 10 AM and wait until 4 PM for anyone to even see it. Actual feedback? Tomorrow. That’s just how time zones work.

In a vibe coding session, I get a win every few minutes. Added a feature. Fixed a layout. Got the hover state right. Every small thing that works feeds into the next one. Last Saturday I was trying to get the race calendar on the F1 dashboard right. The season timeline, how the races stack up, which direction the circuit animation runs so it matches the real track layout. Tiny details nobody would consciously notice, but I’d notice. It took maybe ten rounds of back and forth. Each one got closer. When it finally looked the way I had it in my head, I said “yes, this is perfect” out loud. To a terminal. At 6 AM. Alone.

That stream of small wins is what makes it so hard to stop. Not because any single one is life-changing, but because the next one is always two minutes away. You tell yourself “one more fix” the same way people tell themselves “one more episode.” And suddenly it’s 8 AM and the dog still hasn’t been walked.

The trap

Here’s the part nobody on the internet talks about.

The first 80% of a project is pure excitement. New feature, new feature, new feature. The last 20% is all the tedious stuff: catching the weird bugs, handling what happens when things go wrong, getting it live for real users. None of that gives you the same rush. So the voice in your head whispers: “You know what would be fun? A completely different app.”

I have seven projects on my drive right now. Four are dead. Two shipped. One is big enough that I’m still not sure if it’ll make it.

Three dead apps

I built an email client for Mac. It works. It runs. But my email habits didn’t change just because I built a new app, and I don’t know enough about native Mac development to fix the things that bother me. So it sits there.

Next was a time tracking app. Ran out of time to finish a time tracker. The irony writes itself.

Then a chat app because Facebook killed the standalone Messenger app on Mac. I built the whole thing just to text one friend (hey Greg!). But then real life happened. I have a job, I have a life, and maintaining a chat app is a project that needs daily attention. Too big for one person building on weekends.

The one that shipped

All three were native Mac apps. That’s where the pattern gets interesting. The way you test and build native apps is slow enough to kill the momentum. Then I built an F1 dashboard for myself and a few friends who are into Formula 1. Web-based, works on any device, live standings, articles, everything an F1 fan would want in one place. It went live. People use it. The difference? I stayed on the web, where vibe coding actually has the range to get you across the finish line.

The craving for new things that makes vibe coding addictive is the same force that makes finishing hard. And sometimes the platform you pick decides the outcome before you write your first prompt.

I don’t have a clean fix for this yet. But naming it helps. Next time you feel the pull toward a fresh project, check if the current one is in that last 20%. If it is, that pull is you dodging the boring parts, not discovering something better.

So is it worth it

Vibe coding hooks you the same way games, social media, and gambling do. Short feedback loops. Surprise rewards. Stacking progress. The feeling that you can’t stop.

But unlike those things, the output is real. You’re not collecting virtual coins or refreshing a feed. You’re building actual products that actual people can use. Four of my projects are dead, but two are alive and one of them is the thing you’re reading right now.

That’s the difference. Not that vibe coding feels like a drug. But that the high leaves you with something real when it wears off.

Now if you’ll excuse me, the sun just came up, it’s almost 8 AM on a Sunday, and I have to walk the dog.