All technical case studies
TECHNICAL CASE STUDY / PRODUCTION STABILITYREACT NATIVE / IOS & ANDROID

React Native Crash Debugging with Firebase Crashlytics

My work on Khedmah Delivery includes maintaining customer, driver, and vendor React Native apps, improving error handling, investigating production issues, and monitoring releases. This study connects that experience with a practical crash-debugging workflow: find an actionable report, reproduce the failing journey, fix the cause, and check the released version. The workflow below is guidance informed by that work, rather than a reconstruction of a single incident.

FIREBASE CRASHLYTICSERROR HANDLINGANDROID & IOS

01 / THE CHALLENGE

A production failure rarely arrives with reproduction steps.

Delivery apps combine authentication, ordering, payments, notifications, and live tracking. A failure during startup or an order update can leave a user unsure whether to retry, wait, or reopen the app. A successful development build does not establish that these journeys work on customers’ devices.

The first challenge is identifying the kind of failure. An unhandled JavaScript exception, a native crash, a frozen interface, and a handled API error need different evidence. Treating them all as crashes can hide the actual problem and make stability reports misleading.

02 / THE APPROACH

Connect the report to a user journey and a specific release.

In Khedmah Delivery, my responsibilities included API and error-state handling, production monitoring, and suitable hotfixes. For a crash investigation, I would use the following sequence to turn those responsibilities into a reviewable fix.

01

Confirm that reporting works before trusting the dashboard

Validate crash reporting in a controlled test build and confirm that reports identify the correct app version and platform. Keep test events separate from production analysis. An empty dashboard can mean missing telemetry; it does not establish that the app has no failures.

02

Recover a readable release stack trace

Release stack traces may be obfuscated. Preserve the JavaScript source map matching the shipped bundle, including the correct OTA bundle when relevant. Native Android mapping files and Apple debug symbols serve different purposes. Check the reporting integration’s support rather than assuming that native symbol uploads also resolve JavaScript frames.

03

Reproduce the journey around the failure

Record the affected release, device, operating system, screen, and last meaningful action. For an ordering app, useful checks include expired authentication, a slow initial request, missing response fields, and returning from the background. These are investigation scenarios, not a claim that every one caused a Khedmah incident. Use sanitized diagnostic context without payment details or access tokens.

04

Make API failures recoverable

A failed request should leave the screen in a defined state. Clear loading indicators, handle absent data deliberately, and show a useful recovery action. Avoid automatically replaying order or payment submissions: first establish whether the server accepted the original operation and whether the API supports safe retries.

05

Fix the cause at the appropriate boundary

A render error boundary can provide a fallback for supported React rendering failures, but it cannot catch every asynchronous error or native crash. Handle request failures where they occur, investigate native failures with platform evidence, and keep enough diagnostic information to understand an unexpected condition instead of silently swallowing it.

06

Validate the shipped fix, not only the local change

Repeat the failing journey in a release build, then check nearby flows such as login, cart updates, checkout, and notifications. After rollout, review the affected version and whether the same issue recurs. Use the supported release mechanism for the change; native code and dependency changes can require a new store build.

Relevant technology

React NativeFirebase CrashlyticsJavaScript / TypeScriptREST APIsRelease source mapsAndroid and iOS diagnosticsProduction monitoring

03 / WORKFLOW

How I would take it from risk to implementation.

01

Identify the failure type and affected app release.

02

Collect readable stack traces and sanitized journey context.

03

Reproduce the issue with matching build and network conditions.

04

Implement the fix and verify recovery without duplicate operations.

05

Test the release build and monitor recurrence after rollout.

04 / OUTCOMES

What this approach supports.

3 app rolesCustomer, driver, and vendor apps in the underlying delivery work
Defined recoveryA design goal for failed requests and interrupted journeys
Release contextReports and fixes evaluated against the affected version
Repeatable checksA validation workflow for the failing journey and nearby flows

Crash-free sessions and crash-free users are different measures. Any before-and-after comparison needs a consistent metric, a defined observation window, release adoption, and enough traffic to be meaningful. A short crash-free window does not guarantee future stability. This study describes the investigation and validation process without assigning it a new numerical improvement.

CONTINUE EXPLORING

Technical references

Share the affected platform, app version, and failing journey.

Discuss a React Native crash fix