You put the same person on two jobs at the same time. You usually find out the day before, or the morning of — and then it's phone calls, apologies, and rebuilding the day around the hole.
As long as schedules get built by hand, this shows up on a regular basis wearing the mask of a careless mistake. But double booking isn't a focus problem. It's the kind of error that happens at specific, predictable moments. This post breaks down the three moments a conflict gets created, and how each one gets closed structurally rather than through vigilance.
🎉 Now live
Shiftaru is officially live. The free practice mode (sample data) needs no signup.
👉 https://shiftaru.com
Conflicts don't come from missing something — they come from not seeing it
Nobody double-books because they skipped the check.
If anything it's the opposite: the check happened, but the sheet being checked doesn't show conflicts. You fill afternoon jobs while looking at the morning sheet. You build this week in a different tab than last week's finalized one. Each location has its own file.
In every one of those cases, one person's day is scattered across several places, and no single view holds that person's whole day. Conflicts are born in the gaps between sheets. Which means the fix isn't "be more careful" — the only thing that works is not leaving gaps.
The three moments a conflict is created

1. When the schedule is split across sheets
Morning and afternoon. Location A and location B. A tab per coordinator. The moment the schedule splits, the same person appears on two sheets independently — and filling one without the other collides by default. Every split you make is another cross-check you owe.
2. When you add one job after the fact
This is the most common one by far. The schedule is done, and a single new job comes in. It's not worth rebuilding the week for one booking, so you eyeball the gaps — but the already-confirmed bookings have slipped out of your head, and the job lands on top of one. The one-off addition is dangerous precisely because you don't re-check the whole thing.
3. When the time is open but you can't get there
10:00–11:00 and 11:00–12:00. On paper they line up perfectly. Nothing overlaps.
But if those are two different addresses, there's no time to travel between them. For mobile services, in-home visits, and multi-location businesses, a schedule can be technically valid and still impossible to run. And because it isn't a visible overlap, nobody catches it until the day itself.
All three close with the same single view
When Shiftaru builds a schedule automatically, these three aren't handled as three separate features. They close through one way of holding the data: each staff member's day is kept as a single continuous strip, and the only question ever asked is whether a job fits in it.

1. Split availability, one person-day
Even when someone submits morning and afternoon availability as separate rows, conflicts are evaluated per staff member × date, across rows. A pairing that collides on someone's day never becomes a candidate in the first place.
2. Confirmed bookings get placed first
Bookings you already finalized — or imported from a CSV — are laid onto the board as occupied time before matching starts. New bookings are then fitted around them, so a job added later can't land on an existing one. Re-running the match doesn't disturb what's already confirmed.
3. A gap is always reserved between bookings
Jobs are never packed edge to edge. A break (travel) window is reserved before a slot is considered usable. The default is 15 minutes, and you can set it to match your reality under Break time (minutes) on the scheduling screen. Blocked-out time — training, meetings, closures — is treated as occupied too (with no travel gap needed, since nobody is going anywhere).
On top of that, a staff member who already has a booking in a different area that day is dropped from the candidate pool, so a geographically impossible day never gets built.
If it doesn't fit, it doesn't go in
The part that makes structural prevention actually work is this: when nothing fits, nothing is assigned.
You can always force a job in and make the sheet look full, but a full sheet that can't be run falls apart on the day. Shiftaru leaves that client unassigned instead, and records why. You'll see reasons like no free time available (already booked) or conflicts with an existing booking in a different area — so the results screen tells you what blocked it, not just that it failed.
An unfilled job isn't a failure. It's the one decision that genuinely needed a human, surfaced on its own. You adjust that one by hand or relax a condition, and leave the rest of the schedule alone.
Summary
- Double booking comes from split views, not from carelessness
- It's created at three moments: split sheets, the job added later, and travel time nobody counted
- All three close with one rule: hold each person's day as one strip, place confirmed bookings first, and reserve a gap between jobs
- If it doesn't fit, don't force it. Surfacing the one job that didn't fit is far cheaper than a collision on the day
Zero conflicts isn't something you achieve by trying harder. It's a byproduct of how the schedule gets built.
- ▶ https://shiftaru.com — free practice mode, no signup
- ▶ Read more: Shiftaru Blog