Vibe first, Engineer at the point of maintenance

Vibe first, Engineer at the point of maintenance

In the world of software development, there are two camps screaming at each other right now.

  1. “Everything will be vibe coding soon - architecture is dead!”
  2. “Vibe coding isn’t real engineering - you’re just making a mess!”

If you are a software engineer, you want to believe that everything that you have learned and built by now is not going to the dogs, and hence you want to believe that it can’t scale.

If you have product/business background and have been for the longest time hamstrung by software engineers, you want to believe that you can vibe code your way out of your shackles.

As in most things, the truth is nuanced.

What are we even talking about?

Vibe Coding: Intent-driven, AI-assisted development where you tell Claude(or another tool, but let’s face it - in 2025 Oct it IS Claude Code) “make this work” and it does, magically. Minimal upfront design let alone architecture, while you’re moving fast and validating ideas.

Engineering: The stuff some of us were taught(note, not learned) in school and pretend to do at work. Thoughtful architecture, proper abstractions, test-driven development, design docs, code reviews, the whole nine yards.

There is a third camp of “Vibe Engineering” who are trying to get the best of both worlds, but to handle this well, you need to be really experienced in my opinion and need to know both Product AND Engineering, so let’s not go there now

Most of the code you are writing is going to die a premature death

There are studies which show that 15-30% of features in most products go completely unused. This study only checked the code that was dead and sitting in the codebases. In my experience, in many which are kept clean, features that are no longer in use are pruned, so my guess is that a good 50% of the code that you write with so much love is DoA.

If you are in an early stage company, this number is(should be!) even higher. Early-stage products don’t fail because of bad architecture. They fail because they build the wrong thing. Real requirements only emerge after users actually touch your product. Until then, you’re just guessing.

So why are we spending weeks architecting something that might be deleted next sprint?

To viBE or not to viBE

The key question post 2025 isn’t “should I vibe code or engineer properly?” It’s “where is this code in its lifecycle?”

Pre-market validation: Vibe code the hell out of it. You don’t know if users want this. Requirements will change dramatically. Speed beats perfection. Better to fail fast than die in limbo.

Post-validation, pre-scale: Start engineering. Users are actually using this. Bugs form patterns. New developers look confused. User trust and revenue are now at stake.

At scale: Engineer properly or suffer. Technical debt costs real money. Debugging takes longer than building. Your job depends on reliability.

But there’s another dimension: criticality. Financial transactions, infrastructure, security, and anything that could cause data loss? Always engineer from day one. Experimental features, internal tools, A/B tests? You can vibe initially.

When to switch gears

You’ve vibe coded too long when: the same bugs keep recurring, adding features breaks other features, onboarding is painful, and you’re afraid to change anything.

Time to engineer when: your user base outgrows beta, bugs increase despite fixes, feature requests stabilize into patterns, your team grows beyond 3-4 people, or revenue depends on reliability.

Not an excuse for sloppy work

Vibe coding done well should be a strategic decision, not negligence. You’re consciously choosing speed over architecture because the code might not survive contact with users. That’s different from being lazy.

You’re still responsible for security, code quality and should be able to explain what the code does at each point.

C’est la vie

As much it sucks to say it, the art of software engineering in 2025 is about knowing when to “architect” and when to just ship and learn.

And whatever you do, don’t spend three weeks hand-building a feature nobody asked for. I promise you, your users don’t care about your beautiful abstractions - they care if it works.