Opening Scenario
Your checkout service calls a payment API. The payment API starts responding slowly — not failing, just taking 30 seconds instead of 200ms. Your checkout service is waiting. Meanwhile, more checkout requests arrive. Each one opens a connection and waits. Within 2 minutes, all your threads are blocked waiting on the payment API. The checkout page stops loading entirely. One slow dependency took down your whole service.
Question Progression
1. Why does a slow dependency hurt you more than a failed one?
Question: Intuitively, a dependency that's completely down (refusing connections, returning 500) seems worse than one that's slow. But the scenario above shows the opposite. Why?
Reasoning: When a dependency fails fast — connection refused, immediate 500 — your service gets the error immediately. It takes a thread for perhaps 5ms and then that thread is free. When a dependency hangs, your thread is blocked for the full duration of…
In the full tutorial
- Closing: When to Reach for This