---
slug: "ExponentialBackoff"
name: "ExponentialBackoff"
type: "Primitives"
layer: "Infrastructure"
ref: "ExponentialBackoff#f5e5"
sema_id: "sema:ExponentialBackoff#mh:SHA-256:f5e5ff69408a272184da86cf5698f6675e9dfe2aa47917616a695e117602b828"
tags: ["Infrastructure","Primitives"]
updated: 2026-11-11
mindscape: "bootstrap"
index_url: https://mindscape.pages.dev/bootstrap/index.json
url: https://mindscape.pages.dev/bootstrap/ExponentialBackoff/
related: ["Backoff","Retry"]
---

# ExponentialBackoff

Geometrically increasing capped retry delay

Layer: Infrastructure · Category: Primitives

## Mechanism

A [Backoff](https://mindscape.pages.dev/bootstrap/Backoff.md) delay policy whose unjittered delay grows geometrically across consecutive unsuccessful attempts: base_delay * multiplier^attempt_index. A configurable jitter factor may perturb the candidate delay to decorrelate concurrent attempts, after which the scheduled delay is clamped to max_delay. The caller defines retry eligibility, retry budget, and when the attempt sequence resets.

## Invariants

- Scheduled delay is greater than zero and does not exceed max_delay.
- Before jitter, delay is non-decreasing with attempt_index until max_delay is reached.

## Failure modes

- Synchronized retries when jitter is zero or correlated across callers.
- Excessive recovery delay when the multiplier or cap is too large.
- Retry amplification when callers use the delay policy without a retry budget.

## Parameters

- `base_delay` (Duration, > 0): Delay before the first subsequent attempt
- `multiplier` (Float, (1, unbounded)): Geometric growth factor applied per unsuccessful attempt
- `max_delay` (Duration, [base_delay, unbounded)): Upper bound applied after optional jitter
- `jitter_factor` (Float, [0.0, 1.0]): Proportional randomization of the candidate delay

## Builds on

- [Backoff](https://mindscape.pages.dev/bootstrap/Backoff.md) (Infrastructure; References)
- [Backoff](https://mindscape.pages.dev/bootstrap/Backoff.md) (Infrastructure; Extends)

## Used by

- [Retry](https://mindscape.pages.dev/bootstrap/Retry.md) (Mind; Composes with)

## Identity

- Sema ID: `sema:ExponentialBackoff#mh:SHA-256:f5e5ff69408a272184da86cf5698f6675e9dfe2aa47917616a695e117602b828`
- Ref: `ExponentialBackoff#f5e5`
- Supersedes:
  - `sema:ExponentialBackoff#mh:SHA-256:a543a38722a0dfe96cf4bc7ccdaa615195ac058b5029651dc26d5cce1cd43128`

## Links

- [Pattern page](https://mindscape.pages.dev/bootstrap/ExponentialBackoff/)
- [View in the interactive graph](https://mindscape.pages.dev/bootstrap/#ExponentialBackoff)
- [JSON](https://mindscape.pages.dev/bootstrap/ExponentialBackoff.json)
- [Index of all patterns](https://mindscape.pages.dev/bootstrap/index.json)
