Skip to main content

Enterprise Modernization Without the Big Bang

Baalvion Strategic Brief • June 11, 2026

Strategic Intelligence by Baalvion Engineering

Registry Date: June 11, 2026

8 min read

Enterprise Modernization Without the Big Bang

The most expensive line item in enterprise software is rarely a license or a cloud bill. It is the rewrite that never shipped. Across 198 markets and 180+ jurisdictions, Baalvion has migrated trade, settlement, and compliance workloads off systems that predate the teams now responsible for them. The pattern we trust is not a heroic cutover. It is a sequence of small, reversible moves that drains risk out of the estate while the business keeps running.

Why the big bang keeps failing

A big-bang rewrite asks an organization to freeze a moving target, reproduce years of accreted business logic, and switch over in one weekend. Every assumption in that plan is fragile. The legacy system is still receiving feature requests, so the rewrite is chasing a spec that changes underneath it. The undocumented edge cases — the tax rounding rule for one jurisdiction, the partner who sends fixed-width files at 02:00 — only surface during the cutover, when there is no time to absorb them.

The failure mode is structural, not a matter of effort. Because value lands only at the end, the project carries maximum risk for its entire duration and produces nothing demonstrable until the final switch. Sponsors lose patience, scope gets cut to hit a date, and the replacement ships missing exactly the obscure behaviors that made the original system load-bearing. Incremental modernization inverts this: it delivers value continuously and keeps a working rollback path at every step. That discipline is what lets a platform like the Baalvion Operating System evolve without ever going dark for the businesses that depend on it.

The strangler fig pattern

Martin Fowler named the strangler fig after the vine that grows around a host tree, gradually taking over its structure until the original can be removed with nothing collapsing. Applied to software, you place a routing facade in front of the legacy system and migrate functionality one capability at a time. New requests for a migrated capability route to the new service; everything else still flows to the legacy estate. The old system shrinks slice by slice instead of being switched off in a single irreversible event.

Concretely, the facade is usually an API gateway or a reverse proxy with path- and header-based routing. At Baalvion we route on capability boundaries — orders, settlement, customs, identity — rather than on technical layers, because a capability is something the business recognizes and can sign off on. The sequence of moves for each slice is deliberate:

  1. Insert the facade in front of the legacy system with every route passing straight through, so the proxy is provably transparent before it does any real work.
  2. Build the new service for one capability behind the facade and run it in shadow mode — taking a copy of live traffic and comparing its output against the legacy response without serving customers.
  3. Flip a small percentage of real traffic to the new service behind a feature flag, watching error rates, latency, and business-level reconciliation.
  4. Ramp to 100 percent once the new path is proven, then decommission the legacy code for that capability and delete its routes from the facade.

Each slice is independently shippable and independently reversible. If reconciliation drifts during the ramp, you turn the flag back and you are exactly where you started — no emergency restore, no war room. This is how we cut over order execution to a new money-truth service while the legacy order path stayed live: the server-computed total ran in shadow against the old one until the numbers matched to the cent, and only then did production traffic move. The same approach underpins our case study on unifying global trade operations.

The anti-corruption layer

Strangling a legacy system is only safe if the new code does not inherit the old system's mental model. Legacy schemas encode assumptions — a customer is also a billing account, a shipment status is a free-text string, a currency is implied by which table a row lives in — that you do not want propagating into a clean domain. The anti-corruption layer (ACL), a tactical pattern from Eric Evans's domain-driven design, is the translation membrane that keeps them out.

An ACL sits between the new bounded context and the legacy one and translates in both directions: legacy representations into your domain model on the way in, and your domain events back into whatever the legacy system expects on the way out. It is the only place in the new codebase that is allowed to know the legacy data is messy. Everywhere downstream works with a clean, intentional model. The discipline matters because the alternative — letting legacy concepts leak across the boundary — quietly recreates the very coupling you are paying to escape.

In practice an ACL is a small set of adapters and translators, often paired with an event outbox so that writes to the new system and notifications to the legacy one are transactionally consistent. We lean on this heavily in the Governance & Compliance Suite, where a modern KYC/AML model has to interoperate with jurisdiction-specific reporting formats that we cannot change. The ACL absorbs that ugliness so the compliance domain stays expressive and auditable, and so a future replacement of the downstream reporting system touches one translation layer rather than the whole platform.

Managing risk through the migration

