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.
Challenges and tradeoffs
- Session titles in the app and the tool did not match. Marketing titles and schedule titles differed by a subtitle. Fuzzy match created two wrong rooms in testing. We match on the schedule id the app already stores, and we only fall back to title match above a threshold the client tested on the change log.
- Cancelled sessions were still being given a room. The status field was ignored if a room was present. Cancelled now wins, and the reply says cancelled rather than naming the room the session used to have.
- Wi-Fi loss in the hall made the live lookup look broken. The kiosk caches the last successful schedule for a short window the client set, shows the timestamp, and refuses to present it as live past that window. Attendees see the age of the answer.
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.