Skip to content
innoverse
production grade ai development

AI-accelerated development without the vibe coding

Nikola Stanojević · 2026-07-05

Let's start with the confession: most first drafts of code at Innoverse are AI-generated. We build with AI heavily and openly — it's a large part of how a small studio moves at the speed we do.

This post is about the other half of that sentence: the discipline that makes the speed safe. Because the industry has split into two camps that are both wrong — "AI writes everything, ship it" and "AI code is slop, ban it" — and the interesting engineering happens in neither.

What vibe coding actually is

Vibe coding isn't "using AI." It's accepting code on vibes: it runs, the demo works, the diff looks plausible — merge.

It's worth being precise about why this is so seductive. The feedback loop rewards it perfectly. Generated code compiles more often than not, does roughly the asked thing, and arrives instantly — every short-term signal says yes. The cost lands weeks later, and it lands as something harder to name: comprehension debt. Nobody holds the system in their head anymore, because nobody built it in their head. The first bad incident becomes archaeology: reading your own codebase like it was written by a stranger — because functionally, it was.

You can't ban your way out of this, and you can't vibe your way through it. What works is changing where the human effort goes.

Architecture before generation

AI amplifies the plan it's given. Give it clear boundaries, a data model, and contracts between parts, and it produces code that fits. Give it nothing, and it produces confident sprawl — locally plausible, globally incoherent.

So the highest-leverage hours moved earlier: system boundaries, data model, interface contracts, failure behavior — decided by humans, written down before the first prompt. Not a 40-page design doc; a page that answers what talks to what, who owns which data, and what happens when things fail.

We take this far enough that our whole company runs as a versioned repository — standards, decisions, and conventions the AI reads before it writes. Which points at the quieter truth underneath: context is infrastructure. What the model sees determines what you get. Interfaces, standards, worked examples — maintained deliberately, versioned like code, because they are the input that everything else is generated from.

Review became the senior job

The ratio flipped: senior engineers here read far more code than they write. That only works because review itself changed.

Style review is dead — the machine formats better than we argue. What's left is the review that matters: invariants. Does this respect the security boundary? Where does this data actually flow? What happens when this dependency is slow instead of down? What does this look like when it's wrong at 3 a.m.?

The rule is simple to say and expensive to keep: AI generates; a human owns. Every line that ships has a person who can explain it — not "the model wrote it," but why it's right. If nobody can own it, it doesn't merge, no matter how green the tests are.

Tests are the contract — if a human writes the intent

Generated code earns trust through tests. But there's a failure mode hiding here: if the same misunderstanding produces both the code and its tests, the tests validate the bug. Green, and wrong.

So intent comes from outside the generation loop. The behaviors that must hold — the invariants, the edge cases that hurt, the "this must never happen" list — get written from the spec, by the person who owns the feature. AI is excellent at filling out a test suite; it doesn't get to decide what the suite protects.

Where AI doesn't get the first draft

Part of the craft now is knowing, before you start, which kind of work you're holding:

AI-first, human-owned: boilerplate, glue, migrations, test scaffolding, API plumbing, the fifteenth CRUD endpoint. The model drafts, a human reviews against the invariants, everyone moves on.

Human-first, AI-assisted: novel algorithms, concurrency with real stakes, security-critical paths, the code where a subtle wrongness costs the most. Here a person builds the mental model first — the machine helps, but it doesn't lead.

Drawing that line badly in either direction is how teams fail at this. All-AI teams ship comprehension debt; no-AI teams ship late. The line is the job.

The multiplier we won't publish

You've seen the claims — 2× faster, 5×, 10×. We publish none, and we've made that a rule: no speed or cost multiplier we can't prove, and honest proof is harder than it sounds. Speed varies wildly with the kind of work, the state of the codebase, and how much of this discipline is already in place. A single number laundered across all of that is marketing, not measurement.

What we can say plainly: the wins that last aren't the spectacular generation moments. They're consistency — the pace holding steady in week twelve, because the code stayed comprehensible — and optionality, because a codebase built behind seams with explicit contracts is one you can change your mind about. Ask us on a call and we'll walk through real examples, slow parts included.

Speed and discipline aren't a tradeoff. Discipline is what makes the speed compound instead of decay.


This is the method behind Build — and behind how we work generally. If you're deciding how your own team should adopt AI-assisted development, or you have a generated codebase that's starting to creak: talk to us.

← All writing