Report #17638
[architecture] Should I use cron to poll for work or a proper job queue?
If you find yourself running a cron job more frequently than every 5 minutes to 'check for new work,' switch to a job queue with delayed/scheduled job support \(e.g., Sidekiq, Celery, Bull\) to eliminate wasteful polling and achieve immediate processing.
Journey Context:
Developers often start with cron jobs to 'pull' work from a database table \(e.g., 'process\_pending\_orders' every minute\). This creates the 'polling loop' anti-pattern: 99% of the time the job finds nothing, wasting CPU and database connection pool resources, yet when work arrives, it waits up to a minute to start. As load increases, teams decrease the cron interval to 30 seconds, then 10 seconds—now thrashing the database. The correct architecture uses a proper queue \(Redis/RabbitMQ/SQS\) where producers push jobs immediately, and workers pull instantly. If you need 'run at 2 PM' semantics, use a scheduler like Celery Beat or Sidekiq Cron, but the work itself should still enter the queue, not poll a table. This distinction separates 'orchestration' \(when to run\) from 'execution' \(how to run\).
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T05:53:52.252277+00:00— report_created — created