
Introduction
When you start a project with vibe coding, it’s generally all “Yay, this is amazing!”. And that feeling can last a long time.
But at some point, if you keep pushing the project further and make it more complex, the good vibrations stop coming and it can become incredibly challenging to make progress. It’s nothing to lose a day with vibe coding when you discover it’s broken all the early functionality of your app in favor of the more recent additions. And even when you get something working, it can be over-engineered,
Every time I hit one of these problems, I try to understand why and what to do to fix or avoid it, because they can be very painful. I wish I discovered the magic answer to this, a "this one weird trick will solve your problems" kind of answer. But I haven't. What I have discovered is bunch of different things, all different. Some are related to methodology. Some are related to architecture. But a whole bunch are just the little flaws and quirks of AI coding tools.
This cookbook doesn't contain the answer. It doesn't contain all the answers. It contains some answers, and hopefully more (and better) as time goes on. Some of the answers are prescriptive: things to do early on to keep the good vibes lasting a lot longer. Some of the answers are reactive: how to pull AI out of the ditch when its wheels are just spinning. And all of this will probably become out of date in 6 months. But if you’re here with me, now, in the vibe-coding trenches, maybe I can help you.
If there were a single answer as to why, it would be that we're pushing the concept far further than we probably should. As a reminder, this is how the concept started:

Right now, as I’m writing this introduction, that was from 8 months ago, and in that 8 months "vibe coding" has taken on a life far beyond Andrej’s more constrained definition (something that mostly works for weekend throwaway projects). It’s now being used for serious product development. While the constraints Andrej described have gotten looser as models have evolved, those constraints haven’t completely gone away. It’s very much still possible, if not probable, to hit constraints, unfortunately. And that's when things can grind to a halt.
Apart from our expectations maybe exceeding the ability of models, is there any explanation that is more useful?
I think the tools' performance falls apart in a variety of ways, a few of which I have a sense of:
- Solving your problem as given is just something that is way too big for the LLM to handle all at once. You've vibed your way to a 3000 line source code file, perhaps.
- It’s lost the thread of what you want, and is happy to do what you ask, just now, with little regard about breaking something you had asked (perhaps long) before. If there's no written record of what you asked for, it doesn't exist.
- It really doesn’t know how to solve a problem, but is acting like a newbie programmer who thinks that if they just get close they can debug their way to the right solution. So it endlessly tries to fix it, but it's unable to spot the root cause, and the problem persists.
Most of these problems are excerbated if we approach vibe coding like we can just incrementally add features and capabilities to a program without any structure or mythodology. Start with something simple, vibe, vibe, and vibe some more, and you end up with something not simple, not well structured, and, ultimately, not working. Trust me, I'm as guilty of this as anyone, and part of my writing these notes is to remind me that I do know better!
We might hope that one day most of these problems will go away. And maybe they will. But odds are that the problems will remain, and only the limits on how far you can push things before the problems erupt will change.
A word about the structure and content of the cookbook:
The cookbook is broken up by general categories. In each category there is a TL;DR (too long; didn't read as the mem goes) file that explains at a high level what is in the category.
While the concepts here are generally applicable, in my coding life I am focused on using Claude Code and Python. So you'll see a lot of it. But the common denominator here is working with LLMs, and the concepts will be generally applicable.
To get updates on this Cookbook and other thoughts on AI, subscribe to my substack (it's free):
