SG
← all patterns

PAT-01 · Architecture pattern

Legacy core bridge

Modernise the experience without touching the system of record.

What it is

A thin middleware layer that lets a modern interface talk to an old core system over a clean, typed API — without rewriting the core. The legacy system stays the source of truth; the bridge translates, protects, and isolates.

When to use it

When the core works but is hard to change — decades of edge cases, regulatory rules, and undocumented integrations — and the business needs a modern, real-time experience on top.

Reach for a bridge when the cost or risk of replacing the core outweighs the friction of living with it. Don't, if the core genuinely can't meet a hard requirement like security, compliance, or a cost ceiling — then no seam will save you.

System shape

A modern client enters a middleware bridge. Reads are served instantly from a read-model cache; writes go through a queue with back-pressure and an idempotent reconcile step to the legacy core, which stays the unchanged system of record and projects its state back to the read model.readqueued writemodern clientbrowser · appBRIDGEAPIgatewayqueueback-pressureread modelcachereconcileidempotentlegacy coresystem of recordunchangedreadswritesprojects state
PAT-01 · system shape

The bridge does three jobs: translate between the old data model and the one the new app wants; protect the core with caching, batching, and back-pressure; and isolate change, so the front end ships weekly while the core moves on its own slow, careful clock.

Failure modes

  • Treating the bridge as temporary — it becomes load-bearing; design it to last.
  • Letting the front end feel the core's latency, with no read model — slow, fragile UX.
  • Writing straight through to the core, synchronously — outages when the core is busy.
  • Queued writes with no reconciliation — silent data drift between the bridge and the core.

How we build it

We map the core's real contracts and failure modes first, then build the thinnest bridge that translates, protects, and isolates.

Reads go through a projected read model so browsing feels instant; writes are queued, made idempotent, and reconciled back to the core. The core is never modified.

Next

Have a system like this to build?