First, developers must deal with the additional complexity of creating a distributed system.
Implementing use cases that span multiple services without using distributed transactions is difficult.
The microservice architecture also introduces significant operational complexity. There are many more moving parts – multiple instances of different types of service – that must be managed in production.