Embrace Vibe Coding, Know Its Limits
Earlier in the year I discovered an agentic workflow that enabled what was later termed vibe coding. The discovery was initially alarming and made me question the future. However, a couple months later I find the future of vibe coding to be very bright for both non-programmers and seasoned programmers alike.
What is vibe coding?#
Improvements in Agentic workflows and tool use have produced a development approach where it is possible to build software without looking at the code. Where previous code-assist tools were used alongside code review, this approach does not require the user to inspect the code at all. A user no longer needs to know the underlying programming language or the libraries or frameworks used. Instead of writing or reviewing code, the user interacts with an AI agent using natural language to describe the desired outcome. They inspect the outcome that the underlying software produces, and, if necessary, iterate with the AI agent until the outcome meets their expectations.
This specific type of AI-assisted coding has been slowly gaining traction since 2023, but it was early 2025 when Andrej Karpathy coined the term Vibe Coding:
There’s a new kind of coding I call “vibe coding”, where you fully give in to the vibes, embrace exponentials, and forget that the code even exists…
There are mixed feelings about AI-assisted coding already, and with vibe coding thrown in the mix, it’s difficult to know what supporters or detractors are addressing when sharing their opinions. When I first discovered it for myself, it was alarming - if I could just talk to the AI using natural language and it was right most of the time, why do I need to look at the code it produces?
What does this mean for the future of programming and the value of my expertise in software development? Is there a future where programmers are not needed to build complex software? To investigate further, I integrated these new tools into my own daily workflows and a couple months later I find the future of vibe coding to be very bright for both non-programmers and seasoned programmers alike.
Improved capability for non-programmers#
The best software systems I’ve built codify subject matter expertise into automations and interfaces that enhance both efficiency and capabilities for their users. These systems enable people to accomplish more in less time, or expand participation by lowering the barrier to entry in otherwise complex domains. Creating these systems requires inspection of the current state, questioning of future desires, and an incremental build approach that gets changes into production quickly and sustainably.
The demand for software solutions vastly exceeds the supply of programmers. This pushes motivated non-programmers to create their own automations — either through improved manual workflows or by adopting accessible tools like no/low-code platforms or elaborate Excel configurations. These homegrown solutions can be deployed, modified, or abandoned without specialized software expertise. Some can evolve into business-critical systems, but their growing importance often coincides with declining reliability and maintainability.
For these determined individuals, vibe coding dramatically lowers the barrier to entry. Their capability is improved and not only can they achieve more than before, they can do it much faster. This will result in a huge increase in systems built by people without software development expertise. Consequently, we’ll see more experiments, less focus on tedious work, and more effort directed toward meaningful and innovative solutions as these tools are leveraged.
The limits of vibe coding#
While the possibilities are now quicker and more accessible, these solutions still have an upper limit and they don’t scale. Successful systems often experience increased load over time, requiring changes to infrastructure and software architecture to maintain performance. These systems also experience increased responsibility and complexity, necessitating processes to scale what may have started as a one-person initiative into a team or organizational-level collaboration. While vibe coding can excel in creating low-complexity, MVP-style software, its application to much larger and complex systems can be disastrous.
Letting an AI agent loose on a larger system has several disadvantages. Firstly, it’s expensive - large codebases mean more tokens, though eventually the declining cost per token should address this issue. Secondly, just finding the right place to make changes in a large codebase is problematic for LLMs, especially when modules are disorganized, tightly-coupled, and lack test coverage or documentation. These two issues feed off each other - the easier it is for the agent to get lost or break things in the codebase, the more tokens it will consume trying to fix it, possibly getting stuck in a loop of making things worse.
For an existing codebase, the better approach is to guide the LLM on where and how a change should be made. The “where” is generally a reference to a specific file and location within that file. The “how” could come from your prompt, other file references as examples, conventions present in your codebase, or a combination of these. This requires expertise in the codebase and a desire to maintain or improve that expertise over time. This level of attachment to the code is definitely not vibe coding.
Even on a brand new project, vibe coding appears to have diminishing returns as complexity grows. The first few features or components can be vibe coded with ease, but as the project grows, it takes longer to get the AI agent to make correct changes without breaking existing functionality. This mirrors the familiar pattern where the first 80% of a project takes 20% of the time and the last 20% takes 80% of the time. There are also parallels with code rot, where consistently ignoring quality and technical debt leads to a ball of mud that’s difficult to maintain or extend.
For the experienced developer#
Forgetting that the code exists is not just for beginners. As novices can venture into more complicated systems than ever before, experienced developers can leverage vibe coding to quickly prototype and test ideas. Rather than extending an existing codebase to support some experimental feature, why not vibe code a proof of concept that can validate the idea? Creating small automations or tools for otherwise tedious tasks becomes very quick when you’re certain of the desired outcome but don’t care about the language or framework used to achieve it.
Software developed this way requires a different relationship with the code. If you’re not focusing on the code itself, it becomes like a build artifact. What matters instead is the prompt. Consider version controlling your prompts, and when the generated code produces an outcome that needs changing, delete the code, update the prompt, and regenerate. Over time, you’ll develop an understanding of how prompt engineering drastically affects your vibe coding output.
Use vibe coding to help bootstrap new projects. Use initialization tools like npm-init, install your dependencies, and then vibe code the first few features. It’s so fast to get a deployed MVP that even if you were to rewrite it later in a more maintainable way, you’ve already validated the idea and have a better understanding of the requirements. Those unfinished side-projects just got a lot quicker to write.
Not for collaborative projects#
Just be certain to keep vibe coding out of code you contribute to collaborative projects. Without a clear understanding of the codebase and its conventions, the AI agent is likely to produce code that is inconsistent with the rest of the codebase. This can lead to wasted time in code review or, worse, debugging issues that arise from inconsistent code.
Code that is to be peer reviewed should not come directly from an LLM without self-review first. Code-assist technology enables you to produce more, faster, but it’s still your responsibility to maintain quality. Don’t allow vibe coding behaviors or output to slip into your pull requests, requiring your peers to review the code for you.
Ultimately, vibe coding achieves fast, prototype-level results which sometimes feel spectacular - especially when you’d otherwise lack the capability or time to build something. But when quality matters and the code cannot be ignored, prefer other code-assist workflows over vibe coding.