By Sergey Tselovalnikov on 31 March 2025
There is no Vibe Engineering
You've probably heard about "vibe coding" by now. The term was recently coined by Andrej Karpathy in his tweet. Andrej defines Vibe Coding as "a new kind of coding, where you fully give in to the vibes, embrace exponentials, and forget that the code even exists". The key difference between vibe coding and normal coding is that the engineer doesn’t interact with the codebase directly, and instead converses with the agent and inspects the final outcome.
The term caught on and Twitter quickly flooded with posts about how AI has radically transformed coding and will soon replace all software engineers. While AI undeniably impacts the way we write code, it hasn't fundamentally changed our role as engineers. Allow me to explain.
When the tornado comes whipping through your neighborhood and your house gets blown down and somehow you didn’t have insurance and you lose everything, you can’t control that. But you can certainly control how you’re gonna react to that situation.
Coding vs Engineering
Let’s start by clearly defining what a software engineer’s role entails, and to the surprise of some people, software engineering is not writing code. Yet even highly technical people often conflate coding and engineering. The most concise and precise definition of software engineering I've encountered is:
Software engineering is programming integrated over time
The integrated over time part is crucial. It highlights that software engineering isn't simply writing a functioning program but building a system that successfully serves the needs, can scale to the demand, and is able to evolve over its complete lifespan.
However, similarly to normal coding, vibe coding only covers coding at a single point in time. If an agent is used to generate a quick prototype and validate it with tests, that’s coding – not engineering. Engineering means designing systems capable of withstanding real-world conditions, sustaining workloads, resisting security threats, migrating and supporting users’ data in the system, and adapting to new requirements often many years down the line.
Vibe coding is interacting with the codebase via prompts. As the implementation is hidden from the "vibe coder", all the engineering concerns will inevitably get ignored. Many of the concerns are hard to express in a prompt, and many of them are hard to verify by only inspecting the final artifact. Historically, all engineering practices have tried to shift all those concerns left – to the earlier stages of development when they’re cheap to address. Yet with vibe coding, they’re shifted very far to the right – when addressing them is expensive.
The question of whether an AI system can perform the complete engineering cycle and build and evolve software the same way a human can remains open. However, there are no signs of it being able to do so at this point, and if it one day happens, it won’t have anything to do with vibe coding – at least the way it’s defined today.
The real Vibe Engineering
As a thought experiment, we can consider whether it’s possible to engineer reliable systems composed entirely of "vibe-coded" components. After all, less reliable consumer hardware once replaced mainframes, and we learned how to build reliable systems from inherently unreliable parts.
Such systems could tightly encapsulate AI-generated black-box components with rigorous testing, detailed performance profiling, tracing, canary deployments, and strict protocol compatibility checks. In other words, the systems would employ the same rigorous engineering practices that underpin today's software – but likely much, much stricter.
In such a future, every engineer essentially becomes a mix of an architect and a platform engineer. We could even coin the term "Vibe Engineering" for this new role – but its definition would ultimately be the same as traditional software engineering. So, there is no distinct "Vibe Engineering" – just software engineering, perhaps involving less code typing than before.
When might this future arrive? It's uncertain. A good indicator, however, might be when engineers confidently say "yes" to the question: "Would you happily go on-call for a system of fully AI-generated services?". So far, the answer seems to be a predominant "no".
Conclusion
Vibe Coding as a practice is here to stay. It works, and it solves real-world problems – getting you from zero to a working prototype in hours. Yet, at the moment, it isn’t suitable for building production-grade software.
It is possible that there’ll be a future where software is built from vibe-coded blocks, but the work of designing software able to evolve and scale doesn’t go away. That’s not vibe engineering – that’s just engineering, even if the coding part of it will look a bit different.
Thank you for reading.
Discuss on
Subscribe
I'll be sending an email every time I publish a new post.
Or, subscribe with RSS.