Vibe Modernization: Rebuilding Legacy Systems at AI Speed, With Proof They Still Work

TL;DR — “Vibe coding” is fast and unaccountable, which makes it a non-starter for software a business actually depends on. Vibe modernization keeps the speed and inverts the rest: an AI agent does the hands-on rebuilding at full tilt, every claim it makes is checked against real source code, and an independent pass proves the new system behaves like the old one. We named it after we ran it — forward-engineering part of a decades-old COBOL customs estate into a Java/Spring target the customer already ran, in a regulated domain where getting behavior wrong is expensive. It shipped.

The wall vibe coding hits

Vibe coding is the most fun software has been in years. You describe what you want, the agent writes it, you keep moving. On a side project, that trade is obviously worth it.

Now point the same loop at a system that clears customs declarations, or prices policies, or moves money. The trade is a losing one, and not because the agent is bad at writing code. It's because nothing in the loop proves the result is correct. There’s no ground truth and no audit trail. When someone asks “how do you know this behaves like the system it replaced?”, the honest answer is a shrug.

Modernizations always need to go faster, but speed has been solved. What hasn't been solved is the ability to combine both speed and proof.

In other words, the key question for modernization practitioners is this: could you keep vibe coding’s velocity when building software that has to survive an audit?

What vibe modernization is

Vibe modernization is rebuilding a legacy system by enabling a grounded AI to forward-engineer that system's behavior into a target architecture — the speed and feel of vibe coding, bolted to verified ground truth so it holds up under audit.

This name is a deliberate provocation. We’re not distancing ourselves from vibe coding; we’re keeping the part of it that works. The agent still does the hands-on building, still moves at agent speed, still owns the loop. What changes is that every claim it makes — about what the legacy system does, about how the target is structured, about what a given change needs to touch — is checked against real source code before it counts for anything.

Keep the velocity, but add the proof. Everything below is the machinery that makes that a description rather than an aspiration.

Note: this is CoreStory’s code modernization playbook run at its most aggressive setting. The base playbook defaults to human-led — engineers read the code, engineers decide, the agent advises — and leaves the labor split open. Vibe modernization is the same playbook and the same rigor, with the balance shifted hard in an agentic direction.

The one decision that defines vibe modernization: who’s driving?

Every other difference falls out of this single question.

In a human-led modernization, the human is the protagonist. People read the legacy code, form the plan, write the code; the AI accelerates whatever it’s pointed at. Judgment is spread thinly and continuously across the whole effort.

In vibe modernization, the agent drives and humans gate. The agent owns the build loop end to end — working out what needs to change, writing the tests, writing the code, drafting the evidence that behavior survived. Human judgment concentrates instead at a small number of high-leverage moments: approving the plan before any code is written, validating the legacy business rules with someone who actually knows the business, and signing off that old and new match.

Human-led
A decision at every point
Judgment spread thinly across every step. The agent advises; pace is set by review.
Agent-led, human-gated
Agent runs flat out
Approvethe planValidatethe rulesSign offon parity
Judgment concentrated at three gates. Same rigor, different center of gravity.
Human-led modernization spreads judgment across every step. Vibe modernization concentrates it at three gates and lets the agent run between them.

Where the safety goes

The obvious objection to handing an agent the wheel is that you’ve traded away safety. You haven’t. You’ve relocated it.

When an agent builds at speed, continuous human review stops being a real control. Nobody reads every line as fast as it gets written, and pretending otherwise is how teams land in the worst of both worlds — slowly shipped code that nobody trusts. So the checking has to move somewhere it genuinely works: into the audit trail, and into a verification pass that runs separately from the build.

You can let the agent drive precisely because a rigorous, independent check catches what watching over its shoulder never really would.

That’s the trade, and it’s a good one — but only if the verification is real. So here is what makes it real.

The four disciplines that make it hold

1. Source decides truth. System intelligence is what makes the agent fast — it can navigate a system no one person fully understands and land on the behavior that matters. But intelligence accelerates discovery; it doesn’t settle facts. No claim enters a deliverable until it’s been checked against the actual code and anchored to the exact place it came from — file and line. This is what makes the speed honest: you move fast because grounding is cheap, not because you skipped it.

