Gradually migrate a legacy system to new applications and services. As functionality moves from the legacy system to the new system, the new system will eventually "strangle" the old one.
Problem
Everything changes. The software comes and goes.
How to replace complex solution? Completly replacing in the single swipe, is often unrealistic and costly. In many cases, we need a gradual migration to the new system, while keeping the old system for old non-migrated functionalities.
Solution
Create a new solution and start moving functionality of the legacy system to the new system. Create a facade that intercepts requests and redirect them either to the new system or the legacy. Existing features can be moved gradually, without dependant systems knowing that the change is going on.
The biggest advantage of this pattern is minimizing the risk (you can always go back to the old system (at least in the beginning)) and spreading development over time. You can even choose to implement new functionality in the new system in parallel to moving old features. In the end, when everything is moved to the new system, the old one will become "strangled" and unnecessary.
Considerations
- How are you going to handle the data?
- What are you going to do with the facade?