Skip to content
Low Level Design Mastery Logo
LowLevelDesign Mastery

Meeting Room Reservation System

Design a Meeting Room Reservation System with conflict detection, recurring bookings, waitlist management, and notification handling.

What is the Meeting Room Reservation System Problem?

Section titled “What is the Meeting Room Reservation System Problem?”

Design a Meeting Room Reservation System that allows users to book meeting rooms based on availability, capacity, and amenities. The system should prevent overlapping bookings, support recurring meetings, manage booking lifecycles, and notify users about their reservations.

In this problem, you’ll design a system that efficiently manages resources, handles concurrent bookings, prevents conflicts, and provides a seamless user experience through proper state management and notification handling.


Design a system that allows employees to efficiently book meeting rooms, ensuring no conflicts occur while supporting advanced features like recurring bookings and waitlist management.

Functional Requirements:

  • Room Management: Manage meeting rooms with different capacities and amenities (projector, whiteboard, video-conferencing).
  • Time Slot Booking: Book rooms for specific time slots with start and end times.
  • Conflict Detection: Prevent overlapping bookings for the same room - if Room A is booked from 2 PM to 4 PM, it cannot be booked again during that time.
  • Search Functionality: Search available rooms based on date, time, capacity, and amenities.
  • Booking Lifecycle: Handle booking creation, modification, and cancellation.
  • Notification System: Notify users about booking confirmations, cancellations, and reminders.
  • Recurring Bookings: Support recurring meeting bookings (daily, weekly, monthly).
  • Waitlist: Maintain a waitlist for fully booked rooms and notify users when rooms become available.

Non-Functional Requirements:

  • Object-Oriented Design: Clear separation of concerns with well-defined roles for each class.
  • Modularity: Easy to add future enhancements like new booking strategies or notification channels.
  • Thread Safety: Booking operations must be safe from race conditions and double bookings.
  • State Management: Maintain clear state flow from pending to confirmed to canceled.
  • Performance: Efficiently handle search operations even with a large number of rooms and bookings.

The system manages rooms, bookings, and waitlists while ensuring no conflicts occur.

Diagram
classDiagram
    class MeetingRoomReservationSystem {
        -Map~String,MeetingRoom~ rooms
        -Map~String,Booking~ bookings
        -ConflictDetector conflictDetector
        +searchAvailableRooms(...)
        +createBooking(...)
        +cancelBooking(...)
    }
    
    class Booking {
        -BookingState currentState
        -List~BookingObserver~ observers
        -User user
        -MeetingRoom room
        +confirm()
        +cancel()
        +overlaps(Booking)
    }
    
    class BookingState {
        <<interface>>
        +confirm(Booking)
        +cancel(Booking)
    }
    
    class BookingStrategy {
        <<interface>>
        +createBookings(...)
    }

    MeetingRoomReservationSystem --> Booking
    Booking --> BookingState
    Booking --> BookingObserver
    BookingStrategy <|.. OneTimeBookingStrategy
    BookingStrategy <|.. WeeklyRecurrenceStrategy

Diagram

If two users try to book the same room at the same time simultaneously, how do you prevent both from succeeding?

Solution: Use synchronized methods or locks to ensure atomic conflict checking and booking creation. The system checks for conflicts and creates the booking in a single atomic operation, preventing race conditions.

A user wants to book a room every Monday at 2 PM for the next 3 months. How do you create and manage these bookings?

Solution: Use the Strategy Pattern with different strategies for one-time, weekly, and monthly bookings. Each strategy creates the appropriate number of booking instances, and each occurrence is checked independently for conflicts.

When a room becomes available, multiple users might be on the waitlist. How do you ensure fairness?

Solution: Use a FIFO queue (first-come-first-served) to maintain waitlist order. When a booking is canceled, the system automatically processes the waitlist and notifies the first user in the queue.

Users need to be notified about booking confirmations, cancellations, and reminders. How do you handle this without tightly coupling the Booking class to notification implementations?

Solution: Use the Observer Pattern. The Booking class maintains a list of observers (EmailNotifier, SMSNotifier) and notifies them when state changes occur. This decouples notification logic from booking logic.


By solving this problem, you’ll master:

  • State Pattern - Managing complex, multi-state lifecycles.
  • Strategy Pattern - Encapsulating different algorithms for recurring bookings.
  • Observer Pattern - Implementing decoupled notification systems.
  • Conflict Detection - Preventing overlapping resource allocations.
  • Concurrency Control - Using locking mechanisms to prevent race conditions.

Ready to see the full implementation? Open the interactive playground to access:

  • 🎯 Step-by-step guidance through the 8-step LLD approach
  • 📊 Interactive UML builder to visualize your design
  • 💻 Complete Code Solutions in Python, Java, C++, TypeScript, JavaScript, C#
  • 🤖 AI-powered review of your design and code

After mastering the Meeting Room Reservation System, try these similar problems: