A network call that fails once may succeed a moment later. A connection can land on an instance that is restarting, a packet can be lost during brief congestion, or a dependency can reject work while it sheds a temporary burst.
Trying again can hide these short-lived failures from the user. It can also duplicate an operation, increase latency, and send more traffic to a service that is already overloaded.
A retry is therefore not generic error handling. It is a deliberate decision that says:
If any of those statements is false, another attempt can make the outcome worse.
Good retry behavior depends on four controls:
This chapter develops those controls into a practical retry policy.