2. Acceptance criteria first, then tests, then code. Every unit of work starts from behavior the legacy system demonstrably has, written down as acceptance criteria traced to the legacy rules. Tests come from those criteria and are confirmed failing before a line of implementation exists. That ordering carries more weight than it appears to. The target is fixed before the code that has to hit it, so the test is measuring against the legacy contract rather than against whatever the implementation turned out to do. It’s the first line of defense; discipline 3 is the backstop.

3. Verification that can’t certify itself. Left to its own devices, an agent will cheerfully write a feature, write its test, and write the report attesting that the feature preserves legacy behavior. So the final check is made structurally independent: a separate pass, run in its own session, reading at the grain of individual behaviors, with the legacy source as its only oracle. It classifies what it finds — delivered, stubbed, missing, diverging, unverifiable — and it sweeps for the inverse failure too, hunting legacy behavior the spec never captured in the first place. A build lineage doesn’t get to grade its own homework. This approach prevents improper self-certification by cross-checking two static sources of truth rather than deferring to an agent's inference capabilities.

4. Converge, don’t port. Modernizing module by module leaves a seam; you can always tell where the migration started. Vibe modernization forward-engineers legacy behavior into the target as one coherent body, in the target’s own idioms, so an engineer reading it later can’t find the joins. This one needs human taste, and we come back to it below.

How it runs

Five steps, each ending in one reviewable artifact. The discipline that spans all of them: one step, one deliverable, one review point. Three of those review points are where human judgment concentrates. Don’t collapse the arc into a single heroic run.

One step, one deliverable, one review point
Step
What you get
1
Map the target
Studies the modern system it will build into, and maps where legacy behavior lands in it.
A navigable spec of the target
2
Map the legacy rulesHuman gate
Inventories every rule the legacy system enforces, each traced to source.
The contract — source-verified
3
Plan the work
Turns the contract into developer-ready tickets and a test strategy.
A backlog that doesn’t drift
4
Build itHuman gate
Gap analysis, then failing tests, then code to green — in the target only.
Tested code in the target’s own style
5
Prove it matchesHuman gate
Behavioral equivalence, then a separate conformance audit against legacy source.
Evidence old and new behave alike
Legacy sourceEvery claim, at every step, anchored to the line of code it came from.
The arc runs the same whether the target already exists or you design it first — only the front of the sequence changes.

Under the hood, each of those steps is a named piece of machinery rather than a vibe. Steps 1 and 2 build two intelligence stores — one over the legacy estate, one over the target — so the agent reasons across both at once instead of guessing at either. Step 4 opens every ticket with a dual-store gap analysis: what the target already has, what the legacy requires, what has to change, written down and approved before any code exists. A Context Inventory runs underneath the whole arc, recording each decision against the source anchor behind it. And step 5’s conformance audit reads at atom grain — individual behaviors, not modules — with the legacy source as its only oracle. The full mechanics live in our modernization playbooks.

If your target architecture doesn’t exist yet, the only thing that changes is the front of the arc: you design the target first — strategy selection, architecture decisions, the usual — and then everything downstream runs identically. The grounding, the convergence, the two-check verification don’t care whether the target was designed yesterday or a decade ago.

The deliverable is the code plus the evidence

A modernization that hands over only code has proven nothing durable. The real deliverable is the code and the trail that shows it’s correct — which is the part a bare agent swarm can’t give you:

  • A gap report per unit of work — what changed, what it touched, and why
  • Test-first code — written against criteria that existed before the implementation did
  • A behavioral equivalence report — every legacy behavior classified and traced: preserved, modified, deliberately discarded, or missing
  • An independent conformance audit — the separate check against the original system
  • A decision log — a running ledger tying every choice back to the source anchor behind it

A unit of work isn’t done until its artifacts exist. Build fast to hit a demo if you have to, but the artifacts are the line between a modernization and a plausible-looking rewrite.

This isn’t theoretical

We didn’t invent vibe modernization on a whiteboard and go looking for somewhere to try it. It’s the name we gave to what we’d already done.

A systems-integrator partner brought CoreStory into a global logistics enterprise to modernize part of its air-cargo customs software: decades-old COBOL programs, forward-engineered into a Java/Spring target the customer already ran. Two facts about that situation are why the aggressive-but-provable posture fit rather than being imposed.

First, the modern target already existed. There was nothing to design, so the work was to converge into a standing system — reverse-engineer both sides and merge the legacy behavior in. Second, customs filing is heavily regulated, which made audit-grade behavioral parity a hard requirement rather than a nice-to-have. Speed alone would have been useless. Fidelity alone would have been too slow. The problem called for both.

