Backend Developer project
Build a background job queue with retries and a dead-letter list
An API that accepts jobs and processes them asynchronously — the retry and failure-handling logic is the actual test, not the happy path.
The brief
Build a small job queue: an API endpoint accepts jobs (e.g. "send email" with a payload), a separate worker process pulls jobs off the queue and processes them, failed jobs retry with exponential backoff up to a limit, and jobs that exhaust retries move to a dead-letter list you can inspect. Use Redis with BullMQ, or a DB-backed queue table if you don't want a Redis dependency.
Suggested stack
What you hand in
- A public GitHub repository with the API, the worker, and a README
- A README describing the architecture (how the API and worker communicate) and the retry/backoff strategy
- A way to list dead-lettered jobs, either an endpoint or a documented query
Grading happens against the rubric below, so read it before you start — not after.
How this is graded
Published in advance and weighted out of 100. Nothing here is a surprise.
Jobs are processed exactly once under normal conditions, and reprocessing a job (e.g. after a crash) doesn't cause duplicate side effects.
Failed jobs retry with increasing backoff up to a defined limit, then land in a dead-letter list instead of retrying forever or vanishing.
The API responds immediately after enqueueing; job processing happens in a separate worker process/loop, not inline in the request handler.
There's a way to see a job's current status (queued, processing, failed, dead-lettered) without reading server logs.
No console errors or crashes, no broken layout, no leftover placeholder text or commented-out code.
Why this project is worth your weekend
- Asynchronous processing is behind nearly every real backend feature that sends email, generates a report, or calls a slow third-party API.
- Retry and backoff logic is where junior submissions usually stop, and it's exactly what separates a toy queue from one a team could trust in production.
- An interviewer can kill the worker mid-job and check whether the job is lost, duplicated, or correctly recovered.
Where people lose points
- Processing jobs synchronously inside the API request handler, defeating the entire purpose of a queue.
- Retrying a failed job forever with no backoff or cap, which can flood a downstream service during an outage.
- No way to inspect a dead-lettered job's payload or failure reason, so a stuck job is invisible until a user complains.
Other Backend Developer projects
Two or three of these turn an empty resume into a portfolio.
Built it? Get it scored against this rubric.
Submit your work and get a score on every criterion above, written feedback, and three resume bullets you can use straight away.