Incremental modernization replaces one large bet with many small ones, but small bets still need governance. The first control is sequencing. You do not start with the highest-value capability; you start with one that is meaningful enough to prove the approach yet contained enough that a rollback is cheap. The goal of slice one is to validate the facade, the deployment pipeline, the observability, and the team's confidence — not to land the crown jewels.

The second control is reconciliation. For any capability that touches money, inventory, or regulatory state, shadow mode is non-negotiable, and the comparison must be at the level of business outcomes, not HTTP status codes. A migrated settlement path that returns 200 while computing a balance that diverges by a fraction of a cent is a worse failure than one that returns 500, because it is silent. We hold migrations to exact reconciliation — every figure in the new path must match the legacy figure to the smallest unit before any real traffic moves — and we keep the reconciliation job running well past cutover.

  • Feature flags so any slice can be reverted in seconds without a deploy, and so blast radius is a configuration choice rather than a code path.
  • Shadow traffic and outcome-level reconciliation before any customer sees the new path, with alerting on divergence rather than only on errors.
  • Per-tenant rollout in multi-tenant estates, so a problem is contained to a cohort instead of the whole customer base.
  • Full audit trails and append-only event logs, so every cutover decision is traceable after the fact — a baseline expectation under SOC 2 Type II and ISO 27001.
  • A standing decommission step in the plan, because a strangler migration that never deletes the old code just adds a system instead of replacing one.

The third control is honesty about the seam. While a capability is split across old and new, you are running both, and that costs money, observability surface, and cognitive load. This is real, and it is the price of safety — but it is also why decommissioning is a first-class task, not a someday cleanup. The seam is meant to be temporary. A migration that leaves it open indefinitely has converted a legacy problem into a distributed legacy problem, which is worse.

Where Baalvion applies this

BOS is organized into five layers — Infrastructure, Intelligence, Governance, Commerce, and Finance — and the boundaries between them are exactly the seams a strangler approach exploits. When we modernize a slice, the layer boundary is already a natural facade and the ACL already has a place to live. Modernization stops being a special project and becomes the ordinary way the platform evolves: ship a capability behind a flag, reconcile it against what it replaces, ramp it, and delete what it supersedes.

For organizations carrying a legacy estate, the takeaway is narrow and practical. Do not freeze the business to rewrite it. Put a facade in front, protect the new code with an anti-corruption layer, migrate one provable slice at a time, and reconcile relentlessly before you move traffic. It is slower to start and far faster to finish, because nothing it ships has to be unwound. If you want to see how we put these patterns into production, our enterprise software services and technology consulting practice are built around exactly this discipline — and the broader story sits in what we do.

Frequently Asked Questions

Is the strangler fig pattern only useful for moving from a monolith to microservices?+

No. It is a migration strategy, not an architecture target. You can use it to move a monolith to a better-structured monolith, to swap one vendor system for another, or to lift a workload to the cloud. The defining idea is incremental, capability-by-capability replacement behind a routing facade — the destination architecture is a separate decision.

What is the difference between an anti-corruption layer and a regular API adapter?+

An adapter typically just changes protocol or format. An anti-corruption layer actively translates between two different domain models so that the new system's design is never contaminated by the legacy system's assumptions. It is a defensive boundary with a clear purpose: keep the legacy mental model from leaking into clean code.

How do you avoid the cost of running two systems during the migration?+

You do not avoid it entirely — running both during a slice is the price of a safe rollback. You minimize the duration by migrating thin, well-bounded slices and by making decommissioning of the legacy path an explicit, scheduled step rather than optional cleanup, so the overlap window for each capability stays short.

When is a big-bang rewrite actually the right call?+

Rarely, but it can be justified when the legacy system is small, well understood, and cannot be meaningfully split — or when the underlying platform is being shut down on a hard external deadline. Even then, shadow running the replacement against live traffic before cutover dramatically reduces the risk.

How do you decide which capability to migrate first?+

Pick a slice that is significant enough to prove the approach and exercise the full pipeline, but contained enough that reverting it is cheap. The objective of the first slice is to validate the facade, deployment, observability, and reconciliation — not to migrate the highest-value capability while the process is still unproven.

How does Baalvion ensure data correctness during a financial cutover?+

Any capability touching money runs in shadow mode and is reconciled at the level of business outcomes, not HTTP status codes. New and legacy figures must match to the smallest currency unit before real traffic moves, and the reconciliation job keeps running after cutover so silent divergence is caught immediately.