---
id: "retry-without-backoff"
type: "rule"
severity: "warning"
url: "https://localhost:3000/catalogue/rules/retry-without-backoff"
---

# Retry queue without backoff

A queue in the retry role declares no backoff, so retries hammer the failing dependency.

| | |
|---|---|
| Severity | warning |
| Selects | every node of kind queue |
| Components in scope | 24 |

## Why

Retrying a transient failure at full speed turns one slow dependency into a retry storm. A retry queue backs off, preferably exponentially and with jitter.

## What it checks

It looks at every node of kind queue, and fires when:

- all of these hold:
  - the node's `role` is "retry"
  - any of these hold:
    - the node's `backoff` has no value
    - the node's `backoff` is "none"

Message template:

```
Retry queue '{{node.id}}' declares no backoff. Retries without backoff amplify the outage they are retrying through.
```

## Applies to

- [Queue](https://localhost:3000/catalogue/kinds/queue.md) `queue`

24 catalogue components fall under it.

## Tripped by

Reference designs whose broken twin names this rule in its header:

- [distributed-email](https://localhost:3000/d/zeema/distributed-email)
- [meta-threads](https://localhost:3000/d/zeema/meta-threads)
- [payment-system](https://localhost:3000/d/zeema/payment-system)
- [robinhood-trading](https://localhost:3000/d/zeema/robinhood-trading)

## Source (`rule` YAML, verbatim)

```yaml
# yaml-language-server: $schema=../schema/rule.schema.json
# Retrying a transient failure at full speed turns one slow dependency into a retry
# storm. A retry queue must back off, preferably exponentially with jitter.
# Tripped by: designs/payment-system.broken.yaml
schemaVersion: "1"
type: "rule"
id: "retry-without-backoff"
severity: "warning"
select:
  node:
    kind: "queue"
when:
  all:
    - prop: "role"
      equals: "retry"
    - any:
        - prop: "backoff"
          exists: false
        - prop: "backoff"
          equals: "none"
message: "Retry queue '{{node.id}}' declares no backoff. Retries without backoff amplify the outage they are retrying through."
```

Human page: https://localhost:3000/catalogue/rules/retry-without-backoff
