Docs

Firebase's session_start Race Condition: Audit Your DAU

Firebase fixed a race condition that dropped session_start events on app launch — how to check whether your DAU and session data were undercounted.

Engagement

Google recently fixed a race condition in the Firebase SDK that caused session_start — the event nearly every DAU, session count, and engagement dashboard is built on — to not fire consistently on app launch. That’s not a cosmetic bug. session_start is usually the anchor event for session-scoping in Firebase Analytics: if it drops intermittently, sessions get merged or lost, DAU trends downward for reasons that have nothing to do with actual usage, and every metric derived from “sessions per user” or “events per session” quietly inherits the same undercount. Because the failure was a race condition rather than a hard crash, it wouldn’t have thrown errors or shown up in crash reports — it would only have shown up as a dashboard number that looked slightly, unaccountably low.

The reason this is worth auditing rather than shrugging off once the SDK is patched: a race condition by definition doesn’t fail the same way every time. It’s more likely to have hit users on slower devices, cold app starts, or certain launch paths (a deep link versus a cold tap on the home screen icon), which means the undercount wasn’t evenly distributed. A team that only looks at the top-line DAU number after patching may miss that one acquisition channel or device tier was disproportionately affected, and any decision made using the biased historical data — a campaign paused for “underperforming,” a feature rated as low-engagement — inherits that bias.

Data Points to Track

  • session_start event rate as a share of total app opens, tracked daily, to spot the gap between known launches and recorded session starts
  • SDK version per session, so pre-patch and post-patch data can be cleanly separated instead of blended into one trend line
  • Launch path (cold start, deep link, notification tap, warm resume), since a race condition is more likely to affect some paths than others
  • Device tier and OS version, to check whether the undercount concentrated on slower or older devices
  • Session count and DAU recomputed on a fixed cohort, comparing the same set of users before and after the SDK patch to isolate the fix’s effect from normal usage change

Setup Steps

  1. Confirm the Firebase SDK version in production and cross-reference it against the release notes for the race-condition fix, rather than assuming every build is patched.
  2. Plot session_start volume against a launch-proxy metric (like app-open notifications sent, or foreground events from a separate SDK) to estimate how large the gap was before the patch.
  3. Segment the pre-patch data by launch path and device tier to identify whether the undercount was concentrated somewhere specific.
  4. Mark the SDK upgrade date as a changepoint in your dashboards, so anyone reviewing historical DAU trends knows not to read a step change as real user behaviour.
  5. Avoid backfilling or smoothing the affected period — flag it as known-unreliable instead, since there’s no way to reconstruct sessions that were never recorded.

Actionable Insights

Once the gap is sized and segmented, the practical output is a correction note, not a data rewrite: any report, campaign decision, or feature evaluation that relied on session or DAU data from before the patch should be re-read with the undercount in mind, especially if it concentrated on a specific device tier or launch path that maps to a channel or cohort you were already treating as underperforming. Going forward, tracking session_start rate as a percentage of app opens — rather than trusting the raw count — gives you an early warning the next time a silent SDK-level bug drags a core metric down without an error to point at.

Expert help

Need help tracking this in your app?

Our team sets up analytics pipelines for mobile and web teams every day. Talk to us and get your first events flowing in under an hour.

Talk to an expert