pattern

Strangler Facade

The routing layer in front of a legacy system that decides, per capability, whether a request goes to the old implementation or the new one.

modernizationroutingmigration

The facade is the component that makes incremental replacement possible, and its design determines whether the migration is smooth or painful.

What it needs to do: route by capability rather than by URL prefix where possible, so routing follows the domain rather than an accident of the legacy URL scheme; support percentage-based routing so a new implementation can take 1% before it takes everything; and log both paths so behaviour can be compared.

Two design decisions with long consequences. Where it sits — a reverse proxy is simplest and protocol-limited; an application-level gateway can route on payload content, which some legacy schemes require. And whether it is stateful — a facade that maintains session or translation state becomes a component that itself must be migrated later.

The two failure modes to plan against: the facade becoming a permanent part of the architecture because the last capabilities are never moved, and business logic accreting inside it because it is a convenient place to put things. Name the end date and the last route, and keep the facade to routing, translation and observation.