Microservices are often sold as the solution to all scaling problems. In reality, they add significant operational complexity and only make sense in specific contexts.
Signs you don't need microservices yet
If your team has fewer than 10 developers, the product is still finding product-market fit, or you don't have concrete scaling problems, a modular monolith is almost always the right choice.
Premature optimization is expensive: more complex deploys, distributed debugging, and infrastructure overhead.
When migration makes sense
Consider microservices when different teams need independent deploys, components have very different scaling requirements, or business domains are clearly separated.
Example: a marketplace can separate payments, notifications, and product catalog when each scales independently.
How to migrate safely
Use the strangler fig pattern: extract services gradually, starting with the most isolated domain. Keep the monolith functional during the transition.
Invest in observability (logs, tracing, metrics) before distributing the system.