The problem

The client produces large conferences. The mobile app and the front desk were both supposed to know the room. Room changes during the event updated the schedule tool and reached the app late, or not at all, when the export job lagged. Attendees walked to the old room, then to the desk. The desk question was almost always the same: where is this session now.

Staff had a group chat for changes. It was accurate and unsearchable. By the afternoon nobody trusted the app, and the desk became the schedule.

Why live means the schedule tool, not a copy

A copy of the schedule is how the app fell behind. The assistant answers a room question by reading the schedule tool at that moment, and it says the session is not on the schedule if the lookup misses. It does not answer from a snapshot taken that morning.

Architecture

The schedule tool is queried per question

Session name, speaker, and time are looked up when the attendee asks, in the app and at the desk kiosk. The reply includes the room and the updated time if the tool has one. A morning export is not on the path.

Room changes are the test, not the happy path

We built the evaluation from the client's last event change log: sessions that moved, sessions that were cancelled, sessions that kept the name and changed the speaker. An answer that returns the pre-change room fails even if the wording is polished.

Personal schedule stays permissioned

Questions about 'my agenda' use the registration record for that attendee, the same entitlement the app already checks. The assistant cannot read another attendee's agenda. A question it cannot scope to the signed-in attendee is declined.

The front desk sees the same answer

Kiosk and app use one lookup. Staff are not maintaining a second list. If the tool is down, both say so and point to the desk, which is the fallback the client already staffs.

A design decision worth calling out
We did not add a model that guesses a room from the session title when the lookup fails. A wrong room is a walk across a venue. A miss that says 'check the desk' is the correct failure.

Challenges and tradeoffs

Results

At the next event, room questions at the front desk were 3.1 times lower than the client's count from the previous edition of the same conference. Reviewed answers that named a room all matched the schedule tool at the time of the question. Cancelled sessions in the sample were not given a room.

The desk is still there for badge problems and everything the schedule does not know. It is no longer the only place that has heard about a room change.

What we'd do differently

We would have tested title mismatch on the previous event's data before writing the matcher. The schedule id path was always going to be the real fix, and we spent days on title fuzzy-match that we then narrowed.