Karya Semi
HomeBlogSearchCategoriesAboutContact
Karya Semi

Less noise. More notes.

HomeBlogAboutContactPrivacy PolicyDisclaimer

© 2026 Karya Semi. All rights reserved.

XGitHubLinkedIn
  1. Home
  2. /Categories
  3. /Programming

The Quality Crisis of 'Vibe Coding': When Speed Inevitably Trashes Codebase Security and Maintainability

Rapid ai-coding promises speed but often leaves behind massive security vulnerabilities and technical debt. Learn the true cost of vibe coding.

Dian Rijal Asyrof/August 6, 2026/5 min read
Illustration for The Quality Crisis of 'Vibe Coding': When Speed Inevitably Trashes Codebase Security and Maintainability

Andre Karpathy coined the term "vibe coding" to describe a new way of building software. You sit in front of an editor, type a prompt, watch the AI spit out two hundred lines of code, and hit run. If it works, you commit it. If it doesn't, you tweak the prompt and try again. It feels like magic. You feel like a wizard commanding an army of digital builders.

By 2026, using AI coding tools has become the default mode of work for a huge portion of the industry. Surveys show that over ninety percent of developers use these tools every single day. The speed is addictive. You can build a working prototype of a web app in an afternoon. But we are starting to see the bill for this speed, and it is incredibly expensive. The vibes are great until the system crashes, the database gets leaked, or you have to change a core feature six months down the line.

The Fallacy of Typing Speed

We need to talk about what we mean by developer velocity. Traditionally, managers measured productivity by how quickly teams could ship features. AI tools make the writing part of coding almost instantaneous. But writing code was never the real bottleneck in software engineering. The real challenge has always been reading, understanding, and maintaining that code over time.

When you delegate the thinking to a language model, you save time upfront. You get to feel the rush of shipping something quickly. But you pay for it later during the debugging phase. Reading code is much harder than writing it. When you review code you wrote yourself, you already have the mental model in your head. When you review code that an AI generated, you have to reconstruct that mental model from scratch. You have to figure out why the AI chose a specific library, why it structured a loop a certain way, and whether it quietly introduced a race condition.

Most developers don't do this. They don't have the time, or they simply trust the tool too much. They skim the generated code, see that the tests pass, and merge it. This creates a growing pile of unverified code in production. (This is why retyping LLM-generated code is so effective at preventing cognitive debt.)

Security Holes by Design

Language models don't write secure code by default. They write plausible-looking code based on patterns they found on the internet. And the internet is full of terrible, insecure code.

Imagine you ask an AI to write a quick Node.js endpoint to upload profile pictures to an AWS S3 bucket. The AI will likely generate a script using a popular upload library. It will write the code that gets the job done fastest. This code often expects the AWS credentials to be passed directly in the connection string or hardcoded in a configuration block. If you don't catch this, those credentials end up in your git history—one of the classic Git mistakes every developer keeps making. Security teams see this constantly. Plain-text API keys, hardcoded database passwords, and exposed AWS secrets are showing up in public repositories at an alarming rate.

It gets worse when you look at input validation. AI models love to write code that assumes the user will always input clean data. They skip basic sanitization steps unless you explicitly tell them to include them. This opens the door to classic vulnerabilities like SQL injection and cross-site scripting. A developer who doesn't fully understand the language they are writing in will never notice that the AI forgot to escape a variable. They just know the form submits correctly when they test it with their own name.

We are also seeing a massive increase in dependency supply chain risks. AI tools frequently suggest outdated packages or, worse, hallucinate packages that don't exist. Attackers have figured this out. They register malicious packages with names that match common AI hallucinations, waiting for a developer to blindly run npm install on a generated package list. In some cases, a seemingly normal-looking GitHub repo can hijack Claude Code entirely.

The Architectural Decay

Software architecture is about boundaries and constraints. A good architecture separates concerns, isolates database logic from the user interface, and ensures that changes in one part of the system don't break another. AI tools don't understand these boundaries because they operate on a local context window. They only care about the file you are currently editing or the specific prompt you gave them.

If you ask an AI to add a new payment gateway to an existing codebase, it will write the code that gets the job done fastest. Usually, this means copying and pasting existing logic, bypassing your existing abstractions, and writing custom database queries directly inside the UI components. It doesn't think about whether this code should be refactored into a shared service. It doesn't care that it just duplicated fifty lines of validation logic.

