Case study·Practice calendar for a dental group · 43 practices · 2026

The fifteen minutes nobody could see

A dentist asked for a second column in the calendar. Six months, four rounds of research and one wrong turn later, we shipped something smaller first — and let the users overrule the design we liked best.

My roleLead product designer — research, design, testing, business case
TeamProduct manager, two front-end engineers, BI analyst, 30+ practice staff as participants
TimelineApril – September 2026
OutcomeTwo-step rollout agreed; step 1 in build; ticket rewritten with testable acceptance criteria
The redesigned calendar: each practitioner with two columns, long appointments showing white bookable windows, a parallel booking beside them
The calendar after the redesign: a practitioner can hold two columns, long appointments show their free minutes as white windows, and the parallel booking sits beside the block.
Springthe request

Where it started

“Can we have a second column?”

The request came from the practices. Dentists in the larger clinics wanted a second column per practitioner in the calendar — somewhere to put the appointment that runs in parallel while a long treatment is under way. It was a clear, concrete ask, and the tempting thing was to draw it.

Instead I asked why. The answer turned out to be a visibility problem, not a layout problem: reception could not see when booking in parallel was safe, so they didn’t. A long appointment renders as one solid block. Nothing on it says that for the first and last fifteen minutes — preparation, anaesthetic onset, the assistant working alone — the practitioner is genuinely free. An invisible slot is never booked.

Then priorities moved and the work was shelved. It came back in August from the business side with a different motive — the revenue in unused practitioner time — and a different proposed solution: a calendar view by rooms. Same feature, two languages, two proposed answers. Neither was the one we built.

The design stance from day one: treat the request as a symptom and go find the cause. Every later decision in this project — the cheap first step, the rejection of the room view, the choice of test method — follows from that one reframing.

Problemin the product

Why nobody books into the big blocks

The time exists. Nobody can see it. The practice pays either way.

Take one hour-long implant appointment. The patient is in the chair for the whole hour; the dentist is needed for the middle thirty minutes. The overbookable window at each end is already configured in the practice management system — it has simply never reached the calendar screen. So only the most experienced staff book into it, from memory.

13:0013:1513:3013:45
Hoffmann, L.13:00 – 14:00 · 1h · Implant · Room 3
first 15 minpractitioner not needed
last 15 minpractitioner not needed

I asked the BI team for three things: every appointment with its start, end, practitioner, practice and realised revenue; the shift-planner export with its bookable / non-bookable flag; and average revenue per treatment category. Together they put hours and euros on the same axis — and they confirmed the behaviour was real.

12.7%of appointments already start while another of the same practitioner is running — booked from memory, with no help from the screen
64%of practitioners book in parallel at least occasionally. Normal practice, not a quirk of a few clinics
46 of 467practitioners average at least one overlap every working day
43%of bookable practitioner time is actually booked. The rest is staffed, lit and paid for

Appointment export: 483,192 appointments, 43 practices, 14.9 months. Shift export: 354,998 shifts. Utilisation is a first estimate; the true figure is likely 43–55% because 13% of appointment activity had no matching shift record.

Aprilfirst answer

First answer

Two columns per practitioner, named by appointment type

The first design took the request literally: every practitioner gets two columns — “Big treatments” on one side, “Quick control” on the other — and appointments sort themselves in.

April iteration: two named columns per practitioner at real density
The April iteration at real Monday density. Names truncate mid-word, times vanish. Practices also rejected columns named by type — they name their own.

It died on two things you can only learn by drawing at real density: the columns became unreadable, and practices did not want columns named by type. What survived was the core idea — a practitioner can have more than one lane — which is now step 2 of the rollout. The design was shelved, not wrong; it was early.

Julysecond answer, round 1

Second answer

Show the free minutes inside the long appointment

If the problem is visibility, the smallest fix is to make the free time visible where it is. From July on there was one idea, drawn several ways. Round 1 asked a basic question — how does free time inside an appointment read at all? — with three renderings in front of four practice staff in a moderated session.

A0 white boxes
PartlyA0 · White boxes

White was understood as the signal — but the window caption was tiny and grey, and the header carried the practitioner-active time, 13:30–13:45. The appointment length was not recognisable.

B reduced intensity
RetiredB · Reduced intensity

A dashed, lightened zone instead of white. A second visual language beside white; after six hours on screen such subtleties get missed.

A1 lighter treatment colour
RetiredA1 · Lighter treatment colour

