Each service is simpler now—our recommendation engine is 3,000 lines of Python instead of a module buried in a 200,000-line Rails app. You can understand it in an afternoon. But the system complexity exploded. Eight services, three message queues, two databases, Redis, Elasticsearch. The deployment diagram looks like a conspiracy theory.
Here's what surprised me: operational tasks got easier. Last month our analytics team wanted to rebuild the reporting database from scratch—different schema, switching from Postgres to ClickHouse. In the monolith days, that would've been a six-month project touching everything. With microservices? We built a new reporting service that subscribed to events from other services. Took three weeks. Deployed it without touching production.
The same pattern kept appearing. Adding new capabilities got easier. Changing existing integrations got harder. We wanted to add image processing for user uploads—spun up a new service in two days. But when we needed to change how the auth service validated tokens, we had to update six other services that depended on that contract.
I spent December 2024 trying to explain this trade-off to our CTO. The individual pieces are simpler. The interactions are more complex. You need better engineers who can think in systems, not just code. Worth it? For us, yes. But I understand why the skeptics exist. This isn't a free lunch.