Double booking: how it happens and how software prevents it
The four ways two customers end up in the same slot, the mechanism that stops each one, and the test that tells you whether your booking system actually has it.
Frontiva · · 4 min read
Double booking happens four ways: two people book the same slot at the same moment, the booking system cannot see something on the staff member's calendar, a service was booked at the wrong duration and overlaps the next one, or a person booked over a slot by hand without checking. Software prevents each with a specific mechanism: atomic holds, two-way sync, per-service durations, and the same availability rules for staff as for customers.
Cause 1: the same second
Two customers, or a customer and a staff member, pick the same free slot within seconds of each other. Both see it as available because it was, a moment ago. Without a hold, both are confirmed.
Prevention: the hold is atomic. When a customer picks a slot, the system claims it in one operation that either succeeds or fails; there is no gap between checking availability and taking the slot. The second person is told the slot just went and offered the next one. This sounds obvious and is the thing most home-grown booking pages get wrong.
Cause 2: the invisible block
A staff member puts a personal appointment on their Google Calendar. The booking system, syncing one way or every fifteen minutes, does not see it. A customer is booked into it.
Prevention: two-way, push-based calendar sync. The block appears in the booking system within seconds of being created and the slot stops being offered. Our post on two-way calendar sync covers what to test.
Cause 3: the wrong duration
A full colour service takes three hours. It was booked as a one-hour "appointment" because that was the default. The next customer was booked at the two-hour mark, into the middle of it.
Prevention: durations per service, and per staff member where they differ. The system offers slots that fit the actual duration, plus any buffer, and never lets a booking end after the next one starts. New services get a duration before they can be booked.
Cause 4: the manual override
A front desk person, on the phone, writes an appointment into a slot that looked free on their screen, which was not the live view. Or they book "just this once" over a block.
Prevention: the same rules for everyone. Staff book through the same availability engine customers do, and the system warns on any overlap and requires a deliberate choice to override it, with the override recorded. A system that lets staff drop appointments anywhere without warning will eventually double book by hand.
The multi-location version
A staff member who works at two branches can be booked at both for the same time if each branch's calendar is separate. Prevention: availability is per person, across every location they work at, and a booking at one branch blocks the time at the other.
The test
Open two browser windows as two customers. Have both reach the slot-picking step for the same slot. Pick in both. Exactly one should succeed and the other should be told the slot went. Then add a calendar block on the staff member's Google Calendar and try to book it within thirty seconds. Then book a long service and check the next offered slot starts after it ends. Three tests, ten minutes, and you know.
Frequently asked questions
Can an AI receptionist double book?
Only if the booking system underneath lets it. The AI reads availability and requests a hold like any other client; the guarantees come from the system, not from the AI.
What about walk-ins?
A walk-in is a staff booking made at the counter and should go through the same engine, so the slot is claimed immediately and the online availability updates.
What should happen if a double booking does occur?
The system should detect the overlap, alert the location manager, and show both customers so a person can resolve it before anyone arrives. Silent overlaps are the worst outcome.
What Frontiva does here
Frontiva's bookings use a Postgres exclusion constraint, so two overlapping appointments for the same staff member cannot both exist; tested with 50 simultaneous requests for one slot, exactly one won. The public booking page and the staff calendar use the same engine. Calendar sync is not built yet, so blocks on a personal Google or Outlook calendar are not read. See two-way calendar sync explained.