# Interview Scheduling System Low-Level Design: Availability Matching, Calendar Integration, and Reminder Pipeline

Source: https://www.techinterview.org/post/3233469714/lld-interview-scheduler/
Updated: 2026-06-30 · techinterview.org

## Interview Scheduling System Low-Level Design

An interview scheduling system matches candidate time preferences against interviewer availability, handles calendar integration, prevents double-booking, and drives an automated reminder pipeline. This LLD covers the core data model and algorithms.

## Slot Model

Interviewer availability is stored as discrete slots:


```
availability_slots:
  id, interviewer_id, start_time (UTC), end_time (UTC),
  timezone, status: AVAILABLE|BOOKED|BLOCKED,
  candidate_id (nullable), interview_id (nullable)
```

Slots are generated in advance from recurring availability rules (e.g., every Tuesday/Thursday 10am-5pm in 30-min increments). Interviewers can also add or remove individual slots.

## Candidate Preferences

When a candidate is invited to schedule, they submit a preference object: preferred date range, list of acceptable time windows per weekday, and their IANA timezone. The system stores these and uses them in the matching algorithm.

## Matching Algorithm

- Convert candidate's preferred windows to UTC ranges for the date range.

- Query `availability_slots` where `interviewer_id IN (panel_ids)`, `status = AVAILABLE`, and `start_time` falls within the UTC ranges.

- For panel interviews: compute set intersection — only slots where all required interviewers are simultaneously available.

- Score each candidate slot by alignment with the candidate's stated preference (morning preference, specific days) and interviewer preference weight.

- Return top 3 scored options to the candidate for selection.

## Calendar Integration

Each interviewer connects their calendar via OAuth2 (Google Calendar or Outlook). The system stores the `access_token` and `refresh_token` encrypted in the DB. On slot generation and conflict detection, the system calls the calendar API to read the interviewer's existing events. On booking, it writes the interview as a calendar event for all participants. Calendar webhooks or periodic polling keep the system aware of events added outside the tool.

## Conflict Detection

When the candidate selects a slot, before confirming:

- Fetch all calendar events for each interviewer in the selected time window.

- Check for any overlap with the proposed interview time.

- If conflict detected, invalidate that slot and re-run matching to find an alternative.

## Double-Booking Prevention

The slot is atomically claimed using a conditional SQL update:


```
UPDATE availability_slots
SET status = 'BOOKED', candidate_id = ?, interview_id = ?
WHERE id = ? AND status = 'AVAILABLE';
```

If the affected row count is 0, another candidate claimed the slot concurrently. The UI presents the next available option. This is a compare-and-swap without a separate lock, avoiding deadlocks.

## Timezone Handling

All `start_time` and `end_time` values are stored in UTC. Display converts to the user's timezone using the IANA timezone database (e.g., `America/New_York`). The system never stores local times — only UTC plus an IANA timezone label for human display and recurring rule expansion.

## Reminder Pipeline

A scheduler job runs every minute and checks upcoming interviews. Reminders are sent at T-24h, T-1h, and T-15min. Before sending each reminder, the system checks the interview's current status — if cancelled or rescheduled, the reminder is skipped. Reminder delivery uses an async queue (SQS/Kafka) feeding an email/SMS service to decouple scheduling from delivery.

## Rescheduling Flow

- Candidate or interviewer requests reschedule via link in confirmation email.

- Current slot is released: `status → AVAILABLE`, `candidate_id → NULL`.

- Booked calendar event is deleted via calendar API.

- Matching algorithm re-runs with the same panel and candidate preferences.

- Candidate selects a new slot; booking and calendar write repeat.

## Cancellation Handling

On cancellation: slot is released, all parties receive a cancellation email, the calendar event is deleted, and a reschedule prompt is sent to the recruiter. Cancellations within 1 hour of the interview are flagged for reporting (interviewer reliability metrics).

## Interviewer Panel Coordination

For a panel interview with N interviewers, the available slots are computed as a set intersection of each interviewer's available slots for the given time window. This is implemented as a SQL query with N JOINs or as an in-memory intersection of slot ID sets, depending on panel size. Typically panels are 2-4 people, making the in-memory approach practical.

## Feedback Reminder

After `end_time` passes, a scheduler job detects completed interviews and sends a feedback form link to each interviewer. Feedback submission deadline is 24 hours post-interview. Non-submission triggers a follow-up reminder at T+24h and escalates to the recruiter at T+48h.

See also: [Netflix Interview Guide 2026: Streaming Architecture, Recommendation Systems, and Engineering Excellence](https://www.techinterview.org/post/3233460274/netflix-interview-guide-2026-streaming-architecture-recommendation-systems-and-engineering-excellence/)

See also: [Atlassian Interview Guide](https://www.techinterview.org/post/3233459919/atlassian-interview/)

See also: [LinkedIn Interview Guide 2026: Social Graph Engineering, Feed Ranking, and Professional Network Scale](https://www.techinterview.org/post/3233460278/linkedin-interview-guide-2026-social-graph-engineering-feed-ranking-and-professional-network-scale/)
