Member-only story
Stop building Background Job systems in Go — You probably dont need one
When simple background tasks turn into unnecessary infrastructure
Often a times — it starts innocently.
A signup handler needs to send a welcome email, and you don’t want the HTTP response waiting on SMTP. Someone says, “we need a job queue.”
Two sprints later you have a jobs package, a retry policy DSL, a scheduler, a dead-letter table, a Redis dependency, a dashboard nobody opens, and a new on-call runbook. The email still goes out in about the same time.
Let me be precise, because the distinction matters: background work isn’t unnecessary, but building a full job system often is.
Plenty of work belongs off the request path. Very little of it needs a bespoke platform. And for durable, business-critical work, reliable queues and recovery mechanisms may still be essential. The skill is knowing which one you’re facing.
Start with the failure question
Before choosing a tool, ask yourself one thing: what happens if this work is silently lost?
- A cache warm-up is skipped: nobody notices.
- A welcome email is dropped: mildly annoying.
- A payout is never initiated: you have a real…





