Instrumentation · December 2025
Metric windows and late-arriving events
Mobile clients go underground. They queue events in airplane mode, behind battery savers, and after a crash. If your experiment window closes when the meeting starts, you are reading a partial letter.
Daniel Rojana opens Cohort Grammar with a timeline, not a funnel. On the left: user assigned. In the middle: user saw the screen. On the right: events that arrive hours or days later. Most dashboards collapse those three moments into one timestamp called “occurred_at.”
Occurred versus received
If you filter on received time, a late Android burst can land inside a window that the user already left. If you filter only on occurred time but close the query before late events land, iOS — which often flushes more politely — looks healthier than it is.
We ask teams to publish both: a primary window using occurred_at plus a documented grace period for received_at. The grace period is a product decision. Pretending it is zero is also a decision, just an unadmitted one.
ATT and permission changes mid-test
When a user grants tracking permission on day four, they may join a metric that the first three days could not see. That is not lift. That is a population change. Week 2 of Signal Lab treats permission flips as a reason to split the ledger, not to average harder.
A modest rule
Do not close a window on Friday night if a large share of your users are on Android OEM builds common in Thailand. Wait until Monday afternoon, or pre-register that you will not. Either choice is honest. Silence is not.
The full worksheet sits inside Cohort Grammar. This note exists so the limitation is public even if you never take a seat.