You wrote a retry loop. It catches exceptions, waits with exponential backoff, and tries again. Clean, simple, elegant.
But have you actually tested it with real LLM API failures?
I tracked over 6,000 real API calls across production workloads using OpenAI, Anthropic, and Google models. The result? A plain retry loop achieves 0% recovery for the failures that actually matter. Circuit breaker? Also 0% .
This isn't a clickbait headline. It's a structural problem. Let me show you why — and what actually works.
The 8 Failure Types That Kill Your Retry Loop
Not all API failures are created equal. Here are the 8 types I encountered in production:
1. Rate Limit (429) — Too many requests. Retrying makes it worse.
2. Model Deprecated — The model no longer exists. No retries help.
3. Invalid API Key (401/403) — Wrong or expired key. Same error every time.
4. Context Overflow (400) — Prompt too long. Same rejection.
5. Timeout Cascade — Slow call cascades across pipeline.
6.…