The same event may fire under unequal conditions across platforms
Aliases: platform event mismatch · lifecycle logging · trigger predicate
What it is
Web, iOS, Android, and desktop clients often share an event name such as page_view or app_open while living in different life cycles: a single-page app fires on route change, a native app on returning from background, a multi-page site on full load. Aligned names are not aligned predicates. Cross-platform contrasts of conversion, activity, or path length may be comparing trigger rules rather than products or people.
Why it happens
Visibility, process models, and rendering pipelines differ, and engineers hook whatever locally “looks like an open.” DOMContentLoaded on the web, a router hook in a single-page app, onResume or scenePhase on mobile, and window focus on desktop, once mapped to one business name, already use different opportunity denominators. Prefetch, split screen, picture-in-picture, and multiple windows make some platforms over- or under-fire. The analysis layer sums by name and therefore adds unlike opportunity structures. Platform difference then leaks into “which surface feels better.”
Studying it
Write each platform’s trigger predicate, deduplication rule, and known life-cycle exceptions as a comparison table, not as one universal spec. Compute cross-platform metrics inside each platform first and compare direction, not absolute level—unless the table shows the predicates are equivalent. Walk the same known tasks on each surface, count actual emits, and mark which surface double-counts an open or misses a return. Keep platform in experimental and analytic strata; do not treat it as a disposable tag.
Where it stops holding
Server-side successes posted through the same idempotent endpoint are usually closer to equivalent across platforms; retries still matter. Content pages that all fire on “first time the content was visible” diverge less. Mini-programs, automotive, and television have their own visibility models and should not be assumed isomorphic with phones. Forcing every surface onto the identical system callback may violate platform rules or waste battery; equivalence is an analytic requirement, not a shared OS hook.
Applying it
- Keep cross-platform dashboards split by default; allow a total only when the comparison table is signed off as predicate-equivalent.
- Write product comparisons as “change under each surface’s own definition”; do not argue experience from “Android opens are twice Web.”
- Onboarding a new surface, run a standard-task emit checklist and align it with existing surfaces before joining shared reports.
- When one surface looks anomalously high or low, inspect life-cycle hooks and deduplication before inspecting the product.
Related
- Same group: Q3.11.1 Logs record behavior but not motive · Q3.11.2 Instrumentation design determines which questions can later be answered · Q3.11.3 Missing events cannot be backfilled after the fact · Q3.11.4 Inconsistent event names prevent joining data across versions · Q3.11.5 Sampling and dropped reports systematically undercount rare actions · Q3.11.6 Ad blockers and privacy settings permanently omit some users
- Adjacent: Q4.10 Generalizability of research conclusions · Q3.04 A/B testing
- Search terms:
cross-platform event inequivalence·lifecycle logging·trigger predicate
Cards in the same group
- Q3.11.1Logs record behavior but not motive
- Q3.11.2Instrumentation design determines which questions can later be answered
- Q3.11.3Missing events cannot be backfilled after the fact
- Q3.11.4Inconsistent event names prevent joining data across versions
- Q3.11.5Sampling and dropped reports systematically undercount rare actions
- Q3.11.6Ad blockers and privacy settings permanently omit some users