Section 2: Promises Measured in Minutes - Requirements (Functional & Non-Functional)
Executive Summary: This section turns Section 1's assumptions into a contract. The functional list is long but familiar: events that can be single, recurring or all-day; three edit scopes; invitations and RSVPs; shared calendars with roles; offline-capable sync; reminders; free/busy; rooms. The non-functional list is where the design gets decided. A calendar isn't one workload with one promise. It's five paths, each with its own target: views and sync at 99.99% and p99 ≤ 200 ms, writes at 99.95% and p99 ≤ 300 ms, attendee fan-out within 5 s, reminders within 30 s, and rooms that are never double-booked. We work out why writes get fewer nines than reads, and we defend "eventual across attendees" against the interviewer's push for strong consistency everywhere.
The interviewer caps the marker: "Fine. So what exactly are we promising?" A weak answer is a feature list plus "highly available, low latency, scalable." A Staff answer notices that Priya Raman expects different things on different paths. She'll tolerate a save that spins for a moment on a train. She won't tolerate an error instead of her next meeting at 08:55. And she never wants to find another team already in NYC-12-Hudson. Those are three different promises, and writing them as one is the usual mistake here.
The Functional Contract
Each item is here because a later section has to build it:
- Events. Create, edit and delete single, recurring (RFC 5545 RRULE, e.g. Platform Sync's
FREQ=WEEKLY;BYDAY=MO) and all-day events. Section 7 builds this. - Three edit scopes. This one (move the 28 Dec instance to Tue 29 Dec), this and following (from 11 Jan 2027 the meeting moves to 09:30), and all. Users expect all three, and each has a different storage consequence.
- Invitations and RSVP. Invite internal guests and external guests by email (iCalendar), and let each guest accept, decline or answer tentatively on their own calendar. Section 8 builds this.
- Sharing with roles. Share a calendar as free/busy only, see all details, make changes, or manage sharing. The lowest role is a privacy promise, not a convenience.
- Viewing everywhere. Day, week and month views on web, Android and iOS. Mobile works offline, renders from a local store and queues edits.
- Incremental sync. A device asks "what changed since I last looked?" and gets only the delta, including deletes.
- Reminders. Popup and email, per attendee, per instance (Priya's default is 10 minutes). Section 9 builds this.
- Free/busy and find-a-time. "When are these six people free for 30 minutes this week?" Section 10 builds this.
- Room booking. Rooms are resources that accept or decline.
- Time zones. Per event (Platform Sync lives in
America/New_York) and per viewer (Tomás sees it in Lisbon time).
Out of scope, with reasons: conferencing media (a separate real-time system; we only store the link), tasks (a different data model), and AI scheduling (a consumer of free/busy that Section 12 revisits).
Sign in to continue reading
The rest of this lesson is available with a free account. Signing in with Google or Microsoft is free.
Sign in to read the full lesson