Vibe coding: Because who doesn’t love surprise technical debt!?

Ankur TyagiAnkur Tyagi
7 min read

AI-assisted coding tools like Claude Code, ChatGPT, and GitHub Copilot are a godsend. I use them every day — for boilerplate, bug fixes, fast explorations, even documentation. I'm all in on AI as a productivity booster and creative accelerator.

But they’re causing a shift in how we write software — and it’s not all good. That’s because we’ve reached the stage of AI adoption where some of us are vibe coding at work. And that might be heralding a development culture where intentional design gets thrown out in favor of convenience and speed.

What even is vibe coding?

Vibe coding started as a way to quickly stand up prototypes or hobby projects. You prompt the model, get it to throw together a whole app or feature for you without much input – and voila! You can test your concept in minutes. It’s perfect for beginner developers, solo entrepreneurs, and experienced devs creating quick demos. Fail fast, as they say.

But while those are great use cases for vibe coding, vibe coding has evolved into a method of working with AI agents to generate code for all sorts of use cases – including for production systems.

It involves prompting AI to write code without much manual input or understanding of the code being generated. It often involves vague instructions, minimal verification, and blind trust in the output.

It appeals to the vibe coder because it's fast, effortless, and doesn’t require you to understand the underlying language or system architecture. But when you prompt an AI to generate code without a strong mental model of what you’re building. It’s vibes-first, architecture-maybe, test-later (if ever).

Think:

“Build me a REST API with Stripe integration and a PostgreSQL backend.”

It’s fast, seductive, and usually "just works." But underneath the surface, that app you vibe coded often hides brittle assumptions, unclear logic, and unstructured sprawl.

The vibe coder dilemma: Vibes don’t scale

At its core, software engineering is about much more than working code. It’s about problem-solving, designing maintainable architecture, writing clean and expressive logic, debugging with precision, and ensuring long-term reliability.

Because, sure, you got that vibe coded microservice running – but how’s the error handling? Does it follow your org’s conventions? Did the AI invent a data model with weird naming inconsistencies? Are there ten different styles of writing the same thing across files? Is your production database still alive?

When you vibe code, you skip over the intentional design steps that make code maintainable — and scalable — in the long run like naming variables with intent, choosing clean structures, and designing thoughtful flows. When vibe coding becomes the norm, we risk sidelining the deeper thinking that makes engineers effective and systems resilient.

You're speedrunning toward a tech debt pileup with no map and no brakes.

AI is the new abstraction (and it’s heavily non-deterministic)

Modern programming languages already abstract away hardware and memory management. AI adds a probabilistic, non-deterministic layer that obscures logic even further. With AI, we’re abstracting intent.

But here's the catch: AI outputs are probabilistic. That means:

  • The same prompt can yield wildly different results on different runs.

  • Slight tweaks in phrasing can produce totally different architecture choices.

You often don’t know why the model chose what it did.

This vibe coded fuzziness is fine for prototyping, but for production systems? The unpredictability weakens trust, control, and reliability – qualities critical to scalable software development.

It’s like letting a chaotic neutral wizard refactor your codebase.

Technical debt at the speed of (vibey) prompts

Let’s be honest: vibe coding feels amazing at first. You get a working prototype in an hour instead of a week.

But without the right guardrails, that speed can lead to:

  • Silent bugs

  • Duplicate logic

  • Incoherent architecture

  • Inconsistent patterns

  • Unreviewed PRs

  • Zero test coverage

  • Hidden complexity

Without understanding the structure, future maintenance becomes painful. Reviewing takes exponentially longer and you’re more likely to miss things. Debugging becomes detective work. Scaling becomes guesswork. The time you save upfront can cost much more later. And that’s not even addressing the PR backlog you’re creating.

Suddenly, you're in a codebase that works but can't be touched without summoning six hours of debugging, a million tokens-long context window, and three therapy sessions.

Vibe coding: The fragility multiplier

Vibe coded systems tend to:

  • Break under edge cases.

  • Confuse the next dev (or even future-you).

  • Fail silently in production.

