← Back to Blog

Vibe Coding vs. Agentic Engineering: Where Most People Get It Wrong

By · · 7 min read

#Agentic Coding#Claude Code#Vibe Coding#Software Architecture#AI Engineering

Everyone calls themselves an "agentic engineer" now. Most are still vibe coding with extra steps. Here's the actual line between the two — and why I had to learn it the hard way rebuilding SYSLAB twice.

Vibe Coding vs. Agentic Engineering: Where Most People Get It Wrong
Vibe Coding vs. Agentic Engineering: Where Most People Get It Wrong A few weeks ago, someone on Twitter described their "agentic workflow" as: open Claude Code, type "build me a SaaS dashboard," wait, and ship whatever came out. That's not agentic engineering. That's vibe coding wearing a fancier name. I want to be clear before I go further — I'm not saying that to be dismissive. I've done exactly that. Early on, I treated every AI coding tool like a vending machine: insert prompt, receive code, move on. It felt incredible for about two weeks. Then I had to actually maintain what I'd "built," and I realized I couldn't explain half of it. I hadn't engineered anything. I'd just typed faster than I could think. This post is me drawing the line I wish someone had drawn for me — between vibe coding and agentic engineering — because I think most people building with AI tools right now are stuck on the wrong side of it without realizing there's a line at all. --- What Vibe Coding Actually Is Vibe coding isn't a technical term, but everyone building with AI knows exactly what it means: you describe what you want in natural language, the AI generates code, and you accept it if it looks right and runs without errors. There's nothing wrong with this as a starting point. I still vibe code constantly — for throwaway scripts, for quick prototypes, for the kind of code that exists for ten minutes and then gets deleted. It's fast, it's fun, and for low-stakes work it's genuinely the right tool for the job. The problem starts when vibe coding becomes your only mode, applied to systems that actually need to work reliably over time. I learned this the hard way building one of my early CIS prototypes. I vibe-coded the entire evidence-verification pipeline in one long Claude Code session — described the goal, let it write everything, shipped it. It worked beautifully on my test cases. Then I fed it a real candidate's GitHub profile with a slightly unusual repo structure, and the whole thing fell apart in a way I had no idea how to fix, because I'd never actually understood what it built. I was debugging a stranger's code that happened to live in my repo. That's the tell. If you can't explain why your system works, you didn't build it — you requested it. --- What Agentic Engineering Actually Is Agentic engineering is the same tools, the same models, the same prompts — but a completely different relationship to the work. Instead of asking an agent to build something and hoping for the best, you're architecting a system of agents, each with a defined responsibility, working inside boundaries you set on purpose. You're not typing faster. You're thinking like an architect who happens to delegate the typing. When I rebuilt CIS the second time, the difference wasn't that I wrote more code by hand — I actually wrote less. The difference was that I stopped asking one agent to "verify this candidate" and started designing a structure: a GitHub agent that only reads commit history, a LeetCode agent that only checks problem-solving activity, an orchestrator that combines their findings into a report. I wrote the architecture. The agents wrote the implementation inside it. That's the actual distinction, and it has nothing to do with how advanced your tools are: | Vibe Coding | Agentic Engineering | |---|---| | "Build me X" | "Here's how X should be structured. Build the part that fits here." | | You judge output by whether it runs | You judge output against a spec you defined first | | One long, undifferentiated session | Scoped tasks, isolated context, clear handoffs | | You discover the architecture after the fact | You design the architecture before the agent starts | | Debugging means re-prompting and hoping | Debugging means understanding which component failed and why | Notice that none of this is about Claude Code vs. Antigravity vs. Replit Agent vs. Codex. You can vibe code in any of them. You can also engineer agentic systems in any of them. The tool isn't what makes you an agentic engineer. The discipline is. --- Why This Distinction Actually Matters I think a lot of developers are quietly worried that agentic coding tools are making them worse engineers — that letting an AI write the implementation is some kind of skill atrophy. I don't think that's the real risk. The real risk is staying in vibe-coding mode while the size and stakes of what you're building keep growing. A landing page built by vibing is fine. A point-of-sale system handling pharmacy inventory — which is, not coincidentally, exactly what I'm building with RITE POS right now — is not something I can afford to "discover the architecture of" after the fact. When I'm designing the OCR/AI inventory flow for RITE POS, I'm not asking an agent to "build inventory scanning." I'm specifying: this is the camera-capture boundary, this is where ML Kit hands off to Cloud Vision, this is where Gemini's vision model gets called only as a fallback, this is the exact schema the result needs to match before it touches the database. The agent fills in implementation inside a structure I already decided on. That's the only way I'd trust this anywhere near real pharmacy data. The uncomfortable truth is that agentic tools don't remove the need for engineering judgment — they just move where that judgment gets applied. In the old world, your judgment showed up line by line, as you typed. In the agentic world, your judgment has to show up before the agent starts typing, in the architecture and constraints you hand it. Skip that step, and you haven't simplified engineering. You've just delayed the moment you have to do it — usually until something breaks in production. --- So Where's the Actual Line? Here's the test I use on myself now, every time I open Claude Code or Replit Agent for something that isn't a throwaway script: Could I draw the architecture of what I'm about to build, on a whiteboard, before I send the prompt? If yes — if I can name the components, the boundaries between them, and what each one is responsible for — I'm engineering, and the agent is my implementation layer. If no — if I'm just hoping the right structure emerges from a sufficiently detailed prompt — I'm vibe coding, and that's fine, as long as I'm honest with myself about the stakes of what I'm building. The tools have gotten good enough that this distinction is easy to blur. Claude Code will happily hold an entire architecture in its context and build it end to end without you specifying much of anything. Antigravity will spin up parallel subagents and ship a working app from a single prompt. That capability is genuinely impressive — and it's exactly why the discipline matters more now, not less. The tools will build whatever you ask for, structured or not. They won't tell you which one you asked for. I'm not writing this as someone who's fully solved it. I still catch myself vibe-coding things that deserve better architecture, especially late at night when "just get it working" feels more appealing than "design it properly first." But naming the line has changed how often I catch myself before shipping something I can't explain. This is the first post in a series I'm doing on what agentic engineering actually looks like day to day — the tools, the workflows, the security holes nobody talks about, and the debugging headaches that come with handing implementation to something that doesn't get tired. If you're building with these tools too, I'd bet you've caught yourself on the wrong side of this line more than once. I know I have.