I can say that at least one extremely large US company successfully retired their transaction processing mainframe system using exactly this pattern.
It wasn't simple, but running old+new in parallel on the same production data stream (then verifying behavior against each other) is a surprisingly powerful approach.
Most critically, because it trades temporary maintenance and infra costs in exchange for decreasing risk and flexibility around cutover date.
Kind of like black box TDD, which helps the new system team be much more aggressive with their delivery timelines.
It wasn't simple, but running old+new in parallel on the same production data stream (then verifying behavior against each other) is a surprisingly powerful approach.
Most critically, because it trades temporary maintenance and infra costs in exchange for decreasing risk and flexibility around cutover date.
Kind of like black box TDD, which helps the new system team be much more aggressive with their delivery timelines.