There are always tradeoffs when making an architectural migration. Although the benefits of microservices outweigh the challenges, it’s still important to consider expected challenges.
Utilizing microservices means more moving pieces in the system, all of which may be disconnected. This requires implementation of sophisticated strategies such as service discovery, orchestration, and other management necessities.
Services communicating with each other can bring about issues with latency, message formats, network reliability, and more. These must be accounted for through the use of APIs and well-designed networking configurations, so as to guarantee good performance and reliability.
Unit-testing each service independently is significantly easier with microservices. However, testing integration of multiple services requires additional orchestration that you could likely avoid with monolithic applications.