Legacy migration projects can be hard. They require a very high level technical team and expertise on this kind of challenge to succeed. Along the years we've come to learn a few useful principles and techniques that could help succeed:
Parallel run
Keeping the old system running and providing value whilst the new platform is being built from the ground up is essential to prevent an operational stop and reduce the risk of a Big Bang.
Identify inputs/outputs
Rather than focusing on trying to understand the entire old system (which could very time-consuming and very hard to achieve), try to understand the data inputs and the plugs where you need to send the data. This will help you be way more efficient as you will save a lot of time.
Leverage an insider
In combination with the previous tip, this is a really important tactical aspect of a legacy migration: you will need someone who knows the old system business rules inside out. This will save you a lot of time and allow you to be ultra-focused on delivery.
Microservices for the win!
Divide and conquer. By using microservices the right way you will be able to tackle different problems with different approaches, use different data models, de-risk performance issues, improve individual scalability, work in parallel, build, test and deploy much faster and provide value much quicker, as you will be able to release partial features of your system in isolation.
Operational infrastructure goes first
Adopt DevOps as your default methodology to gain a lot of efficiencies. First focus on building a Continuous Integration/Continuous Deployment platform as enabler for the development team. Create monitoring, alerts and a good logging system to keep the dev team accountable for their work and to be able to fix potential issues faster and in a more proactive way. Deploy your microservices in containers to improve traceability and to guarantee reliability and portability. As a plus, use cloud providers as much as you possibly can to leverage great services for low cost (compared to running your own infra, maintaining your own DBs, securing your environments….).
If you can think of any more principles or techniques to get legacy migration projects right, please share!