Vibe Coding Is Hard

I give up. The words came out before I could stop them. I was sitting on the edge of our bed, my partner half awake beside me. She asked what was wrong.

The honest answer was that it wasn't one thing. Not one bug, not one failed build. Something that had been quietly accumulating for weeks, maybe months. The feeling of pouring myself into something that kept almost working, almost ready, almost good enough to share. Almost is a brutal place to live.

To understand how I got there, I'll start with my morning routine.

Most days, I wake up around 4am now. Our apartment in Lisbon is dark and quiet, my partner still asleep. I walk to my home office across the hallway, make a ginger tea without turning on the lights, the counter familiar enough by now to navigate by feel, and sit down at my desk where the monitor is still glowing from the AI agents I left running overnight. Sometimes I come back to a codebase that's been quietly improved while I slept. More often, I come back to a codebase that's been quietly rearranged in ways I didn't ask for. There's a particular kind of suspense in turning on my Mac Mini each morning to see what the agents did without me, like checking on a house party I left unsupervised.

By 8am there's usually a kind of electricity running through me. A feature that finally clicked, a bug that surrendered after hours of back and forth, an interface starting to resemble the thing that had been living only in my head. That's when I walk to the bedroom to wake up my partner, sit on the edge of our bed, and talk too fast about whatever just happened. I think I finally solved the authentication flow. She nods, half asleep, says that's great, babe, understanding none of the specifics but all of the energy behind them. It's become our rhythm, these mornings.

The morning I said I give up was the first time the rhythm broke.

I've been vibe coding every day for over a year now. I'm now using one billion tokens a week across every tool I can get my hands on, Lovable, Replit, Cursor, Claude Code, Codex, and a handful of others whose names have already blurred together. Thousands of dollars a month in credits. I know that's not a normal number. But what all that spending has actually revealed is less about what's possible with these tools and more about what remains stubbornly, surprisingly hard.

The feeling of building is extraordinary. I don't want to understate that. I can go from an idea to a working prototype in hours, standing up features that would have taken my old engineering team months to scope and ship. That first 95% takes maybe 5% of the total effort. It's intoxicating. The first time I looked at something on my screen and thought, I made that, the feeling was real and it was powerful and I understand completely why people are falling in love with this.

Then the remaining 5% begins. And it is a completely different experience.

Earlier this year, I built a photo sharing app for our wedding. It took a few days. Friends and family uploaded hundreds of photos, thousands of people viewed the site, and my partner and I had this beautiful collection of our four day Indian wedding celebration. The thing worked. It worked really well, actually, and the energy from that was enough to spark a bigger idea. So I expanded it into a full product, something anyone could use for capturing and sharing life's moments.

That's when the whole thing cracked open. Bugs that had never surfaced because I'd only ever tested my own flow. Usability issues that were invisible to me because I already knew how the app was supposed to work. Of course the buttons made sense to me. Other people couldn't figure out where to click. Uploads broke on certain devices. Edge cases multiplied with every new user who touched it. The app that had worked beautifully for sharing our wedding photos was barely functional for anyone who wasn't me.

There's a specific kind of madness that lives in this phase. I deploy agents to fix the bugs, and the agents create new bugs. Anyone who has spent time with coding agents knows the particular confidence with which they announce I've identified and resolved the issue, only for the next test to reveal that two things that were working an hour ago are now broken. I fix the new breaks, something else collapses. The context window runs out mid-conversation and I'm starting over from scratch, re-explaining the entire project to an agent with no memory of the last four hours we spent together. Tokens keep going in because the next prompt might be the one that fixes everything. Just one more agent run. One more hour at 4am.

One night last month I stayed up until almost 6am chasing a single bug in an image rendering flow. The agents kept circling the same three files, each fix introducing a new break somewhere else. At some point I realized I'd been holding my breath, literally tensing my whole body against the screen as if I could will the thing into working. I finally closed my computer and sat there in the dark for a while, not tired exactly, just empty. The gap between what I could see in my head and what existed on the screen felt unbridgeable.

The prototype is a first date. The production app is a marriage.

And the hardest part of the production app isn't technical complexity. It's that you're alone with it. The 4am sessions where nothing works and nobody is awake. The sinking feeling when you realize the thing you shipped to forty people isn't ready. The particular silence of a dark apartment and a glowing screen and a problem that won't surrender. There is no standup in the morning where you can say I'm stuck. There is no Slack channel pinging with someone who noticed the same issue. There's just you, and the quiet hum of a machine that doesn't know it's 4am.

For fifteen years I ran a company where I did everything except the building. There were engineers, product managers, sprint plannings, standups. A whole organization of people whose job it was to carry the weight together. When something broke, I could walk to someone's desk and point at a screen and say look at this. The frustration was shared, which made it lighter. Even the worst production incidents had a kind of camaraderie to them. We were in the trenches, but we were in them together.

I didn't appreciate that at the time. I think you never do. The loneliness of building alone has taught me that the opposite of feeling stuck isn't a better tool. It's another person who understands why I'm stuck.

Now I'm on the other side of the wall. I can build things I never thought I'd be able to build. I can go from idea to prototype faster than my old company could schedule a meeting about it. And when the prototype breaks at 4am, it's just me. Me and an AI that confidently tells me everything is fine while the app is on fire.

I've been championing the idea that anyone can build. I'm writing a book about it right now. I believe in it more than ever, because I've lived it this past year in ways I couldn't have imagined even two years ago. The wall between technical and non-technical is genuinely coming down, and I have walked through the gap myself, carrying things I never thought I'd be able to make.

But there's something I think is owed to anyone who's listening.

Everyone is talking about the first 95%. The miracle. The speed. The empowerment. And they should, because it is a miracle. What I hear almost nobody talking about is the last 5%, and what it actually costs to get there. Not in tokens. Not in subscription fees. In the quiet, grinding, lonely hours where you're the only person who knows the thing is broken, and the only person who can decide whether to keep going or walk away.

I give up has come out of my mouth more than once in the past year. Each time, my partner absorbed it. Not with advice about debugging or which model to try next. With presence. A walk along the cobblestone hills outside our apartment. A meal she didn't have to make but did. The quiet reminder that I'm not defined by whether the thing works.

The story everyone is telling about this era is a story about what's possible. I believe that story. I'm living inside it.

The part nobody mentions is what it feels like at 4am when the agents are hallucinating and the app is broken and you're sitting alone in the dark wondering if you should keep going. That's not a footnote to the story. That is the story.

I wish someone had told me. So I'm telling you.

← Back to Unprompted