Windows in a lightened treatment colour, the booked overbooking nested inside. No clear bookable state; nested bookings read as clutter.

„Woher soll ich wissen, dass das der Termin ist, der die ganze Länge hat?“

“How am I supposed to know this is the one with the full length?” — the block showed the practitioner-active segment, not the appointment.

Reception lead · moderated session, 30 July

„Am allerbesten wäre so eine Doppelspalte, wo man das direkt sieht.“

“Best of all would be a double column where you see it directly.” The users named the remedy themselves — a column, not a colour.

Reception · moderated session, 30 July

The verdict was concept confirmed, rendering rejected. Three rules came out of it that every later version had to obey: patient time is the only time on the block; the container never visually shrinks; a booked overbooking sits beside the appointment, never nested inside it.

A fourth decision followed in early September and mattered more than it looks: one signal for “free”, and it is white — the same white that means free everywhere else in the calendar. The reduced-intensity rendering was retired not because it tested badly but because it was a second visual language for the same meaning, and a user had put it better than I could: “white indicates everything that is available.”

Septround 2 · test

Closing the last question with data

Two renderings, one question that decided it

By September the idea was stable and two candidates remained. They differ in one thing: whether the treatment colour reaches the block’s true top edge. A runs three flush bands with the header below the first white band; B insets the white boxes so the colour and the left edge run the full hour. Internally, the team leaned towards A.

Variant A: bands edge to edge
2.92 / 5A · Bands edge to edge

Three flush bands. The header sits below the first white band, so the colour only begins at 13:15.

Variant B: inset white boxes
3.85 · winnerB · Inset white boxes

White boxes inset in the block; treatment colour and left edge run the full hour, header at the true start.

Method — and why it was built this way

A moderated session gives you why; it cannot give you which. For the final choice I ran a short questionnaire to 26 practice staff across the network — 20 reception, 4 practice management, 1 prophylaxis, 1 assistant — with four design constraints:

Identical questions for both variants

Word-for-word the same three questions, same scale, same order. It is the only thing that makes two scores comparable.

Comprehension, not preference

Not “which do you like?” but “can you tell when this appointment runs?” Preference is what lets taste win. Comprehension is what the practice pays for.

The pass mark written down first

Before the form went out: a mean below 3.5 on any comprehension question knocks the variant out, however much people like it. Set by design, in writing. That is what let the result overrule us instead of being explained away.

Within-subject, whole team

Every respondent saw both variants — I could not split a reception team in half. The trade-off is order effects; the gain is a direct paired comparison per person.

Can you tell when the appointment runs?weak in both — still the top refinement
A
3.35
B
3.69
The header needs to be stronger — in both
Can you see where to book the short appointment?the concept works — in both renderings
A
3.81
B
3.88
Highest score in the study. Two renderings, same answer
With a booking beside it — is the long appointment still clear?the everyday case
A
2.92
B
3.85
A falls below the middle of the scale. This decided it

„bei A sieht aus als würde der Termin erst um 13:30 anfangen, weil die Farbe nicht bis ganz oben bei 13 Uhr geht“

“In A it looks as if the appointment only starts at 13:30, because the colour doesn’t reach the top at 13:00.” Andrea’s July complaint, returning in a different person’s words. A second respondent, weeks later and independently: “the appointment runs an hour but is only recognisable as thirty minutes.”

Survey respondents · September

Preference was split — comprehension was not. Asked which to implement: B 8, A 3, both fine 7, no preference 8. Sixteen of twenty-six had no real preference. If preference had been the deciding question there would have been no decision — or a coin flip landing on the variant that breaks in the everyday case. A did not lose on taste. It lost because it fails when something is actually booked beside it, which is the whole point of the feature.

Eleven of 26 rated A at 2 or below on that question; two rated B that low. The sample grew across five waves — 12 → 16 → 17 → 23 → 26 — and no wave reversed the sign. (Nested samples, not independent replications; I say that out loud before anyone else does.)

What the data also said, and what I did with it. Even the winner is weak on time recognition (3.69) — so a stronger appointment header and treatment colour running to both edges became mandatory refinements, not nice-to-haves. Four of 26 rejected the concept, not the variant — roughly one in seven would rather change nothing. I named that in the room rather than let someone find it.

Designand its rules
Final design: long appointment with inset white windows and a parallel booking in a second column
The final design: white windows at the true start and end, full patient time on the header, the parallel booking beside the block in a second column.

White = bookable

