What is Vibe Coding and Why It’s Gaining Traction
Vibe coding represents a fundamental shift in how software is created. Instead of manually writing each line of code, developers provide natural language instructions to AI tools like Claude, Cursor, or similar LLMs, which then generate and modify the code. Karpathy’s quip that “the hottest new programming language is English” captures this shift perfectly.
The appeal is obvious: dramatically increased productivity, reduced time spent on boilerplate code, and the ability to focus on high-level ideas rather than syntax details. Many developers report significant boosts in output and enjoyment. For example, one engineer described using Cursor as “at least a 2× improvement over Copilot” and “an incredible accelerator” for their team.
What feels particularly revolutionary is how vibe coding lowers barriers to entry. Non-programmers are building functioning applications through careful prompting—something unimaginable just a few years ago. One product manager with modest coding skills reportedly built and published an iOS app entirely through vibe coding, spending about $200 on AI queries rather than hiring a developer.
But we might ask: is code written by an AI without a software engineer supervision production-ready for real-world scenarios?
The Developer Experience with Vibe Coding
The developer experience with vibe coding tends to follow a common pattern across the community. Initially, developers report an almost euphoric productivity boost. Tasks that would normally take days come together in hours as the AI handles boilerplate code, complex algorithms, and even styling without the usual debugging headaches.
Early adopters frequently describe vibe coding as bringing back the joy of programming. On the Cursor forum, one user expressed how AI coding made programming “so fun again,” leading them to work extended hours just to see “how much I can achieve in as little time as possible.” This sentiment reflects how vibe coding can rekindle creativity and rapid experimentation by removing tedious implementation details.
The experience particularly shines in certain domains. Front-end development benefits significantly, as natural language is expressive for describing UI changes (“make the button blue and move it to the top right”). Developers working outside their primary expertise also find tremendous value—a backend engineer can quickly generate JavaScript UI code, or a Python developer can get help writing a Bash script without learning the quirks of a new language.
How much I can achieve in as little time as possible...
Many developers have integrated vibe coding into their daily workflow by constantly switching between writing code themselves and instructing the AI to fill in the rest. This collaborative style creates a feedback loop where the AI can anticipate what the developer might do next, offering suggestions that can be accepted or refined. As one early adopter described it, the AI is “steps ahead of my brain, proposing multi-line edits so I type ’tab’ more than anything else.”
However, the initial excitement often gives way to more nuanced experiences as projects grow in complexity. Developers report that LLMs excel at generating an initial burst of code but can struggle when requirements change or when the codebase expands beyond a certain size. The context limitations of current models mean they sometimes lose track of the “big picture” in a large system, requiring more careful guidance from the developer.
Major Criticisms from Industry Thought Leaders
However, as you push beyond simple applications, you end up encountering the same limitations that industry experts are warning about.
Simon Willison argues that vibe coding “fails” at producing maintainable, production-quality code. He insists that professional developers must fully understand and take accountability for the code they ship—something that becomes challenging when you’re not writing every line yourself.
Andrew Chen’s observation resonated strongly with my experience: “You can get the first 75% trivially, and it’s amazing. Then try to make changes and iterate, and it’s like you’re herding cats.” I found this particularly true when trying to extend or modify existing AI-generated code. The AI struggled to maintain context and would often introduce subtle bugs that were difficult to catch.
Security concerns are perhaps the most serious. As cybersecurity expert Lilly Ryan asked, “Am I going to generate something that accidentally has a massive security hole and not realize it?” In my own testing, I discovered the AI occasionally neglected proper input sanitization and other security best practices—errors that could have serious consequences in production.
The Skills Debate: Enhancement or Erosion?
A recurring question in the vibe coding discourse is whether it enhances developer skills or erodes them. Based on my experimentation, the answer depends largely on how it’s used.
For experienced developers who understand the underlying principles, vibe coding can be a powerful accelerator. It handles the tedious aspects of implementation while allowing us to focus on architecture and design. In this case, the AI truly augments our capabilities.
However, for newcomers to programming, there’s a risk of building a superficial understanding. By skipping straight to AI-generated solutions, beginners might miss learning fundamental debugging skills, architectural patterns, and performance considerations. This aligns with Harry Law’s warning that while a beginner may “make fast progress” with AI assistance, “it might prevent them from learning about system architecture or performance” fundamentals.
The most concerning scenario is when developers begin to trust the AI’s output without thoroughly understanding it. As Willison points out, if you’re not carefully reviewing and comprehending every line of AI-generated code, you’re essentially abdicating responsibility for its quality and security: “If an LLM wrote every line of your code, but you’ve reviewed, tested, and understood it all, that’s not vibe coding in my book—that’s using an LLM as a typing assistant.”
The AI Intern Model: A Useful Framework
With experimentations and debates with my colleagues at Ingeno on the subject, we found it helpful to think of our AI coding assistant as a talented but junior team member—essentially, a super-powered intern on steroids. This intern knows multiple programming languages, types at superhuman speed, and never needs coffee breaks. But like any intern, they require supervision and don’t always understand the bigger picture.
The intern analogy provides a practical framework for understanding the proper role of AI in development:
- It can produce impressive work quickly when given clear direction
- It knows the latest frameworks and techniques
- It can sometimes suggest creative approaches you hadn’t considered
- BUT it needs supervision and shouldn’t be given full autonomy on critical projects
- It doesn’t have the context or judgment that comes from years of experience
- You still need to review its work carefully
- You’re still responsible for what it produces
This perspective helps set appropriate expectations for what vibe coding can and cannot do. AI can augment engineers, not replace them—at least not yet.
Best Practices and Middle Ground
Through experimentation our team has developed a set of best practices for integrating vibe coding into professional workflows:
- Use vibe coding for rapid prototyping and initial scaffolding
- Write critical components yourself, especially those involving security or complex business logic
- Always review and understand AI-generated code before committing it
- Use vibe coding to learn unfamiliar languages or frameworks, but take time to understand what the AI produces
- Establish clear quality standards and testing protocols for AI-generated code
- View AI as an assistant, not a replacement for sound software engineering principles
The most effective approach is a balanced hybrid: leverage AI for speed and efficiency where appropriate, but maintain human oversight and judgment throughout the process.
As Birgitta Böckeler from Thoughtworks noted on their Tech Podcast, “The really insidious category [of problems] is things that will have an impact on the long-term lifetime of the codebase and on the maintainability... You have to pay attention. You have to have this experience... If you do [vibe coding] 100% [of the time for serious software], it absolutely... cannot [work].”
Conclusion: The Evolution of Development
Vibe coding represents not a revolution but an evolution in software development. It doesn’t replace traditional coding but transforms how we approach it. It isn’t about AI writing all our code—it’s engineers and AI collaborating to create better software than either could alone… for now.
As tools improve and context windows expand, the capabilities of AI coding assistants will continue to grow. The most successful developers will be those who learn to effectively direct and supervise their AI interns while maintaining their own core engineering skills.
The key insight from my exploration of vibe coding is that it’s neither a miracle nor a mistake—it’s a powerful tool with specific strengths and limitations. Used thoughtfully, it can dramatically enhance productivity without sacrificing quality. But it requires us to evolve our understanding of what it means to be a software engineer in the age of AI.
As Omar Khattab aptly put it, “You might be able to vibe code your way to a simple demo, but good luck vibe coding your way through a complex system.”
Disclaimers
- I have not used “vibe writing” to write this article. It is my original content and opinion. This being said, AI helped me research opinions from thought leaders as well as improve the structure and form of the article. Then, Ingeno team made a final revision of the article. Team work where AI is also a team member!
- The image for this article has been generated using code that was developed 100% with vibe coding! If you would like to have the code, get in touch with me.
What’s your experience with vibe coding? Have you found it helpful or challenging?