Back to work

Modernizing Restaurant Reservations Without Losing Density

Improved the restaurant reservation workflow: better hierarchy and scannability without sacrificing the information density power users depend on.

Product DesignDesign SystemsEnterprise UX
Company
OpenTable
Year
2019 – 2022
Role
Design Systems Lead & Product Partner
Timeline
10 weeks

OpenTable's reservation details view was the most legacy-styled screen in the product: dense, fragmented, expensive to maintain, and used by operators every shift. I led the redesign. The brief was to modernize it without losing the density they rely on.

Reservation Details, before-and-after comparison. Legacy flat layout on the left; the redesigned card-based hierarchy on the right.
iPad to iPhone. Reverse-engineering OpenTable's Front of House iPad app to iPhone and Android.

Team
3 designers, 6 engineers, 2 PMs
Platforms
Mobile · tablet · desktop

Host time on the card, week 6
−18%
Time to the right note
11s → 7s
Opt-in restaurant groups, worldwide
35

Three tempos, one record

The same reservation is read by three people at three speeds. The host at the door has seconds per guest, standing, on an iPad. Front of house runs the floor all shift on iPhone and iPad, watching live statuses, allergies and notes. Back of house returns to the same record between shifts on the web, slower and in more depth. Build the card once; let each surface decide how much of it to show.

That framing moved the product, not just the screen. The tool had stayed tethered to the host stand even though staff work the floor, not a desk. Mobile was designed first and iPad second, so one logic carried across both.

Screenshot of the redesigned Guest Profile component in the Back of House web view
The same Guest Profile component in the Back of House web view, where there is room for more.
Close-up screenshot of the Guest Profile component showing structured guest data in Back of House
Close up: structured guest data, scannable at desk pace.

A dumping ground by accumulation

Years of shipped features had each found somewhere to live, and restaurants run their whole shift on the result. Guest details and visit history sat hidden behind tabs, so they were rarely seen. Booked and Assign table were real actions styled as flat panels, so the controls did not read as controls. Experiences got the worst of it. *4× Friday Whiskey Tasting*, the highest-value thing on the booking, rendered as plain text with no visual weight.

The legacy reservation detail screen on iPad: guest details behind a tab strip, Booked and Assign table rendered as flat grey panels, and 4 x Friday Whiskey Tasting shown as an unstyled text link
The screen as it stood. Tabs hiding the record, actions that read as panels, and a high-value experience set as plain text.

Three walls shaped every decision after that. Zero tolerance for data loss or regressions, because a missed allergy tag is a real guest at a real table. No retraining budget, because operators live here every shift under time pressure. Distributed ownership, because the flow spanned multiple engineering teams and had to be adoptable piecewise.


An architecture before a layout

Rather than redesigning the page, we modelled it. The reservation card became zones for status, experiences, guest profile, visit notes and tags, and guest history. Each one could absorb new data without another redesign. What drove that bet was everything already queued: multiple guests, Venga and sentiment data, visit counts, takeout and delivery spend, POS spend per occasion, and third-party integrations.

We want to think of elements in the reso card as modular — utilized in other areas of OT.

Stakeholder feedback · FOH modernization review
RESERVATION CARD Visit notes & tags Reservation and table status Experiences Guest profile Contact card Guestbook notes Guest profile integrations — 3rd-party guest notes Guest history Visit history
The card as zones, not a layout. Status and Experiences still sat inside the notes zone here, which is the thing the rail later corrected.

Each zone then shipped as a repeatable pattern:

  • Guest profile, identity first and readable in one glance
  • Tags, structured and scannable service data
  • Guest message, the guest's own words verbatim
  • Notes tabs, five categories and one tap
  • Notes as cards, guestbook with newest first
Annotated diagram showing how guest and reservation information was made modular across Back of House, Front of House, Web, iOS, and Android
The same patterns annotated against the shipped card: what each one had to carry to work on desktop and on iPad.

Options, weighed in the open

The actions were the contested decision. Where should Booked, Assign table and the rest actually live? Anchoring them to the foot of the card buried them below the fold as soon as notes ran long. Leading with them crowded the guest header that hosts scan first. In user testing the right rail won clearly. Users read it as *where actions live* without being prompted.

THE ACTIONS // where they live 01 · ACTIONS IN A RIGHT RAIL Status and actions get a persistent surface the floorplan could later reuse. CHOSEN 02 · ACTIONS IN A BOTTOM BAR Actions anchor to the card foot, buried below the fold once notes run long. 03 · ACTIONS ON TOP Actions lead the card, but crowd the guest header hosts scan first.
Three placements, one chosen. Each option is named by what it costs, not by what it looks like.

Two tradeoffs came with it. Status and Experiences moved into a rail the floorplan could reuse, which means related information now spans two panels; one reusable rail beat two bespoke ones. Notes moved off a long scroll into a segmented control, which puts content behind a tab; scanning beat scrolling.


Shipped, in hand

Front-of-House reservation detail on iPad — live prototype on OTKit components Open the live prototype
Front of house, on iPad. The same record, re-composed. The tablet adds chrome, not content.
Mark Schroeder

Mark Schroeder

General notes

Special relationship

Food & drink preferences

Seating preferences

History

  • 3Visits3 Group
  • 1Upcoming1 Group
  • 0Cancellations0 Group
  • 0No-shows0 Group

Fri, Oct 27 · Day of visit

9:01 am

Booked for Oct 27 at 6:45 am, party of 4

Alex

SMS disabled

24
Live, not filmed. Every zone is a repeatable pattern.

What it returned

The redesign earned its rollout one dinner rush at a time: a pilot with critical restaurant groups, feedback from real service, then a rollout with the risk contained. Zero regressions in critical workflows.

This [design] feels much more intuitive to use. Though at first the change felt a little confusing, once I got the hang of the tabs I was able to find the notes I needed much faster. I also appreciated the reservation status being easy to find outside of the reservation notes.

Host · large restaurant group, pilot

35 opt-in restaurant groups worldwide, a net gain by week 6. Host time on the card fell 18%, and time to the right note went from 11 seconds to 7. Asked whether *“the redesign made this faster,”* pilot operators agreed by workflow: 71% for seating, 68% for saving time overall, 64% for providing hospitality.

It was also OTKit's first test at real product scale: shared tokens and components across three platforms, fewer custom overrides, and a tighter loop between the system and the teams consuming it.

Screenshot of OTKit documentation site showing how to implement inline theming for legacy screens
Inline theming, added to carry mixed legacy screens before full light and dark themes were prioritized.

What I'd do differently

Categorize the IA by actionability from day one. Things you *act on*, like reservation and table status and experiences, belong in the rail. Things you *refer to*, like visit notes and tags, guest profile and visit history, belong in the card. That is the call that earned the rail, and it took longer to find than it should have.

ACT ON IT // the rail Reservation and table status Experiences REFER TO IT // the card Visit notes & tags Guest profile Visit history
The same inventory, sorted by what you do with it. This is the cut I would start from next time.