Crash-Free Users vs Crash-Free Sessions: What Firebase Crashlytics Actually Measures
Crash-free users and crash-free sessions are not the same metric. Here is exactly how Firebase Crashlytics calculates each one, which benchmark to hold your app to, how Sentry compares, and the release playbook we use to stay above 99%.

Crash-Free Users vs Crash-Free Sessions: What Crashlytics Actually Measures
The short answer
Crash-free users is the percentage of distinct users who did not experience a crash in the selected period. One user who crashes ten times counts once against the metric.
Crash-free sessions is the percentage of app sessions that ended without a crash. A session starts when the app comes to the foreground and ends when it is backgrounded or terminated. Ten crashes across ten sessions count ten times.
The two numbers are related but never interchangeable:
| Crash-free users | Crash-free sessions | |
|---|---|---|
| Unit counted | Distinct user | App session |
| Sensitive to | How many people are affected | How often crashes happen |
| Typically | Lower | Higher |
| Best for | Deciding whether to halt a rollout | Tracking overall stability trend |
Crash-free sessions is almost always the higher number, because a heavy user with one bad crash generates many good sessions alongside it. If your crash-free sessions look healthy but crash-free users has dropped, you have a crash that hits a specific segment hard — a device model, an OS version, a locale, or a single code path. That divergence is the single most useful signal on the Crashlytics dashboard.
How Crashlytics calculates them
Firebase Crashlytics computes both over a rolling window you choose in the dashboard (last 24 hours, 7 days, 30 days, and so on):
crash-free users = 1 - (users who had >= 1 crash / total users)
crash-free sessions = 1 - (sessions with >= 1 crash / total sessions)
Two things trip people up. First, only crashes count — non-fatal errors you log yourself and ANRs are reported separately and do not move these two percentages. Second, both metrics depend on the Analytics SDK being present for session counting; without it, session-based numbers are unreliable.
What benchmark should you hold?
- 99.9%+ crash-free users — what a mature, well-maintained consumer app should hold.
- 99.5%–99.9% — acceptable, but you have a recurring defect worth a sprint.
- Below 99% — users are noticing. Expect review damage and churn.
Set the floor per release, not per quarter, and check it against the previous version rather than an absolute target — a 0.3% drop on a new build matters more than the absolute figure.
Crashlytics vs Sentry, briefly
Crashlytics is free, deeply integrated with Firebase, and its crash-free metrics are the industry reference point. Sentry costs money but gives you full stack traces with source maps across mobile and backend, richer release health, breadcrumbs you control, and performance tracing in the same tool. We run both: Crashlytics for the headline stability metric and store-facing health, Sentry for actually diagnosing the defect. The rest of this article is the playbook we use to keep those numbers where they should be.
Keeping Crash-Free Sessions > 99 %: Our Playbook with Crashlytics + Sentry
A single crash can nudge a five-star app to four-point-something—and bump you down the App Store or Google Play rankings. At THE USEFUL APPS we treat stability as a feature; every client retainer includes a guarantee that crash-free sessions stay above 99 %.
Below you'll find the exact monitoring, triage, and release loop we've refined while maintaining apps like RouteMate and PHNews. Pairing Firebase Crashlytics (for mobile-first signal) with Sentry (for full-stack visibility) gives us near-real-time insight without drowning our devs in alert fatigue.
Table of Contents
- Why 99 % Isn't Just a Vanity Metric
- Our Two-Layer Monitoring Toolkit
- Instrumentation Checklist (iOS, Android & Flutter)
- Alert Routing: Noise ⟶ Signal
- Release Annotation & Regression Hunting
- Hot-Patch Workflow (24-Hour Fix Pledge)
- Maintenance Retainer Tie-In
- Sentry vs. Crashlytics: Which Handles What?
- Security & PII Considerations
- Key Metrics We Track
- Conclusion
TL;DR
- Instrument everything (Crashlytics SDK + Sentry mobile & back-end SDKs).
- Route alerts through a single Slack channel with severity filters.
- Annotate releases so we can bisect instantly.
- Hot-patch critical issues via feature flags; ship store updates within 24 h.
- Close the loop by feeding crash metrics into sprint retros.
1. Why 99 % Isn't Just a Vanity Metric
Google's internal research shows a direct correlation between crash rate and uninstalls , while Apple's ranking algorithm quietly penalises apps with high "User Terminated" signals. Falling from 99 % to 97 % sounds minor—but if you have 100 k daily sessions, that's 2 000 crashes per day.
Keeping the number above 99 %:
- Protects your App Store rating
- Reduces churn (RouteMate saw a 3 % retention lift after we fixed a background-fetch crash)
- Boosts conversion in paid campaigns (nobody installs a 3.8-star app)
2. Our Two-Layer Monitoring Toolkit
| Layer | Tool | Why we use it |
|---|---|---|
| Device-side | https://firebase.google.com/docs/crashlytics | Best-in-class grouping, real-time alerts within 5 s |
| Service / API | https://sentry.io/ | Tracks crashes, slow queries, and JS errors that still surface as "app issues" to users |
Crashlytics handles native stack traces across Swift, Kotlin, Flutter, and React Native. Sentry handles our Node, Python, or Go back-ends plus any React in webviews. Together, they give us a single view from tap to database write.
3. Instrumentation Checklist (iOS, Android & Flutter)
| Platform | Key integration steps |
|---|---|
| Swift | Add Firebase/Crashlytics via Swift Package Manager, enable generate-debug-symbols in Xcode, upload dSYMs in CI. |
| Kotlin/Java | Add Gradle plugin com.google.firebase.crashlytics, enable the new ND-K stacktrace uploader. |
| Flutter | Use flutterfire CLI, plus firebase_crashlytics plugin > 3.0; run flutter build with --split-debug-info for IOS & Android mapping. |
| Hybrid webviews | Inject Sentry JavaScript SDK so web errors link back to native sessions. |
We commit a monitoring.md file in every repo documenting SDK versions, manual uploads, and DSNs. That doc lives next to the CI config so future engineers see the full picture.
4. Alert Routing: Noise ⟶ Signal
Raw Crashlytics alerts = chaos. We pipe both Crashlytics and Sentry through AWS SNS ➔ Slack with opinionated filters:
- Blocklisted: Known-benign Tesla BLE failure? Ignore.
- Critical: New crash > 0.1 % sessions within one hour -> page engineer on duty.
- Moderate: New crash group with < 0.1 % sessions -> Slack thread.
This reduces false positives by ~70 % compared to default email alerts.
5. Release Annotation & Regression Hunting
In both tools we tag every CI build with:
- Git SHA
- Semantic app version
- Feature flag bundle
- Jira sprint ID
Crashlytics then shows "First seen in 2.13.0 (Build #231)" so PMs can bisect instantly. Sentry's Release Health dashboard tracks crash-free sessions per build , highlighting regressions we might have missed.
6. Hot-Patch Workflow (24-Hour Fix Pledge)
When a critical crash surfaces:
| Hour | Action |
|---|---|
| 0–1 h | Engineer triages, links Jira ticket, sets severity. |
| < 2 h | If flag-guarded code, disable via Firebase Remote Config. |
| < 6 h | Patch branch, automated tests, internal TestFlight build. |
| < 24 h | Submit to App Store + Google Play (expedited review if needed). |
Our RouteMate engagement once hit a nasty SIGABRT in iOS 17 RC. Flag rollback cut crashes to zero in 90 minutes; the store patch landed next day.
7. Maintenance Retainer Tie-In
This process lives inside every Maintenance & Support plan. Clients know exactly what happens when a spike appears—no awkward "scope" arguments. For details on the tiers, read App Maintenance Strategies for Long-Term Success.
8. Sentry vs. Crashlytics: Which Handles What?
| Use Case | Crashlytics | Sentry |
|---|---|---|
| Native Android/iOS crash | ✅ | ✅ (via native SDK) |
| Flutter/React Native JS error | Partial (Flutter only) | ✅ |
| Back-end exception | ❌ | ✅ |
| Slow API tracing | ❌ | ✅ |
| Fatal "out of memory" tombstones iOS 17 | ✅ | ❌ |
We keep both, but if you only have budget for one and your stack is 100 % Flutter, Crashlytics alone covers 95 % of pain points.
9. Security & PII Considerations
- Use Crashlytics data redaction rules to strip email/phone from logs.
- In Sentry, set
sendDefaultPii = falseand addbeforeSendhook. - Ensure DSNs and Google Service Plist files are stored as GitHub Secrets.
- SOC 2 clients often require 90-day log retention; both tools support that.
10. Key Metrics We Track
| Metric | Target | Tool |
|---|---|---|
| Crash-Free Sessions | ≥ 99.0 % | Crashlytics |
| Crash-Free Users | ≥ 98.5 % | Crashlytics |
| Median time-to-acknowledge | ≤ 30 min | Slack alerts |
| Median time-to-fix | ≤ 24 h | Jira cycle |
We pull these into a Monday morning Looker Studio report for each client.
Conclusion
Maintaining > 99 % crash-free sessions isn't magic—it's disciplined instrumentation, fast feedback loops, and the willingness to hot-patch at 3 a.m. Using Crashlytics for native signal and Sentry for end-to-end context, we've helped brands like Skip hold five-star ratings year after year.
Want this playbook applied to your app? Reach out or explore the specifics of our Care, Growth & Scale plans—each one includes the 24-hour fix pledge.
