| name | design-a-background-job |
| category | code |
| description | Design a durable background job with explicit payload, ownership, idempotency, retries, deadlines, progress, cancellation, and recovery. Use when work must continue outside an interactive request. |
design-a-background-job
Assume delivery can be delayed, duplicated, reordered, or interrupted.
When to use
- Use for asynchronous processing, imports, exports, notifications, media, billing, cleanup, or scheduled work.
- Do not place secrets or large mutable objects directly in a queue message.
Procedure
- Define job trigger, owner, payload contract, version, tenant, priority, deadline, and success outcome.
- Store durable references and immutable inputs needed to reproduce the work.
- Design idempotent steps, checkpoints, lease or visibility behavior, and duplicate handling.
- Classify transient, permanent, input, dependency, cancellation, and expired failures.
- Set bounded retries, backoff, jitter, timeout, dead-letter, and manual replay rules.
- Control concurrency, ordering, rate limits, resource use, and downstream backpressure.
- Expose safe status, progress, cancellation, result, logs, metrics, and alerts.
- Test crash points, duplicate delivery, worker loss, poison messages, and recovery.
Done
- A background-job specification records payload, version, idempotency, states, retries, deadlines, resources, and recovery
- Fault tests verify duplicate, crash, timeout, cancellation, dead-letter, replay, and observable outcome behavior