A white window inside the appointment marks the free time, with its duration. The same white that means free everywhere else in the calendar. No new colour, no pattern, no badge, no transparency.

The appointment never shrinks

Treatment colour and the continuous left edge run from true start to true end. The header always carries the full patient time, and the time is never shown twice.

Booked time sits beside it, never nested

A booked overbooking renders as a sibling in the second column — exactly what reception asked for in July.

Book into a window and that window is gone

Its availability disappears, including the space beside the new booking; the pair renders as a standard parallel booking. A second, untouched window stays white. Getting this rule stated precisely mattered — a looser reading would have quietly deleted the capacity the business case depends on.

Augthe room question

The wrong turn we took deliberately

Why the second column belongs to the practitioner, not to a room

Business had asked for “a calendar view by rooms” — the model most US practice software uses. Before committing to a practitioner column as step 2, I tested the room idea as given: a room-based prototype, reviewed with three practices, plus the export.

Large practice, two locations

Room names are irrelevant — “people know their rooms by habit; what matters is having more than one column.” Rejected a pure room view outright: “you’d have to figure out whose patient is whose.” What she does need is one shared second room bookable by four practitioners.

Practice with 6–7 rooms

Except prophylaxis and one endodontist, nobody has a fixed room. Staff move between rooms all day; scheduling is purely by practitioner. Her organisation could not be represented in a room-based plan at all.

The data

Only 0–5% of appointments carry a room in the three practices that book in parallel the most; 96–100% in four others. The field is optional; the spread is recording habit, not organisation. Any feature that depends on room data would fail in most practices.

Design law: columns belong to practitioners. A room is an optional label on a column — never a requirement, never a view reception has to work in. A room pivot survives only as an optional planner view for fixed-room practices. Stated honestly: of three go/no-go checks I set for room columns, only the fill rate has data behind it; the qualitative evidence carried the decision.

Shipin two steps

Sequencing as a design decision

One new idea per release

People learn a calendar once. Ship two changes at the same time and they cannot tell which one confused them. So the rollout is two steps, in an order chosen for learnability and for how soon value arrives.

Step 1

Visible free time

The white window inside long appointments. No layout change — the calendar reception knows stays exactly as it is — so it ships months before the columns land. It answers the problem we opened with, and it validates the premise cheaply: if reception books into white windows, the whole idea is proven in production before anyone builds a slot engine.

Step 2

The second column

A practitioner can have more than one column, so parallel work is readable instead of stacked. This is the original request, and — with type rules and a slot engine — it is what reaches the measured pool of short gaps between appointments.

The business case, correctly scoped. Inside staffed shifts there are roughly 20,000 hours a year of 10–45-minute gaps between consecutive appointments. Filling a quarter to a half of them at the realised rate for short appointment types is worth about 3–6% of annual revenue — from time that is already staffed and paid for. I made a point of saying which step that number belongs to: it is step 2 plus the engine. The inventory step 1 unlocks — the free minutes inside long appointments — was never in the export and has not been measured. That is a one-line query to BI, and I would rather say “not yet counted” than let two different pools blur into one number.

Known risk, named early. Density. A clinic runs a median of four treating practitioners at once and up to twelve; second columns apply to dentists only — median two per clinic-day, up to nine. The worst case is around twenty lanes. Flagged by a practice manager in July, a survey respondent in September and engineering in the same week. A design answer is owed before step 2 starts, and I would rather it be on the slide than in the corridor.

What I’d say about this project

The idea never changed. Users corrected the rendering four times.

The white window was on the table in July. What the research did was strip away everything around it that was wrong — the nested booking, the segment label, the second signal, the bands that let the colour stop short — and it did that because we asked comprehension questions with the pass mark written down first. The variant the team liked lost. That is the part I trust most.

On methodModerated sessions for why, a questionnaire for which. Identical questions, pre-registered knock-out, within-subject. Report the distribution and the stability, not just the mean — and name the nested-sample caveat yourself.
On judgmentTreat a request as a symptom. Take the business’s proposed answer seriously enough to test it, then let the practices decide. Keep one visual language for one meaning, even when a second one is tempting.
On honesty with numbersSay which feature a euro figure belongs to. Say which figure is measured and which is assumed. Say what was never counted. It is what made the rest of the deck credible to a sceptical director.
On sequencingShip the cheap, learnable thing first and let it validate the expensive thing. One new idea per release. Name the risk you are carrying into step 2 before someone else does.

Other projects.

All projects ↗