Every few months someone says, "How hard can a scheduling tool be? It's just a calendar." Then they meet time zones.
If you've ever built or evaluated scheduling logic, you know it's a small distributed-systems problem in disguise.
The problems hiding in "pick a time"
1. Time zones and DST.
Store everything in UTC, convert only at the edges, and never trust a bare offset.
js
// Store in UTC, render in the viewer's zone
const slotUtc = "2026-11-02T14:00:00Z";
const display = new Intl.DateTimeFormat("en-US", {
dateStyle: "medium",
timeStyle: "short",
timeZone: candidate.timeZone,
}).format(new Date(slotUtc));
2. Race conditions.
Two candidates click the same slot at the same moment. You need an atomic hold or a unique constraint, not an optimistic check.
sql
-- Prevent double-booking at the database level
ALTER TABLE bookings
ADD CONSTRAINT unique_interviewer_slot UNIQUE (interviewer_id, slot_start);
3. Calendar sync drift.
Webhooks fail and events get edited elsewhere. You need reconciliation, not just push notifications.
- Panel interviews. Finding a slot that fits N interviewers is an intersection-of-availability problem, and it gets slow with big panels.
5. Reminders and no-shows.
Idempotent jobs, retry logic, and per-timezone send times.
Build vs. buy
Building this is a fine weekend project and a poor long-term commitment. Edge cases arrive for years. For a recruiting team, a ready-made option like hiremore AI's interview scheduling software handles self-scheduling, calendar sync, and automated reminders so engineers aren't maintaining it.
Takeaway
If your hiring team still schedules by email, that's an automation opportunity, and a good reminder that "simple" features rarely are.
What's the nastiest scheduling bug you've hit? Share it in the comments.
Top comments (0)