Legacy system modernization,one subsystem at a time.

AI agents migrate the code, and parity tests prove it matches the old system, which keeps running.

We move your legacy system one bounded subsystem at a time on Steer by Pento, our own platform. Each piece is specced, migrated by AI agents in isolated sandboxes and checked against the old system's output before any traffic moves. A Pento team of forward deployed engineers works through it piece by piece, so you never bet the year on one rewrite.
Illustrative Steer migration off a 2018 monolith. Five legacy subsystems (orders, pricing, invoicing, reports and auth) each become a goal. Pricing, then invoicing, moves through in progress, review, merged and verified, with parity tests matching the legacy output case for case. Each cut-over changes production data, so it waits for a person; once approved, that subsystem's traffic switches to the new code. Three of five subsystems end up moved while the legacy system keeps serving the rest.

Legacy keeps serving the rest

Each subsystem is its own goal with acceptance criteria. The legacy system keeps serving everything that hasn't moved, so there is never one weekend where everything switches at once.

Old and new outputs compared

Parity tests run the same inputs through the legacy code and the new code and compare the output. Traffic moves only when they match and the review agrees.

A team, or a price per piece

A forward deployed team fits a whole migration, and a subsystem with a clear edge can also be a fixed-price project on its own. The free audit maps the subsystems and the order to move them.

What is legacy system modernization?

Legacy system modernization is moving software that still runs the business off an outdated stack, architecture or vendor without stopping the business while it happens. On Steer, Pento does it incrementally: the system is split into subsystems, each one becomes goals with acceptance criteria that include parity with the legacy behavior, AI agents migrate the code in isolated sandboxes, and the new code takes over a subsystem's traffic only after the evidence shows it behaves like the old one.
A migration, with the work split up
  1. 01Audit
    • YouWalk us through the system and its edge cases
    • Forward deployed engineersMap the subsystems, the seams and the order to move them
    • Steer + AI agentsWrite down rules that live only in someone's head
  2. 02Spec
    • YouPick the target stack, approve the plan
    • Forward deployed engineersSplit each subsystem into goals, parity included
    • Steer + AI agentsOrder the goals by what depends on what
  3. 03Migrate
    • Forward deployed engineersSteer the agents while they work
    • Steer + AI agentsMigrate the code in fresh, isolated sandboxes
  4. 04Prove
    • Forward deployed engineersJudge each pull request against the spec
    • Steer + AI agentsRun old and new code on the same inputs
    • Review + checksOutputs must match and the review must agree
  5. 05Cut over
    • YouApprove changes to production data
    • Forward deployed engineersMove traffic one subsystem at a time
    • Review + checksMerge under the policy you set

The legacy system serves everything that hasn't moved, and the next subsystem runs the same loop.

Why migrations stall

Every legacy system has a rewrite quote nobody signed.

Rewrite quotes assume people type every line by hand, so they come back as one big number, one long timeline and a roadmap frozen until the end. What the old system really does usually lives with one or two people. Steer makes the unit of work one subsystem, with its own spec, its own parity tests and its own cut-over.
Scope

The big-bang rewrite

The usual quoteRewrite everything · one cut-over weekend · hope it holds
On SteerSubsystem by subsystem · legacy serves the rest · a cut-over per piece

A big-bang rewrite bets the business on one switch date. We move one bounded subsystem at a time behind a strangler pattern, so the old system keeps serving everything that hasn't moved and every switch is small enough to reason about.

See the evidence →
Timeline

The 18-month plan with a frozen roadmap

The usual quote18 months · feature freeze · one date at the very end
On SteerSubsystems ship one by one · roadmap keeps moving · first pieces in weeks

Your team keeps shipping features while we migrate. Each subsystem ships on its own and the first pieces ship in weeks, so progress shows up as subsystems moved, not as a percentage on a status deck.

See how we price →
Knowledge

The system only one person understands

The usual quoteTribal knowledge · undocumented rules · one person on call
On SteerRepo map in Context · rules written as criteria · tests that pin behavior

