Key takeaways
- Vibe coding accelerates feature creation, but reliable apps still demand serious engineering work.
- Intermittent bugs resist AI-only fixes and require patient, reproducible investigation.
- Human judgment remains necessary for architecture, testing, and interface design.
There is no denying the rush. Describing an application in plain language and watching it appear on screen feels close to magic. In the early days of a project, feature after feature can be generated faster than most people can type. The joy lasts for a while, especially for a developer who knows exactly what they want to build.
The reality underneath is more demanding. Vibe coding makes features fast, but reliable apps still take real work. Stubborn bugs still demand patience, hands-on investigation, and a clear understanding of how the software is supposed to behave. AI can generate enormous amounts of code, but it cannot yet understand every product nuance, architecture decision, or edge case without human guidance.
Days of wonder
Consider a recent experience with a Mac list manager. The developer wanted something deeply customizable, and used an AI coding tool to build it. The first ten days were glorious. Between regular work sessions, they dictated instructions and watched the app take shape. New list views, editing tools, and layout choices appeared quickly. It felt effortless.
What made the process especially seductive was the lack of friction. An idea would arrive, get translated into a prompt, and moments later become a real part of the interface. For a list manager enthusiast with very specific preferences, that speed was intoxicating. The app looked like something from their imagination rather than a generic template. Every addition reinforced the belief that the AI understood the project perfectly.
The turning point came on a Saturday. While scrolling through one of the first fairly large lists, the app froze. In Mac terminology, the cursor became the spinning beachball of death, the sign that an application is stuck and unresponsive. Modern Macs rarely show that indicator, so it tends to signal a serious underlying problem rather than minor lag.
Bad vibes
The developer closed and reopened the app. The issue disappeared, then came back. That kind of intermittent bug is the hardest for both humans and AI systems. The AI could not find the issue because it could not reproduce it. The frustrating work became narrowing down the exact conditions that caused the hang. Eventually, the team discovered the crash occurred only with one list and only after switching from another specific list.
That discovery took most of Saturday. Reproducing a bug is only half the battle; fixing it is the rest. The developer and the AI spent the remainder of Saturday and most of Sunday working through possibilities. The experience was nothing like the fantasy of typing one prompt and watching a complete, production-ready application appear. It was slow, careful, and mentally exhausting.
Simple bugs are different. A wrong font, a missing background color, or a save action happening at the wrong moment can often be solved quickly. The developer describes those issues as ideal targets for AI remediation because they are easy to observe, reproduce, and describe. But serious architectural bugs do not yield to a one-sentence request.
Context is king
AI coding tools have two significant limitations that make debugging harder. The first is context. Every conversation with a coding agent occupies a token-based memory window. As a session grows, the window fills with earlier instructions, code snippets, and analysis. Eventually, the AI becomes less reliable because it is essentially working on a cluttered mental workbench.
Developers can work around this by saving memory files. These files carry over important context from one session to the next. But as a debugging effort stretches on, the memory files themselves grow. At some point, each new session begins with half the context already consumed just by reading the notes from previous sessions.
The second limitation is usage allocation. Many AI coding plans meter usage over five-hour blocks and weekly totals. If a user exceeds either limit, they get cut off until the meter resets. Even a premium plan can hit a wall during an intense debugging weekend. A lower-cost plan may run out much faster, forcing long pauses exactly when momentum matters most.
Team effort
Debugging turns out to be a team effort. The AI coded potential fixes, compiled the application, and launched it. Sometimes it could test internal operations on its own. Other times it needed a human tester to exercise the interface because not everything in Apple's SwiftUI framework can be manipulated through a virtual tool.
Back and forth the process went. The AI would propose a fix, the developer would test it, and the app would still fail. Then the AI would inspect logs, form a new theory, and try again. This cycle continued through the weekend until the bug was eventually resolved. It was not a joyful sprint. It was grinding engineering work made slightly easier by having an AI partner that never got bored.
There is also a need to keep the AI honest. The developer noticed that the AI would often guess the cause of a bug instead of reading the actual code. To compensate, they had to instruct the AI to review the code, add logging, and analyze what the application was doing at the moment of failure. These are habits experienced developers build over years, and they are not automatically embedded in every AI coding tool.
AI systems also make surprisingly poor architectural choices. When asked to implement search in a Mac app that manages large blocks of text, the AI first suggested re-reading and re-indexing every document every time the application loads. It also proposed scrolling through hundreds of pages before showing the requested line. A human developer had to guide it toward index tables and a smart on-screen frame around the found item. The AI could write code quickly, but it did not know what should be fast, scalable, or user-friendly.
Be the jockey
There is an old saying in equestrian sport that the horse does the jumping, but the jockey decides the approach. A horse has an innate understanding of balance, timing, and movement. A great jockey manages pace, rhythm, and course strategy to get the horse to the jump with the right speed and energy.
Vibe coding works the same way. The AI is an astonishing code generator. It can produce in minutes what might take a human developer months. But it needs a jockey. Someone has to define the requirements, spot the flawed assumptions, correct the mismatches in architecture, and verify that the finished code actually solves a real problem.
For experienced developers, that is doable. They know what questions to ask and what traps to avoid. For non-developers, the risk is much greater. Without a background in software design, they may not realize that an app that looks beautiful on the outside is full of structural issues underneath. They can strap themselves to the horse and yell giddy-up, but if the horse heads toward a cliff, they will not know how to steer.
Post-flow drop
Vibe coding has a biological dimension. The early phase feels like a flow state, with each successful feature delivering a small burst of dopamine and other reward chemicals. That rush is real, and it can be addictive. But after intense flow comes a drop. Neurotransmitters become depleted, fatigue sets in, and the mind feels both tired and overstimulated.
That post-flow drop is usually when the real work starts. The new features must be tested, bugs must be found, and the AI's mistakes must be cleaned up. Coders can guide the process and make informed judgments. People without coding experience are forced to trust an AI that cannot truly understand their goals.
The promise of vibe coding is that software development becomes easy enough for anyone. The reality is more nuanced. AI is a force multiplier, but it does not eliminate the need for engineering judgment. The developer behind the Mac list manager estimates they have given the AI 1,392 individual prompts so far. Of those, 312 were spent working as a team to diagnose the single bug that froze the app.
The app is still only about a third complete. That is not a failure of vibe coding. It is a reminder that building software people can rely on always involves architecture, testing, debugging, iteration, and a careful partnership between human intent and machine speed.
Source: ZDNET News