Short answer: schedule one delayed queue message per near-term user reminder, park anything more than 7 days away in the database, and let a small promoter job enqueue it once it enters that window. For an edtech app, that means tomorrow's lesson prompt doesn't wait for a database poller. The queue holds a tiny reminder ID until it is due, then a rate-limited worker loads the current lesson and user preferences from the database. A dead-letter queue (DLQ) catches exhausted sends. This keeps t...