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