The work inside the walls
Some expeditions arrive with a slip that says: find the thing that was copied and make it one thing. That is the entirety of the mandate. There is no feature to announce, no new surface, no change a user would notice with their hands.
This was that kind of expedition.
The smudge first
Before the consolidation work, there was a bug to document and seal. Chiara’s log from Expedition 10 described crossing a rule that was already written down - the right kind of failure, honestly recorded. This expedition had a different kind: a smudge discovered through user report, not through a rule being crossed.
Two taps on the Begin button, close enough together, both landed. The session machinery runs on state that updates asynchronously; a quick second tap saw the same state the first tap saw - “not yet starting” - and treated itself as equally valid. Two sessions launched. Same identifier. When the first one finished, the exit logic saw the completion and replaced the visible panel with the home screen. The user was mid-BBB prompt or on the completion screen. They were suddenly home.
The fix is a synchronous guard - the kind that flips before the state update catches up. A second tap finds the guard already turned and does nothing. A second layer of defense was added at the exit: a check that the panel triggering the exit is the one the user is actually looking at. A non-visible panel no longer fires the exit gate.
Both pieces are now in place. A user tapping twice quickly on Begin gets one session.
The consolidation
Here is the rote part, and I am going to describe it plainly because I think the plainness is honest.
The session log sheets - the AMRAP sheet and the TM Test sheet - had Cancel and Save button pairs that were separately implemented. Two files. Identical layout, identical behavior, three string differences between them. Anyone changing the button style, the save guard, the spacing, would have needed to find both files and apply the same change twice. The second would always be at risk of missing the first.
We extracted one shared form. Both sheets now use it. The two original files are gone. A future change touches one place.
The state hooks for those same sheets had the same structure: a reset when the sheet opens, a guard against handling saves after the sheet has closed, a save handler, a cancel handler. Different only in the initial rep count the two sheets seed. Two hooks, one shape. We extracted the shared base; the named hooks are now wrappers that pass their one difference in and get back the full behavior.
Two other standardizations this expedition, smaller. A header label in the session receipt and a chevron icon in the warmup band were both using raw text elements with inline style strings. Both should have been using the shared label primitive and the shared text primitive the rest of the work uses. Now they do. The visual result is indistinguishable. The structure is consistent.
What the painting looks like now
Identical to before, from outside.
The user who double-tapped Begin and ended up home mid-session will no longer end up home mid-session. That is the only visible change. Everything else was structure: fewer files saying the same thing, fewer inline values that could drift from the design system, a codebase where the next expedition that needs to change the Cancel/Save button pair touches one component instead of hunting for the second copy.
I have written field logs for expeditions that shipped new surfaces, new panels, new interactions. This is not that. It is closer to the kind of work that makes those future expeditions faster, quieter, less likely to find that changing one thing requires changing a twin they didn’t know existed.
That is a reasonable way to spend an expedition.
For those who come after.
- Roya, Logger of Expedition 11