Over time, this turns your codebase into a chaotic mess. You end up with five different ways of handling HTTP requests, three different validation libraries, and no single source of truth for your data models. When you need to upgrade a dependency or change a core database schema, you realize you have to edit fifty different files because the code is so tightly coupled. The speed you gained in the first week is completely wiped out by the months you spend trying to untangle the mess.

The Skill Gap and the Death of Debugging

There is a deeper, more quiet crisis happening in engineering teams. We are losing the ability to debug.

Debugging is a skill that you build through frustration. You spend hours tracing a bug through stack traces, reading documentation, and understanding how memory is allocated. This process is painful, but it builds the mental models that make you a senior engineer. It teaches you how systems behave under load, how networks fail, and how operating systems manage resources.

When you vibe code, you skip this pain. When a bug occurs, you copy the error message, paste it back into the AI, and apply the suggested fix. If that fix doesn't work, you ask again. You never actually learn why the error happened. You just keep guessing until the red text goes away.

This is fine for simple web pages, but it is disastrous for complex systems. When a distributed system fails in production under high load, the AI won't save you. The error logs are often noisy and misleading. You need engineers who can reason about the system from first principles. If your team has spent the last two years copy-pasting AI suggestions, they won't have the skills to solve these problems. They will be helpless when the tool fails.

Reclaiming Quality in the AI Era

We can't ban AI tools, and we shouldn't. They are incredibly useful for boilerplate code, writing repetitive tests, and exploring new APIs. But we have to change how we use them.

First, we must treat AI-generated code as untrusted user input. It should go through the exact same rigorous review process as code written by an untrusted third party. Teams should implement strict static analysis tools, automated security scanners, and dependency checkers that run on every commit. If the AI generates a hardcoded secret, the pipeline should block the build immediately.

Second, we need to value code quality over raw output volume. Managers need to stop measuring developer productivity by the number of pull requests merged or lines of code written. Instead, we should reward clean design, thorough testing, and code deletion. Writing less code is almost always better than writing more code.

Finally, we need to teach developers to treat AI as an assistant rather than the pilot. You must understand every single line of code that goes into your codebase. If you can't explain what a block of generated code does, you shouldn't commit it. It is that simple.

Vibe coding feels great in the short term. The dopamine hit of seeing code appear instantly is real. But good software engineering is about building things that last. It is about security, reliability, and readability. If we sacrifice those values for temporary speed, we will spend the next decade paying off the debt.

DR

Dian Rijal Asyrof

Writes about useful AI tools, programming practice, and the craft of building reliable software.

Previous articleZero-Knowledge State Channels: The Scalability Bridge DeFi Desperately NeedsNext articleEIP-8361: Analyzing Ethereum's Proposed Zero-Issuance Model for Staking Overload
AI CodingSoftware QualitySecurityEngineering Culture
On this page↓
  1. The Fallacy of Typing Speed
  2. Security Holes by Design
  3. The Architectural Decay
  4. The Skill Gap and the Death of Debugging
  5. Reclaiming Quality in the AI Era

On this page

  1. The Fallacy of Typing Speed
  2. Security Holes by Design
  3. The Architectural Decay
  4. The Skill Gap and the Death of Debugging
  5. Reclaiming Quality in the AI Era

See also

Illustration for A Normal-Looking GitHub Repo Can Hijack Claude Code
AI/Jun 30, 2026

A Normal-Looking GitHub Repo Can Hijack Claude Code

Mozilla's 0DIN researchers showed how a setup script pulling from DNS can take over Claude Code via indirect prompt injection. Here's the attack and the fix.

3 min read
AIAI Agents
Illustration for Inside the $116 Million Coldcard Hack: How Offline Bitcoin Seed Phrases Were Guessed Without Touching the Devices
Web3/Aug 6, 2026

Inside the $116 Million Coldcard Hack: How Offline Bitcoin Seed Phrases Were Guessed Without Touching the Devices

How did hackers guess Coldcard seed phrases offline? Analyze the firmware vulnerability that compromised entropy and drained $116 million in bitcoin.

4 min read
BitcoinCryptography
Illustration for Passkeys Aren't Bulletproof, Unit42 Found a New Attack Surface
Technology/Aug 5, 2026

Passkeys Aren't Bulletproof, Unit42 Found a New Attack Surface

Palo Alto's Unit42 just published research on 'Pass the Passkey' attacks that exploit passwordless authentication flows. Here's the technical breakdown and what developers implementing passkeys need to fix.

5 min read
PasskeysAuthentication