design-pattern – What is an exponential backoff?


  • What is it?
  • What is it for?
  • In which situations can you use it?
  • Is there just one strategy or several? ( Example: Fibonacci backoff)


It is a strategy where each attempt or iteration of a procedure is followed by an increasingly larger interval (optionally up to a fixed limit) in case of failure or need for flow adjustment. Feedback is a characteristic (whether it comes from the previous iteration itself, or from measurements made during the procedure)

It usually serves to avoid network congestion, overloads or unnecessary consumption of resources, after all, if there was a failure more than once in a given interval, it usually doesn't help to keep insisting in the same way.

It should be used in every situation where repeated uncontrolled actions generate resource consumption or inefficiency.

Classic is the Ethernet protocol itself, used in virtually any modern data network.

Another scenario is, for example, a UDP connection, where you limit the packets until they are compatible with your outgoing bandwidth and reception on the other side (it's still a "failure" scenario, but it's a natural part of the adjustment protocol) .

One more example scenario (less common use of the term, but same principle) is the consumption of an API from a server, in case of failure or busy system. If two consecutive requests did not reach the goal, a greater interval between the next ones is tried.

There are more common strategies, such as simply multiplying the previous interval by a factor (after all, it is exponential) but nothing prevents you from creating your own.

Also, when it comes to Ethernet, these two algorithms are common:

  • Binary exponential backoff

  • truncated binary exponential backoff

(This second is almost the same as the previous one, but with that maximum limit that I commented on the interval)

Related reading:

Exponential Backoff (en)
Network Congestion Avoidance (en)
control theory

Scroll to Top