MyFamilyTracker
Real-time family location sharing — Firebase Realtime DB for sub-second propagation, WorkManager + ForegroundService for OS-compliant background collection, geofencing via Google Maps API.
Your app didn't change. The OS did. And now you have a critical bug in production. Here's why this keeps happening — and how to catch it before your users do.
On this page
Your app is live. Stable. No new code pushed in weeks. Then an OS update rolls out — and your crash rate spikes overnight.
You didn't change anything. But something is broken. This is one of the most frustrating situations in software, and it happens to every team eventually. Here's exactly why it happens and what you can do about it.
Your app runs on top of an OS. That OS controls memory management, permissions, networking, background processes, media APIs, and dozens of other systems your app depends on. When the OS changes any of those — even "harmless" internal changes — your app can break.
The contract between your app and the OS is never as stable as you think.
[!IMPORTANT] You are not testing your app in isolation. You are testing your app + the OS + the device hardware together. Change any one of them and you have a different system.
Pre-Android 10, an app could request
ACCESS_FINE_LOCATIONACCESS_BACKGROUND_LOCATIONApps that didn't handle this saw background location silently stop working — no crash, no error, just missing data. Users reported "app not tracking" with no stack trace to chase.
// Pre-Android 10: this was enough
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
// Android 10+: you also need this for background access
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />The worst part: apps targeting API 28 or below were temporarily exempt. So the bug appeared only for users who updated their OS while the app was still on an old target SDK. A timing-based bug that only affected a subset of users.
Amazon's Fire OS is an Android fork, and it updates independently of Google's Android releases. We've seen WebView behavior differ significantly between Fire OS versions — rendering quirks, JavaScript engine differences, cookie handling changes.
An app with embedded web content that worked perfectly on Fire OS 7 would render incorrectly on Fire OS 8, with no changes to the app. The WebView engine version shipped in the OS had changed.
[!WARNING] Fire OS and standard Android are not the same. If you ship on Amazon devices, test on Fire OS specifically — Android emulators won't catch these issues.
iOS 14.5 required apps to explicitly request permission before accessing the IDFA (Identifier for Advertisers). Apps that used IDFA without requesting permission saw ad revenue collapse overnight — not a crash, but a business impact.
The app hadn't changed. The OS enforcement had.
Normal bugs come from your code changes. You can diff the code, find the problem, fix it.
OS-update bugs are different:
| Normal Bug | OS-Update Bug |
|---|---|
| Caused by your code | Caused by the runtime |
| Reproducible on any device | Device/OS-version specific |
| Shows up in unit tests | Unit tests won't catch it |
| Fixed by reverting your change | Requires code change to adapt |
| You know when it was introduced | You may not know until users report it |
The most dangerous aspect: delayed discovery. OS updates roll out gradually. A user on a beta OS finds the bug first, leaves a 1-star review, and you have no idea what they're running.
You cannot test every OS version. But you can test strategically.
MUST TEST:
├── Current stable Android (API 35)
├── Previous stable Android (API 34)
├── Minimum supported SDK (API 24 for most apps)
└── Android beta (if available)
SHOULD TEST:
├── API 28 (permission model changes)
├── API 29 (background location)
├── API 31 (exact alarm restrictions)
└── API 33 (notification permission)
DEVICE TYPES:
├── Pixel (clean Android, latest updates)
├── Samsung (One UI skin, most users)
├── Amazon Fire (if targeting Fire OS)
└── Mid-range device (Xiaomi, Realme — different behavior)[!TIP] Add OS version to your crash reporting tags. Firebase Crashlytics lets you filter by OS version. A spike in crashes on one version tells you exactly where to look.
When a new OS beta drops, read the behavior changes section first. Look for anything that touches permissions, background execution, WebView, networking, or storage.
You don't need a full regression suite on the beta OS. Run your critical user paths:
Critical paths to smoke test on new OS:
1. App launch → core feature works
2. Permission requests → grant and deny both work
3. Background → app still works after being backgrounded
4. Notification → arrives correctly
5. Login / auth flow → no silent failuresThis takes 30 minutes on a real device. Do it when the OS beta drops, not when it ships to users.
Set up a crash rate alert split by OS version. If Android 16 drops and your crash rate on Android 16 devices jumps from 0.2% to 3%, you'll see it within hours — not days.
// Tag crashes with OS version in Crashlytics
FirebaseCrashlytics.getInstance().setCustomKey("os_version", Build.VERSION.RELEASE)
FirebaseCrashlytics.getInstance().setCustomKey("api_level", Build.VERSION.SDK_INT.toString())Never release to 100% immediately. Use Play Store's staged rollout:
If an OS-related bug appears, you catch it at 10% — not after every user on the new OS has hit it.
You'll get the 1-star review. Users on OS version X are hitting something. Here's the fastest path to resolution:
[!NOTE] If you can't reproduce on an emulator, use Firebase Test Lab. It has real devices running specific OS versions. $0 for 15 minutes/day on the free tier.
Stop thinking of your app as a static artifact. It's a living system that runs on top of an OS that changes under it.
Every OS update is a new integration test. Treat it like one.
The teams that get blindsided by OS updates are the ones who only test their own code changes. The teams that stay stable are the ones who treat the OS as a dependency — and test that dependency when it changes.
Your code didn't break. But your responsibility is to make sure the system still works — regardless of why.
Sudarshan Chaudhari
AI Systems Builder / Product Engineer
Bangkok, Thailand
Solo Android developer with 13+ years in QA, building Android apps, AI automation systems, and developer tools at SudarshanTechLabs.
Related Posts
Related Apps
Real-time family location sharing — Firebase Realtime DB for sub-second propagation, WorkManager + ForegroundService for OS-compliant background collection, geofencing via Google Maps API.
Building something? Available for Android dev and QA consulting.
Work with meComments — powered by Giscus