Part 9 · 1 chapters · ~10 min

Operating Across Markets

Running a multi-country platform day to day: country as a first-class label on every signal, SLOs and alerts per market, a feature parity matrix generated from configuration, configuration changes treated as deploys, incidents and degradation scoped to the affected country, and a monthly portfolio review.

18

Healthy overall, broken in one country

code
# transfer success rate by country, worst first (PromQL)
sort(
  sum by (country) (rate(transfer_completed_total[30m]))
  /
  sum by (country) (rate(transfer_submitted_total[30m]))
)

# client events carry the same label
rum.track('transfer_submitted', { country: session.country, rail: draft.rail, appVersion: BUILD_VERSION });
practicewhat it prevents
country label on every signala market broken for hours while global dashboards look green
SLOs and alerts per marketsmall markets never paging because they are a rounding error in the total
parity matrix from configssupport promising a feature that is not live in that country
config changes with canary and rollbacka limit typo blocking every transfer in a country
per-country banners and degradationpausing every market because one rail is down
the frontend's share
The client knows its country and app version, so RUM and error tracking can be sliced the same way as the backend. A crash that only happens with one country's document type shows up in minutes instead of in a support queue.
OPERATING ACROSS MARKETS
observability sliced by country, SLOs per market, feature parity as data, and incidents that affect one country only
swipe the figure sideways, or tap expand for full screen
1/6
country dimension
Country as a first-class dimension: every metric, log, trace and client event carries the tenant or country (a small, fixed label set, so cardinality stays safe). A global success rate of 99.5% can hide a country at 92%; dashboards show the worst market, not just the average.