The result? You spend more time reviewing, fixing, explaining, and rewriting things than you saved by prompting it in the first place. You've created a system that's not just fragile — it's fragile and mystifying.

Testing, security & all the stuff AI doesn’t do by default

AI won’t warn you if it accidentally vibe codes sensitive data, hardcodes an API key, or skips input validation. It won’t enforce domain-driven design or test coverage unless you ask it to, perfectly.

Without strong engineering intuition, vibe coding can lead to real-world vulnerabilities and brittle systems, especially when security is an afterthought instead of a default. We’ve seen this with the Tea Dating app leaking the private information of over 70,000 customers and AI deleting the SaaStr’s production database.

AI doesn’t:

  • Write unit tests unless you explicitly ask.

  • Understand your threat model.

  • Follow OWASP guidelines.

  • Validate user input unless prompted perfectly.

  • Log responsibly (hello, hardcoded secrets and PII leaks).

If you don’t have strong engineering habits already or if you’re not willing to stick to your current habits even in this vibey era, you’ll never know these things are missing until they bite you — hard — in prod.

When vibes replace struggle, you lose the intuition

Struggling with bugs, tracing stack traces, and learning from mistakes builds technical intuition. That frustration is part of the learning path and skipping it can lead to shallow confidence and dependency.

Without struggle, developers don’t build the muscle to solve unfamiliar problems independently, and that’s where true expertise lies. Yes, debugging sucks. But tracing a nasty bug through 12 layers of abstraction teaches you something an LLM never will.

The struggle builds:

  • Mental models of systems

  • Pattern recognition

  • The instinct to smell code rot before it crashes

When you skip that, you build shallow confidence on top of shallow understanding. And when things go sideways, you won't have the tools to fix it.

Where vibe coding does shine

Let’s give credit where it’s due. Vibe coding is awesome for:

  • Rapid prototyping

  • Generating boilerplate or repetitive tasks

  • Teaching programming concepts in an interactive way

  • Communicating product ideas through rough mockups

  • Brainstorming with frameworks or patterns

Used with awareness, it becomes a helpful tool to the vibe coder. Used blindly, it becomes a liability. We need to understand as devs and teams where to draw the line. And when to bring in support in the form of more rigorous code reviews and unit tests to tackle the technical debt before it solidifies in your codebase.

We’re not losing the craft — we’re drowning it in debt

The biggest risk isn’t that AI kills developer craftsmanship. It’s that technical debt becomes invisible.

As AI coding becomes the default way to build, systems will look complete — but underneath, they’ll be messy, fragile, and undocumented. And no one will know until they try to extend them.

This matters a lot in domains like:

  • Healthcare

  • Finance

  • Infra

  • Safety-critical systems

However, there’s also a chance that vibe coding evolves into a new layer of development, one that coexists with craftsmanship, where AI handles the tedious things like boilerplate and first-pass code reviews and humans focus on the architecture, ethics, and design behind systems.

That’s the timeline we want to find ourselves in and how we’re approaching AI at CodeRabbit. We’re focused on AI tools that supplement your coding agents by helping you find and prevent technical debt and bugs from making it into production – rather than the other way around.

To vibe code or not to vibe code?

This isn’t an anti-vibe coding article. I’m using AI coding agents in my workflow every day. But tools should amplify our skills, not replace them. They should do the work that’s tedious and repetitive – not the thinking and strategy.

Vibe coding isn’t evil, it’s just easy to misuse. The real danger is letting it become the default mindset on your project before the developers on your team understand what they’re building.

Let’s embrace AI, but keep coding as a craft alive, because good software isn’t just about what works. It’s about what lasts, long after the original dev has gone — and long after the vibes have faded.

Need help keeping tech debt out of prod? Try our AI code review tool free today.

0
Subscribe to my newsletter

Read articles from Ankur Tyagi directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Ankur Tyagi
Ankur Tyagi

Developer, Mentor, Writer. Blog: https://www.devtoolsacademy.com/