I'm working on the checkout flow. To test it locally, I theoretically need eight services running: auth, cart, inventory, payments, notifications, analytics, user profile, and the API gateway.

My laptop has 16GB of RAM. Docker Compose with all eight services uses 12GB. My IDE takes 2GB. Chrome takes another 2GB. You see the problem.

The "solution" everyone recommends is mocking. Run the service you're working on locally, mock everything else. Great in theory. In practice, I spent last Tuesday debugging why checkout wasn't working, only to discover my mock of the inventory service was returning the old API format. The real service had changed two weeks ago. My mock was stale.

We tried Telepresence—it lets you run one service locally while connecting to the rest in our staging environment. Works okay until someone else is testing their changes in staging and suddenly your local development environment is hitting their buggy code. We tried giving everyone their own staging environment. Our AWS bill tripled.

Right now, most of our team runs two or three services locally and points everything else at a shared dev environment. It works most of the time. But there's this constant tax: waiting for other people's broken code to get fixed before you can test your changes, keeping your local service definitions synchronized with production, dealing with VPN issues when connecting to remote services.

The promised land is local development that "just works" with microservices. We're not there yet. Anyone who tells you otherwise either has a much better DevOps team than us or isn't being honest.