It shipped. Handover delivered, and it landed well with the customer’s team.

Measured on the first field application
Faster than a manual rebuild
~7×
The same work by hand runs ~14 person-months. Here it took ~2 — roughly 1,900 engineer-hours saved.
Basis — estimate, see method below
Both use cases delivered in
~14 days
Two mainframe programs rebuilt in Java, working and demoed — the first in about 48 hours, by a team of two.
Measured — ingestion to both demoed
Legacy rules accounted for
100%
All 61 behaviors the legacy system enforces, reproduced and independently verified against it. Zero missing, all of it traceable.
Measured — equivalence report + conformance audit
Automated tests · green
460+
The new code is checked against the old, not assumed — green on the delivery build.
Measured — both use cases
How the ~7× is derived. Manual effort is an estimate, not a measured baseline: published COBOL-to-Java modernization productivity rates (approximately four developers for four to six months per 10K lines of code), normalized to this engagement’s ~6–7K-line scope. Actual effort is the tracked engineering effort of approximately two person-months. No customer-specific baseline was available to compare against.

When to reach for it, and when not to

The entry test is short. Use vibe modernization when both of these hold:

  • Behavioral parity is the default. The value is in preserving decades of accreted behavior, not re-imagining the product. If the goal is a redesign, this isn’t the method (although CoreStory supports spec-driven development as well)— this is modernization.
  • You want agent velocity without giving up the audit trail. If nobody will ever ask you to prove equivalence, you don’t need this much apparatus.

Notice what isn’t on the list: whether the target already exists. That changes the shape of the first step and nothing else.

When the target is already running, though, you get something worth naming: an executable system at both ends. Parity stops being a question you answer at the end and becomes one you check continuously — the legacy behaves a certain way, the target either matches or it doesn’t, and you can show that from the first unit of work instead of after months of module-by-module porting. The analysis still happens — the legacy rules still have to be inventoried and confirmed — it just stops being the thing that delays visible progress.

Why it matters more than “a faster agent”

Today, capable coding agents are everywhere. “We’ll make your AI faster” is not a position anyone can hold for long. Speed is commoditizing in real time.

What isn’t commoditizing is proof. The audit-trailed deliverable set — grounded in source, independently checked, traceable decision by decision — is the part you can only produce with a grounded, persistent understanding of the system underneath it. That’s the difference between an agent that generates plausible code and a system that can tell you, with receipts, that the behavior your business depends on survived the rewrite.

And “vibe coding,” for anything mission-critical, is currently a dirty word. We think it shouldn’t be, provided you ground it. Vibe coding is an effective loop for simple tasks, so it's a good foundation to start from when considering how to enable agents to accomplish complex tasks.

Risks of vibe modernization

Any method that claims to be without risks or downsides is insufficiently tested. There are a few caveats to consider with vibe modernization.

For one, the human review gates aren’t rubber stamps. The speed of implementation makes it tempting to wave through the plan approval and the expert validation of the business rules. Don’t. Those two moments are where the method’s judgment actually lives. You can also introduce extra review cycles as needed; the method is biased toward speed, but you can choose to go slower if it makes adoption easier.

Convergence takes taste. Ensuring that generated code conforms to the target architecture is not a task that can be fully delegated to AI. It’s a human call about whether new code genuinely matches the target’s idioms, and it needs real review attention budgeted for it.

The verifier has to be independent for real. If the session that wrote the code also runs the equivalence report and the audit, you’ve rebuilt the exact circularity the method exists to break. Separate sessions, and ideally separate agents or humans at the helm.

Scope drift is the failure mode. A modernization becomes a rewrite one “while we’re in here” at a time. Watch the ratio of deliberately-changed and net-new behavior against preserved behavior. When it climbs too high, you’ve wandered off-method.

The short version

Vibe modernization is agent-led, human-gated rebuilding of legacy systems at agent speed, grounded so it survives an audit. The agent builds; people decide at a few moments that matter; the source code — not the model, not the intelligence layer, not the test suite the agent wrote — decides what’s true. What you hand over is working code plus the evidence that the behavior came with it.

Velocity and the audit trail, together. On serious software, you don’t get to pick one.

Modernizing something that can’t afford to behave differently afterward? Talk to an expert about running your modernization with the proof built in.

CoreStory
CoreStory Editorial Team