Vibe Coding: The Real Risks Nobody Talks About
Vibe coding is generating an entire application from a series of prompts, skipping the parts where you understand what you are building. The name makes it sound casual and fun. The consequences are not.
This is not an argument against using AI to write code. We use it every day. This is an argument for knowing the difference between AI-assisted development, where you understand and own every decision, and vibe coding, where you are essentially outsourcing your comprehension along with your keystrokes.
What Vibe Coding Actually Is
The term became popular in early 2024 and describes a specific workflow: you describe a feature or product in natural language, the AI generates the code, you run it, and if it works you move on. If something breaks, you paste the error back into the AI and ask it to fix it. You might never read the code. You might not be able to.
For small, throwaway tools, this workflow is fine. A quick script to rename files. A basic form that sends an email. A prototype you need in two hours for a presentation you will never give again. These are reasonable use cases.
The problem starts when people apply vibe coding to projects that need to last, scale, or be maintained by other humans.
Where It Breaks
Technical debt is what happens when you borrow against future development time. Vibe coding runs up technical debt at an extraordinary rate because every piece of code that exists without understanding behind it is a future liability.
Here is what that looks like in practice. You vibe-code a web application. Six months later, it needs a new feature. You describe the feature to the AI and it generates code. But the AI does not know how the earlier code was structured, what patterns were used, or what the original decisions were. It makes a plausible guess. You accept it. The codebase now has two conflicting approaches to the same problem, and neither approach is documented.
Do this enough times and the codebase becomes impossible to reason about. Not because it is complex. Because nobody made conscious decisions about any of it.
We saw this happen to a client who came to us after vibe-coding their internal booking system for six months. The system worked, mostly. But no developer they brought in could understand how it worked well enough to modify it safely. Every change broke something else. The only fix was a rewrite.
The Handover Problem
The handover problem is where vibe coding creates the most acute pain.
If you build something you do not understand and then need to hand it off to a developer, to a new hire, or to another agency, you cannot explain the system to them. You can show them the code. You cannot explain why any of it is the way it is, because you did not decide. You accepted.
A good developer taking over a new codebase asks questions: why is this pattern used here, what is the intended behaviour when this edge case occurs, what does this function actually return when the input is malformed? If the answer to every one of those questions is "I do not know, the AI wrote it", you have not built something you own. You have generated a liability.
This matters significantly more when the system handles real data, real money, or real users.
The Security Dimension
There is a specific security risk in vibe coding that is worth naming directly. When you do not understand the code, you cannot audit it.
SQL injection vulnerabilities, exposed credentials, missing authentication on API routes, inputs that are not validated before they touch a database. These are not exotic problems. They are the first things a security review looks for. If your response to "can you walk me through how user input is handled here" is a blank stare, you are not in a position to know whether your application is safe.
Vibe-coded applications tend to look functional and be insecure simultaneously, because the AI optimises for making things work in the happy path and does not have a strong model of your threat surface.
Our Approach: AI-Assisted, Human-Owned
We use AI heavily in development. Claude writes first drafts of components, functions, and data processing logic. We review every line. We modify, reject, or rewrite anything that does not fit the architecture or that we cannot explain.
The critical distinction is ownership. Every piece of code in a codebase we build or maintain is code we can explain, modify, and reason about. The AI accelerates the process of getting to a first draft. It does not replace the process of understanding what we are building.
For TakeoffIQ, an AI construction takeoff tool we built on the Claude API, this approach was essential. The AI reads PDF blueprints using Claude Vision and returns structured JSON data. The integration had to be precise: wrong schema, wrong output, wrong takeoff, wasted material costs on a construction site. We used Claude to generate draft code for the extraction pipeline, then read it carefully, tested edge cases manually, and rewrote the parts that made assumptions we did not share.
That process takes longer than pure vibe coding. It is significantly shorter than the rewrite you face when vibe-coded production code collapses under its own weight.
3 Signs Your Codebase Has Vibe Coding Problems
You cannot describe the architecture to a new developer in 15 minutes. Not every detail, but the structure and the key decisions.
You find yourself pasting entire error messages into an AI chat with no context about what might be causing them, because you do not have a mental model of the system.
The codebase has multiple competing patterns for the same problem: two different ways to handle API calls, two different state management approaches, two different authentication strategies. This is a strong signal that decisions were never made consciously.
What to Actually Do
If you are early in a project and considering a vibe coding approach, consider what happens when it grows. If you can afford to throw it away, vibe code freely. If it needs to last, build it with understanding.
If you are already in a vibe-coded codebase, the path forward is incremental documentation and refactoring. Pick the most critical systems first. Write down what they do. Understand them before you touch them. Replace confusing sections with code you understand, one piece at a time.
If you need development done properly and AI-assisted work is part of the scope, talk to us about how we work. Fast development does not have to mean incomprehensible development.

