Exercise · Communication

Reminder Alert

Whiteboard exercise. Try the problem cold, then reveal the rubric to self-score.

Out of 10 points45 min whiteboardReference solution →
01

Prompt

Schedule a reminder for "Thursday 9am in America/New_York" and have it arrive on the user's phone at exactly that local time — even when DST changes, the user moves timezones, or the delivery channel is flaky. The hard parts: time-bucketed scanning that doesn't miss or duplicate reminders across millions of users, timezone materialization that handles DST transitions correctly, and at-least-once delivery with client-side dedup so a reminder arrives once, not zero or three times. Google Calendar reminders, Slack scheduled messages, and medical appointment alerts all solve this.

Time budget: 45 min whiteboard. Draw architecture, estimate numbers, discuss tradeoffs.

02

Hints (progressive — click to reveal)

Hint 1

Lead with time-bucketed partitioning. "Cassandra partitioned by fire_minute_utc. Scanner reads one partition per tick." This is the insight.

Hint 2

IANA zone, not UTC offset. Say it explicitly: "we store America/New_York, not -05:00." This is the DST answer and shows you've hit this bug.

Hint 3

At-least-once + dedup is the pattern. Don't propose exactly-once. Acknowledge the duplicate risk; show the mitigation (Redis SETNX + client dedup).

03

Rubric — 10 points

  • +2 Lead with time-bucketed partitioning. "Cassandra partitioned by fire_minute_utc. Scanner reads one partition per tick." This is the insight.
  • +2 IANA zone, not UTC offset. Say it explicitly: "we store America/New_York, not -05:00." This is the DST answer and shows you've hit this bug.
  • +2 At-least-once + dedup is the pattern. Don't propose exactly-once. Acknowledge the duplicate risk; show the mitigation (Redis SETNX + client dedup).
  • +2 Recurring = expand one ahead. Never pre-generate all future instances. Expand after each fire.
  • +2 Channel escalation. Push fails silently; SMS is more reliable; email is least timely. Escalation ladder shows product thinking.

Self-score: tally the points you would have mentioned unprompted. 7+ is interview-ready on this problem.

04

Red flags (things that tank the interview)

  • Store timezone as UTC offset (-05:00) instead of IANA name (America/New_York)
  • Full-table scan every minute looking for due reminders
  • Expand all future instances of "every Monday forever" at creation time