# `Zizq.Backoff`
[🔗](https://github.com/zizq-labs/zizq-elixir/blob/v0.8.0/lib/zizq/backoff.ex#L4)

Per-job retry backoff policy.

The server computes each retry delay as:

    delay = base + (attempts ** exponent) * 1000 + attempts * rand(0..jitter)

`:base` and `:jitter` are **milliseconds**; `:exponent` is
dimensionless. All three are required together — the server has no
partial defaults.

    Zizq.Backoff.new!(base: :timer.seconds(15), exponent: 4.0, jitter: :timer.seconds(30))

Omit the policy entirely to inherit the server's own default, which
then tracks server configuration rather than freezing a value into
your code.

# `t`

```elixir
@type t() :: %Zizq.Backoff{
  base: non_neg_integer(),
  exponent: float(),
  jitter: non_neg_integer()
}
```

# `new!`

```elixir
@spec new!(t() | keyword() | map()) :: t()
```

Build a policy from a keyword list or map. Raises on missing or invalid keys.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
