A failure queue is not a pile; it is a line, and lines have orderings. Serve it first-in-first-out and the freshest, most recoverable failures wait behind the stalest ones. Serve it by amount and small subscribers learn their place. The ordering a system chooses is a policy about whose save matters, whether or not anyone wrote the policy down.
The ordering that works is by recoverability — a triage, not a hierarchy of worth. Soft declines with a payday inside the window go early, while their fix is still cheap. Card updates in progress jump the line, because a customer mid-fix is a save asking to be completed. Hard declines leave the queue immediately; keeping them in line is not optimism, it is congestion. Every position in the queue is time, and time is the medium recoveries either happen in or don't.
Swipe Again sorts its work this way inside the recovery flow: the queue is re-read as new information lands, and no failure waits behind one that has already told us its ending. Billing is a queue. Run it like one.
Top comments (1)
Framing the ordering as a policy about whose save matters is exactly the right way to force the question. Most teams inherit FIFO by default and never notice it quietly privileges whoever failed longest ago, which is usually the least recoverable cohort. The card-update-in-progress jump is a nice touch since a customer mid-fix has already consented to the save, so the only thing left to optimize is timing. One operational wrinkle worth planning for: a queue re-read on every new signal needs idempotent re-enqueue or you can end up with the same failure holding two positions and a duplicate attempt on payday.