Leaderboard & Counting Service  ·  View 04 of 21  ·  People and journeys

Journey — Where Do I Stand

The loop run millions of times an hour; the trough is not latency.

Editable source SVG draw.io All views
Product member opens the app 4× a day Goal — See my standing, and see my own effort reflected in it Trigger — Finishing a lesson, a ride, a round — or a push notification about the league Done when — A rank they believe, with their last action visibly counted 1 · Earn does the thing 2 · Open league screen 3 · Find me ◆ moment of truth 4 · Compare neighbours 5 · Return hours later ◆ moment of truth What they do Completes a session Taps the league tab Looks for their row Reads who is near Checks if it held What the platform does Event accepted, logged p99 25 ms Top-N from cache p99 40 ms Rank + own-write overlay Neighbourhood slice Projection advanced How it feels Trusts it Fine Stops believing it Where it hurts Own points not there yet Rank differs on refresh Rank moved with no reason What answers it Own-write overlay ≤ 1 s Version pinned per session "as of" on the screen Journey — A Member Checks Where They Stand The trough is not latency. It is a member's own contribution missing from a number that is otherwise correct — which is why read-your-writes is a requirement and global freshness is only a budget. v 1.0 · owner Platform Architecture · date 2026-10

The finding

  • The sentiment drops at "find me", not at "open". A list that loads in 40 ms and does not contain the member's last action reads as broken, while a list that is 20 seconds stale and does contain it reads as fine.
  • That asymmetry is why freshness is spent on one member's own contribution and budgeted for everyone else's view of the ranking.
  • The second trough is a rank that moves between two reads in one session. Pinning the projection version per session costs nothing and removes it.

What the platform owes here

  • Own value and rank band within 1 second of an accepted event (assumption).
  • Top-N p99 ≤ 40 ms on cache hit; rank-of-member p99 ≤ 120 ms (assumptions).
  • An as-of timestamp on every response, so the product can say "as of" rather than imply live.

Risks

  • The overlay is a second code path for the same number. If it ever disagrees with the projection by more than the member's own delta, the platform has two answers and no way to choose.
  • Pinning a version per session means a long-lived session can read a projection the platform would rather retire.