System design interview questionMediumScheduling Service
Design a Distributed Job Scheduler
Design a distributed job scheduler: accept jobs (run now or later), queue them, and run them reliably across many workers without double-running when possible.
Interview scope
Show producers → API/app → durable job state + Message Queue → worker App Servers. No client talking to the queue/DB directly.
Functional requirements
- Submit a job with payload + optional schedule/delay.
- Workers pull/claim jobs and execute them.
- Track job status (queued / running / succeeded / failed) and support retries.
Scale and quality goals
- Scale workers horizontally as job volume grows.
- Survive worker crashes — jobs should be retried, not lost.
- Coordinator path should not be a single app process in memory only.
Capacity assumption
Design for this scale
Assume ~50M jobs/day (~580 jobs/s average) with peaks ~5×. Mix of short tasks and longer ones.
Practice more than a diagram
Place components on the Froquiz canvas, connect the data flow, and see which decisions the scenario-specific review finds missing. The full exercise and review unlock with Premium.
Explore Premium →