The AI Skeptic in a “Vibe Coding” World
Hey everyone, Jamie here.
Let's talk about the elephant in the room—or rather, the multi-trillion-parameter neural network in the room.
It's late 2026. If you believe the headlines from the past couple of years, we are currently living in the era of “vibe coding.” We are supposed to be sitting back, sipping coffee, and watching autonomous agents architect, test, and deploy entire feature sets while we merely dictate our intent into a microphone. The statistics thrown around suggest half of all code is AI-generated now.
So, why does it still feel like we're fixing the same old bugs?
Don't get me wrong. I'm not a Luddite. But as someone who cares deeply about the long-term maintainability of code—the focus of my recent work on legacy systems—I find myself adopting a posture of pragmatic skepticism towards the current AI hype cycle.
Here is a look at where I think these tools actually fit into a professional workflow today, and where they fall alarmingly short.
The Good: The Ultimate Intern
Let's start with where AI genuinely shines. If we treat AI not as a senior architect, but as an incredibly fast, slightly over-eager intern, the value is undeniable.
- Boilerplate Banished: I will happily admit that I haven't written a standard Laravel Eloquent model or a basic Flutter
StatelessWidgetstructure from scratch in months. For scaffolding, generating DTOs, or writing repetitive test setups, these tools are fantastic. They eliminate the drudgery. - The Syntax Oracle: Forging a complex regex pattern? Trying to remember the exact syntax for a nested PostgreSQL join? Asking an AI is often faster than digging through Stack Overflow or official docs. It's a frictionless reference manual.
- Rubber Ducking on Steroids: Sometimes, when I'm stuck on a logic problem, explaining it to an LLM helps me clarify my own thinking. Even if its suggested solution is wrong (which it often is), the process of articulating the problem to a machine helps me find the answer myself.
In these narrow lanes, AI is a productivity multiplier. It handles the “typing” so I can focus on the “engineering.”
The Bad: The Illusion of Competence
The danger arises when we confuse fluency with accuracy, and speed with quality.
1. The “Looks Right” Trap
LLMs are fundamentally prediction engines. They are designed to output text that looks highly plausible. In coding, plausible isn't good enough; it has to be correct.
I’ve seen AI generate a beautifully documented, perfectly formatted Laravel controller that confidently used an Eloquent method that simply does not exist. To a junior developer, or a tired senior developer on a Friday afternoon, it looks like a solved problem.
The cognitive load required to verify AI-generated code is often higher than the load required to just write it yourself. You have to read it with intense suspicion. If you just hit “Tab” and accept a large block of code without understanding every single line, you aren't engineering; you're gambling.
2. The Context Horizon
AI tools are brilliant at local optimization (writing a function) but terrible at global optimization (understanding system architecture).
When I was mapping that decades-old legacy monolith recently, the complexity wasn't in the syntax; it was in the invisible business rules, the historical context, and the weird dependencies that only exist in the database schema.
An AI doesn't know that if you change the order status logic here, it breaks a critical reporting script written by “Dave” in 2014 that runs on a cron job every Tuesday. AI lacks the deep, systemic context that humans build over time. It can refactor a method, but it cannot safely execute a “Strangler Fig” migration of a core business system.
3. The Erosion of Deep Understanding
This is my biggest fear for the industry.
When you struggle with a bug for three hours, reading documentation, stepping through the debugger, and finally figuring out why that specific bit of state management in Flutter is failing... you learn something deep and permanent. You understand the mechanism.
If you just paste the error into an AI and it gives you a two-line fix that works, you've solved the immediate problem, but you've learned nothing about the underlying system. You become a prompt engineer instead of a software engineer. We risk raising a generation of developers who can assemble pre-fabricated parts but don't understand how the engine works.
The Pragmatic Path Forward
So, where does that leave us? As pragmatic developers, we shouldn't reject AI, but we must strictly govern our use of it.
- AI is for the “How,” You Provide the “What” and “Why”: Never let an AI make architectural decisions. You define the domain, the data structures, and the security boundaries. Let the AI type out the implementation details of those decisions.
- Trust, but Verify (Aggressively): Treat AI output like a pull request from an untrusted contributor. Read it, understand it, and most importantly, test it. If you don't understand the generated code well enough to maintain it in six months, do not commit it.
- Protect Your Cognitive Muscles: Don't use AI for everything. When you are learning a new concept, force yourself to read the docs and write the code manually. Build the mental models before you rely on the machine to do it for you.
2026 might be the year of “vibe coding” in the press, but down here in the trenches, it's still about logic, architecture, and careful maintenance. AI is a powerful power tool in the workshop, but it doesn't make you a master carpenter. You still have to know how to build the house.
What's your stance? Have you fully embraced the agents, or are you keeping them at arm's length? Let me know in the comments.
Cheers,
Jamie