The Decision in One Pass
Schedules Skip, They Don’t Stack
Two facts about schedules shape how you should design for them:- If the previous Run is still going when the next tick fires, the tick is skipped — Runs never stack up behind each other. A schedule whose work regularly outlasts its interval doesn’t run more often; it runs less predictably.
- Missed ticks are not backfilled. A tick that doesn’t fire is gone; the next one fires on its own time.
Triggers: Expect Once, Design for Twice
Duvo tracks which items a trigger has already fired for, so a matching email or message normally starts exactly one Run. Still, write the AOP as if an occasional duplicate can happen — have it check whether the record it is about to create already exists before creating it. Cheap insurance, and it also makes manual re-runs safe. Things trigger authors regularly trip over:- Enabling a trigger does not process the backlog. On first activation, existing items in the inbox or folder are marked as seen without firing — only new items from that point on start Runs. If the backlog matters, have someone Start Work once manually to work through it.
- The event arrives as the Run’s opening message. The triggering email, message, or file lands as input on top of the AOP — so the AOP should say what to do with “the item in this Run” rather than instructing the Agent to go find work.
- Triggers are personal. Each trigger watches its creator’s account and its Runs use that person’s access — see Connections and Logins That Don’t Break.
Queues When Items Matter Individually
If each item needs its own record, its own retry story, and its own outcome someone can review, a trigger that just starts a Run isn’t enough — put the items in a Queue as Cases and give the Queue a consumer Agent. You get per-Case status, postponing, and parallel processing for free. The design rules for that live in Designing Work Around Queues and Cases. One rule to repeat here because it fails confusingly: a Queue should have exactly one consuming Agent. When two Agents both have triggers on the same Queue, Duvo refuses to pick a winner and conflicted Cases don’t run at all. The setup flow warns you when you’re about to create this situation.When a Start Fails
A Run that starts and fails is not automatically retried — for schedules the next tick simply fires on time, and for Cases you can reprocess from the Queue. Design recovery into the mechanism you chose (self-healing schedules, reprocessable Cases) rather than assuming the platform replays failures. There is one automatic guard: a schedule or trigger that keeps skipping because a required Connection is missing gets auto-paused, and its owner is emailed. Reconnect the account and switch it back on.Related
Scheduling Agents
Frequency presets, cron expressions, and timezone setup.
Event-Driven Triggers
Every trigger type with latency, dedup, and retry behavior.
Designing Work Around Queues and Cases
Producer/consumer design and the rules that keep a Queue healthy.
Connections and Logins That Don't Break
Why the schedule’s creator determines what a Run can access.