A Note from the Translator

  • The essence of “Vibe Coding” is rapidly accumulating technical debt at the speed of AI.
  • AI programming is a double-edged sword: it’s a fantastic tool for prototyping, but when used for long-term maintenance of core projects, it can signal the beginning of a disaster.
  • Allowing non-technical individuals to develop core products with AI is akin to giving a child a credit card with no limit—what seems glamorous in the moment can lead to endless debt in the future.
  • The key to harnessing AI is not to abandon critical thinking, but to enhance one’s ability to “construct theories.” People must control the reins, rather than being led by AI.

“Vibe Coding” Creates Technical Debt

Steve Krouse

While many are confused by it, Andrej Karpathy coined the term “Vibe Coding” to describe a type of AI-assisted programming where you might even “feel as if the code doesn’t exist.”

Legacy Code / Technical Debt

For code that nobody can understand, we already have a term: legacy code / technical debt.

There’s a common saying that nobody likes legacy code, and it’s not without reason. But the question is, isn’t the code right there? Can’t you just look at it to understand?

That’s a big misconception. Code that no one understands is real technical debt. To fully grasp a piece of unfamiliar code and debug it requires a tremendous amount of time—let alone adding new features without introducing new bugs, which becomes even more challenging.

The essence of programming is constructing theories, not merely piling up code. We all understand this, which is why we often complain about those business departments that try to quantify programmers’ output by counting lines of code.

When you engage in “Vibe Coding,” the speed at which you accrue technical debt matches the speed of AI-generated code. For this reason, “Vibe Coding” is actually a perfect choice for prototyping and one-off projects: after all, only code that needs long-term maintenance becomes legacy code!

Prototypes and One-Time Code

I have happily used “Vibe Coding” to develop some small applications myself, such as:

Since I never intended to continuously iterate on these applications, it didn’t matter that I couldn’t understand their code. Moreover, these applications are quite small, so if I ever need to revisit the code, the amount of technical debt is limited. This way, the speed at which I develop applications far exceeds traditional methods, making the entire process exhilarating.

“Vibe Coding” is a Matter of Degree

“Vibe Coding” is about how deeply you understand the code. The more thoroughly you comprehend it, the less you rely on gut feelings.

shapes at 25-07-30 10.32.53.png

When it comes to project requirements, an engineer asking for “a web application with a persistent database” implies a much lower level of reliance on intuition than a non-technical person asking for “an app” without distinguishing between web apps, native apps, or understanding data persistence.

Giving a Credit Card to a Child

The worst-case scenario is allowing a non-programmer to use “Vibe Coding” to develop a large project that requires long-term maintenance. It’s like giving a child a credit card and failing to explain what “debt” means.

The initial excitement can be overwhelming: “Oh my goodness, as long as I swipe this little card, I can get whatever I want!”

This echoes popular sentiments today: “AI can do anything! Everyone is a programmer! Just look at this app that AI generated for me!”

However, a month later, the credit card bill arrives: “Did I really need to buy all those things? How do I deal with this mess now?”

Developers using “Vibe Coding” will face the same predicament: “My code crashed! What are all these files and folders for? How do I fix this? Can I get a refund for the $400 I spent on AI-generated code?”

If you can’t understand the code at all, your only option is to keep relying on AI to fix things for you. This is like “paying off a credit card with another credit card,” using the credit of a new card to settle the debt of an old one.

How to Seriously Pair Program with AI in 2025

If you plan to build a serious project requiring long-term maintenance in 2025, Andrej’s advice is sound:

You need to treat AI like a new intern, keeping it on a very short leash. This intern is extraordinarily talented, has comprehensive knowledge of software, and is like a living encyclopedia. Yet, they are overly enthusiastic, often talking nonsense, and are entirely clueless about what constitutes good code. Therefore, you must emphasize: slow down, be defensive, proceed with caution, and even be a bit paranoid. Seize every opportunity to learn by doing instead of entrusting all the work to it.

— Andrej Karpathy, twitter

Embracing AI in Development

At Val Town, we have integrated AI into our products in dozens of ways. Our AI assistant, Townie, acts as an intelligent agent that can autonomously read and write code, run programs, check logs, and continuously iterate until tasks are completed.

Townie is an excellent tool for “Vibe Coding.” I highly recommend it to friends who understand the trade-offs involved. Sometimes, I use it for fast “Vibe Coding”; for projects I value highly, I rein it in and allow only “scalpel-like” precise modifications. Both modes are equally enjoyable and efficient.

The field of AI programming is rapidly evolving, and the future remains uncertain. However, I firmly believe that “theoretical construction” remains at the core of developing complex software. This means that our human expertise is still irreplaceable! I also optimistically believe that AI will continue to delightfully transform the programming profession in unexpected ways.

Yet, if you have non-technical friends who are recklessly indulging in “Vibe Coding” to chase their dream of a “billion-dollar app,” please do share this article with them. “Vibe Coding” won’t lead them to success. Sooner or later, they’ll learn to look at the code with their own eyes 😱, and will ultimately come to a harsh realization: it’s often better to build a new, well-structured codebase from scratch rather than trying to fix an incomprehensible legacy system.


This article is a condensed version of a talk I gave last month on the role of the human brain in programming. You can watch the full presentation here: The Role of the Human Brain in Programming. I’d like to thank my fiancée, Emily, for listening to me discuss these topics for months and for filming the presentation. Thanks to Malte and Rippling for hosting this talk.

Special thanks to Geoffrey Litt, Jimmy Koppel, Max McDonnell, Tom MacWright, Charmaine Lee, Brent Jackson, and Dan Shipper for their feedback on this piece. I also appreciate Simon Willison and Andrej Karpathy for providing a rational voice amidst the enthusiasm and skepticism surrounding AI.

Original link: https://blog.val.town/vibe-code