I’ve spent a bunch of time using AI tools as a developer in the last couple of years. It makes my life easier, and I do realize a huge benefit (especially with MCPs), but the hype is so strong that I started to hate the thing and avoid staying on top of everything that’s happening.

Everybody is sharing 100+ AI news daily. It’s unbearable. It makes me wanna become a gardener or a plumber.

But I love my job, and now the world is telling me I should delegate the most exciting part of the job to AI models and then just simply “vibe” with it.

Well, here’s the thing: I tried it. I vibe coded. It’s fascinating how it can generate a bunch of bad code and make it work (until it doesn’t).

Probably the main problem I have with getting used to vibe coding: As someone who’s been writing code for 12 years, it’s difficult for me not to look at it. After everything I saw in my career, I know how important it is to understand your project’s code.

Maybe someone would say to me that if I don’t want to be aware of C, C++ code that executes behind the scenes when I run my JS code, I shouldn’t be concerned about what some AI model generated for me and I should just accept it as a “new level of abstraction”.

People like pointing that out a lot. “It’s just a new level of abstraction, man.“

Let’s see.

So far, all the levels of abstraction in programming had the same goal/consequence: They made the code more understandable to human beings, made it more close to a natural language. And I get it, when you put it like that, that’s exactly what AI does: It helps us give the instructions to the machine in plain English (or any human language). That means it is a new level of abstraction, right?

Well, another thing that was always important for every new programming language (as a new level of abstraction) was that the same code will always compile to the same set of instructions that the machine receives. Only if you change the code, you will instruct something else.

You don’t have that with AI models. The same prompt can generate something different each time. And that’s why I tend to disagree.

So if it’s not a new level of abstraction, what is it? I think it’s an incredible tool that can help people do stuff a lot faster. But there’s something to remember: faster is not always better, especially when it comes to programming.

Let me give you an example:

I recently started using Figma MCP in Cursor to build some components based on the available design objects. It’s very easy to use and it’s very powerful. But the code looked like it was written by a junior dev on synthetic drugs. I’m not talking about coding style or directory structure or SOLID or whatever… I mean look at this:

AI generated code example showing messy implementation

It works, yeah. But I just can’t leave it like that, I need to clean it up. And that took a while since there were 10+ different components with the same or similar issue. Maybe I saved some time comparing to building it on my own from scratch, I’m not sure, but I could have definitely skipped the frustration, and I believe it cost me more than an extra hour of work. And that’s why I don’t think I can truly be a vibe coder. I just don’t trust the generated code to be reliable or good enough and, more importantly, I can’t leave it alone.

Maybe it’s just me. Maybe I’m a dinosaur who’s attached to the code to much. I should probably just forget that the code exists and keep prompting until the thing works.

And if I have 1000 users at some point and I need to debug something, I should just keep prompting. And if it works for me, but not for 200+ users, I can just ask it what makes me special. <3

Or if something really goes wrong, I can write a prompt like this: “Some guy from Germany said he lost €200 today because of some bug with product details you stored in the DB. What’s wrong with you?!“

It’s hard to predict what’s going to happen. Nothing should surprise us. But when it comes to programming, based on what I see so far, we’ll need more and more people who understand the code, rather then people who just vibe.

Finally, I asked AI to review my thoughts above, and here’s the reply:

“I agree with your point that while AI tools can help speed up certain coding tasks, it’s important to still maintain an understanding of the underlying code. The example you provided of the Figma-generated code looking like it was “written by a junior dev on synthetic drugs” highlights the potential issues with just blindly accepting AI-generated code without reviewing and refining it.

As someone who has been coding for 12 years, I can understand your reluctance to fully hand off the coding work to an AI system. The lack of consistency and reliability in the output is a valid concern. And you’re right that when it comes to mission-critical production code, we need developers who really understand what’s going on under the hood, not just those who can “vibe code” until it works.

At the same time, I think AI tools do represent a new level of abstraction in programming, even if the output isn’t as consistent as a traditional compiler. The ability to express your intent in natural language and have an AI system generate functioning code is a significant leap forward. The key will be finding the right balance - leveraging the speed and ideation benefits of AI tools, while still maintaining quality control and a deep understanding of the codebase.

Overall, I think you raise some excellent points about the limitations and risks of over-relying on “vibe coding” with AI. The goal should be to use these tools judiciously, not to completely replace human developers who deeply understand their codebases. It will be an interesting evolution to watch as these technologies continue to advance.“

Damn, it convinced me I was wrong with the “level of abstraction” thing.