For years, microservices have been sold as the answer to all problems: scale faster, deploy faster, be "like the big tech companies". The reality is simple: a bad monolith becomes a bad network of microservices, only now with more latency, more complexity, and more failure points.
Microservices are not a trend—they are a model for organizing systems and teams. They work well when:
- There are clear and well-defined domain boundaries.
- Teams have real autonomy to develop and deploy.
- There is serious observability: metrics, traces, logs, and alerts.
- The platform supports automation, testing, and frequent deployments.
What Almost No One Tells You
Moving from a monolith to microservices is not just "splitting the code". It means redesigning:
- Dependencies: who talks to whom and why.
- Data: who owns what and how it's shared.
- Contracts: APIs, events, and business rules.
- Error handling: timeouts, retries, graceful degradation.
When that foundation doesn't exist, the classic symptoms appear:
- Dozens of small services that nobody understands.
- Incidents that bounce between teams with no clear owner.
- "Independent" deploys that break other services.
- More time firefighting than building product.
Where to Really Start?
Instead of asking "When do we migrate to microservices?", the right question is: "Do we understand our domain well enough to split it without breaking it?".
Sometimes the best next step is not microservices, but a well-designed, modular, and observable monolith. Modern architecture is not a label; it's the ability to evolve the platform without destroying it in the process.
In my talks and content, I explain microservices from practice: when they help, when they destroy teams, and what models to use for making decisions without getting caught up in the hype.