A function call costs 0.001 milliseconds. A network call between two microservices in the same datacentre costs 1 to 5 ms. That is a factor of 1,000 to 5,000 before any business logic executes.
One rather wonders what one gets for that markup.
The Tax
Each hop pays its toll: DNS resolution, TCP handshake, TLS negotiation, JSON serialisation, transmission. Chain ten services together and you have added 30 ms of pure infrastructure latency to every request. At 10,000 requests per second, benchmarks show +140% p99 latency, +300% memory consumption, and +260% network I/O compared to the equivalent monolith.
Then the marshalling. Microservices spend 30 to 50% of CPU time converting objects to JSON, sending them across the wire, and parsing them back into objects at the other end. A monolith passes a pointer. Cost: precisely nothing.
The Fix for the Fix
The latency problem required a solution. The solution was a service mesh. Istio adds 2.5 ms at p90 per hop. Each sidecar proxy consumes 0.20 vCPU and 60 MB of RAM. Ten services, two proxies per hop: 4 vCPU and 1.2 GB of RAM for routing alone. Before your application does anything whatsoever.
One built a solution. The solution needed a solution. The solution's solution needed its own control plane. Marvellous engineering, that.
The Retreat
Amazon Prime Video moved their video monitoring from microservices to a monolith. Cost reduction: 90%. Segment ran 140 microservices. Three engineers spent most of their time keeping the system alive. They moved back. Testing went from one hour to milliseconds.
Istio itself quietly consolidated its own control plane from microservices back to a single binary. One does appreciate the irony.
Kelsey Hightower, quite possibly the most prominent Kubernetes advocate alive, in 2020: "Monoliths are the future because the problem people are trying to solve with microservices doesn't really line up with reality."
The Alternative
A compiled binary. Rust: 2 to 5 MB, statically linked, no runtime. Go: 10 to 15 MB, single binary. Even a lean PHP monolith behind nginx. One process, one deploy, no orchestrator. No dependency tree with 1,400 transitive packages, each one an attack vector.
Discord replaced Go microservices with Rust: tail latencies from 300 ms to single digits. Figma rewrote their multiplayer server: 10x capacity, same hardware. 37signals left AWS entirely: $7 million saved over five years.
Martin Fowler wrote "Monolith First" in 2015. A decade later, the industry is still learning the lesson the hard way. Some lessons require an invoice before they register.
The Point
Microservices solve a genuine problem: organisational scaling at thousands of engineers. Netflix, Amazon proper, the complexity is justified. The architecture exists because the team structure demands it, not because the software does.
For the other 95%, the question is not which orchestrator. It is whether you need one at all. The reduction is so drastic it sounds utopian to those who have only ever seen the distributed stack.
Fewer moving parts. Not more.