Microservices Did Not Remove Complexity. They Moved It.
Microservices are often sold as simplification.
Small services. Clear ownership. Independent deployments. Better scaling.
That can be true.
But microservices do not remove complexity. They move it from code boundaries into system boundaries.
Instead of one process call, you now have network calls. Instead of one transaction, you may have eventual consistency. Instead of one deployment, you may have many. Instead of one log file, you may have distributed tracing.
This is not a criticism of microservices. It is a warning against naive adoption.
Microservices work best when the organisation has strong DevOps, observability, automated testing, deployment pipelines, service ownership, and domain discipline.
Without that, the architecture becomes a distributed monolith: all the pain of microservices, none of the independence.
The better path is usually evolutionary.
Start with clear modules. Identify real scaling or ownership pressure. Extract services when the boundary earns its independence.
Do not split because a diagram looks modern.
Split because the business, team, and operational model can support the split.