A discovery session maps the repository and its conventions into Steer's Context, and when a rule lives only in someone's head, Steer interviews them and writes it down. Parity tests then pin the old behavior, so the knowledge outlives the migration.

See spec-driven development →

✳ The audit is free. It maps the subsystems, the seams between them and the order to move them, and that map sets the size of the team or the price of a first subsystem.

How it runs on Steer

A migration you can watch, subsystem by subsystem.

The whole migration lives in one workspace your team can see: what has moved, what is in flight and the evidence for each piece.
  1. 01

    Discovery maps the old system

    A discovery session reads the repository, its conventions and its seams, and stores the map in the project's Context. Interviews with the people who know the edge cases fill in what the code doesn't say.

  2. 02

    Each subsystem becomes goals

    Every subsystem is split into goals with acceptance criteria, and one criterion is always parity: the same inputs through the legacy code and the new code give the same output.

  3. 03

    Agents migrate in sandboxes

    Claude Code agents do the migration on branches in your GitHub, each run in a fresh isolated sandbox that is thrown away afterwards, while our forward deployed engineers steer them.

  4. 04

    Review checks the parity evidence

    An independent review model and a forward deployed engineer judge each pull request against the spec. The evidence report shows the tests that ran, including the parity run, case by case.

  5. 05

    Cut-over follows the merge policy

    Traffic moves to the new code one subsystem at a time behind a strangler pattern. Changes that touch production data ask a person before they merge.

Illustrative Steer session. An agent reads the invoicing spec and the legacy code, migrates it, runs the parity tests until all 187 cases match the legacy output, passes review, and stops for a person to approve the cut-over.
What you get

What every migration on Steer includes

The same loop runs for every subsystem, so the fifth piece is as well evidenced as the first, and your team can see each one in the workspace.

Every legacy modernization engagement includes:

A free audit and a written migration map: subsystems, seams, risks and the order to move them
A written quote before any code exists: a monthly fee for the team, or a fixed price for a subsystem with a clear scope
Parity tests that compare the new code's output with the legacy system's, kept in your repository
An evidence report on every pull request: what changed, the tests that ran and the review verdict
A cut-over plan per subsystem, with production data changes approved by a person
Code in your GitHub from the first commit, and a seat in the workspace for your team
Stories

Migrations we've run without a big bang.

Client stories are anonymized, because their systems are theirs. The method is the same on every project, including our own.
Case studies →

2 weeks

A 2-week migration off a 2018 monolith

Subsystem by subsystem instead of a big-bang rewrite. Zero post-handoff incidents.

3 modules

Our own ERP, replaced module by module

We run Steer on ourselves first: invoicing, projects and allocation moved off our old system one bounded piece at a time, each specced, evidenced and approved before the next.

How we engage

Two ways to work with us. Neither is hourly.

Both start with the free audit, which sets the scope and the shape of the team.
Monthly · set by pod size

A team we build for you

Pento forms a pod of forward deployed engineers for your work, for example four engineers or whatever machine learning, software, DevOps and MLOps talent you need. They work with Steer alongside, and the fee depends on the pod's size.

Best for
An ongoing roadmap, a large project such as a migration, or scope that will change as you learn
Who carries the risk
Shared: you set the priorities, and we own how the work is built and the evidence that it's done
Talk to us about a team
One price · a clear scope

A fixed-price project

For integrations and smaller projects you can scope up front. After the free audit we write the scope with you as goals with acceptance criteria and fix the price. Evidence on every pull request shows when each goal is done.

Best for
Integrations and smaller projects with a clear scope. First projects ship in weeks
Who carries the risk
Pento: the price is fixed, so an overrun is ours to absorb
Get a fixed-price quote
How pricing works →
FAQ

Questions about legacy modernization

Not covered here? Bring the question to a discovery call. An engineer reads every request.

Book a discovery call

Contact us

Move your first subsystem on Steer

Tell us what the legacy system runs and what is stuck behind it. The audit is free: we map the subsystems and the order to move them, then quote a team for the migration or a fixed price for the first subsystem. An engineer reads every request.