Plan the evolution
It is not simple to break an application that has millions of lines of code, especially if the code has complex dependencies. How do we break it? More importantly, where do we start, and how do we approach this problem?
Evolutionary approach
The best way to address this problem is to establish a transition plan, and gradually migrate the functions as microservices. At every step, a microservice will be created outside of the monolithic application, and traffic will be diverted to the new service as shown in the following diagram:
In order to run this migration successfully, a number of key questions need to be answered from the transition point of view:
Identification of microservices' boundaries
Prioritizing microservices for migration
Handling data synchronization during the transition phase
Handling user interface integration, working with old and new user interfaces
Handling of reference data in the new system
Testing strategy to ensure the business capabilities are intact...