Anyone whose agent notifies people in another timezone
15-minute timing review
Store the recipient’s timezone as a named zone, not your own
Store the audience timezone
“9 AM” is incomplete on its own—9 AM where? The first fix is to store a timezone for the person receiving or acting on the output, not the server, and not you as the person who created the task. Store it as a named zone such as Europe/London, not a fixed offset like UTC+1.
The reason the name matters: a named zone carries its own daylight-saving rules, so a 9 AM job stays at 9 AM local even after the clocks move. A fixed offset does not—set UTC+1 for London in July and the same “9 AM” report arrives at 8 AM once autumn returns the city to UTC+0. To judge you got it right, confirm the saved value shows a place, and check that a run scheduled across a clock-change date still reads 9 AM local on both sides. The trade-off to accept: the recipient’s zone is correct for delivery, but you may still think about when the work runs in your own time—so keep those two clocks separate, which is the next step.
Separate run time from delivery time
These are two different questions, and merging them is what produces 2 AM pings. Decide when the agent should prepare the work, and, separately, when it may notify a person. Fresh inputs often land overnight, so the agent can compile a report at 6 AM and hold the notification until the recipient’s day begins—less delay, no midnight buzz.
Why it helps: the value of a report and the courtesy of its timing pull in opposite directions unless you decouple them. You judge it by two checks—the delivery time matches the recipient’s morning, and the prep time matches when the inputs are actually complete. The failure case is tying “notify” to “run,” so an overnight job pings at 2 AM; the opposite failure is delaying the run so far that the report is stale by the time anyone reads it. The trade-off: holding delivery adds a little latency, so a genuine real-time alert—an outage, a payment failure—should not be held. Route those on their own path rather than into the morning digest.
Use case: a Bengaluru–London daily digest
Priya runs a one-person analytics service from Bengaluru. Her main client, Tom, leads retail operations in London and wants a performance digest waiting when he starts his day. On her first attempt she set the agent to compile and send at 6:00 AM—her morning. In London that is 1:30 AM. The first night, Tom’s phone lit up in the dark.
She had three options. Send at her 6 AM: fresh data, but the recipient’s night. Send at Tom’s 9 AM: that is 2:30 PM her time, when she is deep in other work and the numbers already feel old to her. Or split the two—prepare early, deliver later.
She split them. The agent still compiles at 6:00 AM IST, when the overnight sales data is complete, then holds the notification until 8:30 AM London time. Quiet hours from 10 PM to 7 AM London protect Tom’s evening, and one named exception—a site-down incident—may break through; everything else waits for the morning digest.
The lesson: Priya did not need to run the job later or earlier. She needed to stop treating “when the work happens” and “when the person hears about it” as the same moment—and to anchor the second one to Tom’s clock, not hers.
Priya’s digest, by the clock
Illustrative figures from Priya’s two-timezone setup—an example of anchoring delivery to the recipient, not a customer result.
The agent compiles overnight, in the operator’s timezone, once the data is complete.
The notification is held until the recipient’s workday begins, not the sender’s.
Do-not-disturb follows the recipient’s clock; only one named incident may bypass it.
Define quiet-hour behavior
Quiet hours are only useful if the agent knows what to do with the updates it would have sent. Decide the four behaviors below up front, and phones already model the pattern: a do-not-disturb window, an urgent level that can break through, and a scheduled summary that batches the rest.
- Hold ordinary notifications until quiet hours end, rather than delivering silently and hoping.
- Allow only named urgent events through—a specific, short list, not a vague “important.”
- Bundle held updates into one summary when the window ends, instead of releasing a burst.
- Show which timezone the rule uses, so “quiet until 7 AM” is never ambiguous.
You judge this by what arrives after a quiet night: one digest, not twelve pings, and only the events you pre-named broke through. The common failure is marking everything urgent so the bypass swallows the quiet window entirely—if all events are exceptions, there are no quiet hours. The mirror failure is holding a real outage alert behind the digest. The trade-off is exactly that dial: the more you let bypass, the less the window protects.
Handle teams in several regions
When one output serves people in different regions, a single send time cannot be everyone’s morning. You have two workable shapes: create a delivery window per region, or publish to a shared dashboard that people pull from without any push notification. Avoid the tempting middle—one “global morning” pinned to headquarters—because it is convenient for whoever set it up and nobody else.
Why it matters: a fixed 9 AM at your desk is the small hours for a teammate eight zones away, and repeated night pings train people to mute the agent entirely. To judge it, check that each region receives its digest inside its own working day and that no one is notified during their night. The failure case is defaulting to the founder’s clock and quietly exporting the interruption abroad. The trade-off: per-region windows add a little setup, while a pull dashboard removes push pressure but relies on people remembering to look—choose based on whether the update is something they must see or something they can check.
Preview the next three runs
Before you enable any schedule, look at the next three actual dates and their local times. Reading a rule—“every weekday at 9 AM”—hides the surprises; a rendered preview shows them. This is the cheapest check in the whole setup and it catches the mistakes that are hardest to notice in production.
Why three concrete runs beat one rule: daylight-saving shifts, weekends, and public holidays only appear when the rule is turned into real timestamps. Judge it by whether the three previews land where you expect, and pay special attention to any run that crosses a clock change—it should still read 9 AM local, not 8 or 10. The failure case is subtle and common: two regions move their clocks on different dates, so a cross-timezone gap you thought was fixed silently widens or narrows for a couple of weeks each spring and autumn. The trade-off is trivial—a minute of previewing now against a mystery 2 AM delivery, and a confused client, later.
Try this next
- Store each recipient’s timezone as a named zone (for example, Europe/London), never a fixed offset or your own clock.
- Split the schedule: choose when the agent prepares the work and, separately, the earliest it may notify a person.
- Set a quiet window in the recipient’s local time and name the few events allowed to break it; bundle the rest into one digest.
- Preview the next three runs as real dates and local times before enabling, checking any run that crosses a clock change.
Sources and further reading
These primary references support the article’s approach to naming timezones, handling daylight-saving changes, and delivering notifications at a considerate local time.
The authoritative database of named time zones and daylight-saving rules—why a stored zone name, not a fixed offset, keeps “9 AM” correct across clock changes.
IETFRFC 3339: Date and Time on the InternetThe standard for unambiguous timestamps and explicit UTC offsets—the reason a time is incomplete without its zone.
AppleHuman Interface Guidelines: NotificationsA considerate-delivery model: interruption levels that let only urgent alerts break through, and a scheduled summary that bundles the rest.
Google CloudCron job format and time zoneRecurring-schedule examples plus a clear warning that daylight-saving shifts can make jobs run at unexpected local times.
Ready to put one useful workflow to work?
Start with one clear job, a result you can review, and boundaries you understand.
See launch pricing