Every network call will eventually be slow, fail, or succeed twice. An API that ignores those three facts works in the demo and pages you at 2am in production.
Timeouts first: no call should be allowed to hang forever. Set them deliberately per dependency, and fail fast to a fallback rather than letting a slow upstream exhaust your connection pool and take everything down with it.
Retries with backoff and jitter recover from transient blips — but only for operations that are safe to repeat. Pair them with idempotency keys so a retried 'create payment' doesn't charge a customer twice. Idempotency is what makes retries safe instead of dangerous.
Add a circuit breaker around chronically failing dependencies so you stop hammering them, and surface it all in metrics. These habits are unglamorous, cheap to add early, and the difference between an integration that degrades gracefully and one that falls over.