◉RORK LABJP
●GPT-6.1 SOL — Added to Rork's model menu (09-29) with Low, Medium and High effort; included on Pro and Max●SONNET 5.5 — Claude Sonnet 5.5 is selectable: strong at UI design and faster than Sonnet 5 (09-28)●SDK 58 — Beta since 09/15 with no stable date yet; running projects in Expo Go has required login since 09/03●WIDGET — A write-up traces an iOS widget that renders black only in production builds●OBSERVE — EAS Observe now records native crashes too (SDK 57.0.21 or later, 10/07)●NEW — My App Open Ad Only Showed When the App…●GPT-6.1 SOL — Added to Rork's model menu (09-29) with Low, Medium and High effort; included on Pro and Max●SONNET 5.5 — Claude Sonnet 5.5 is selectable: strong at UI design and faster than Sonnet 5 (09-28)●SDK 58 — Beta since 09/15 with no stable date yet; running projects in Expo Go has required login since 09/03●WIDGET — A write-up traces an iOS widget that renders black only in production builds●OBSERVE — EAS Observe now records native crashes too (SDK 57.0.21 or later, 10/07)●NEW — My App Open Ad Only Showed When the App…
Articles/Dev Tools
⬡ Dev Tools/2026-05-21Advanced

Automating Production Incident Response as a Solo Developer — Crashlytics, Sentry, Slack Routing, and Staged Rollback

Twelve years of running my own iPhone and Android apps, accumulating 50 million downloads, taught me a specific shape for production incident response. This article shares the Crashlytics + Sentry double layer, Slack routing into interrupt and log channels, and a Remote Config plus EAS Update staged rollback I keep returning to.

Rork585Crashlytics12Sentry6SlackRemote Config10Incident ResponseArchitecture22Indie Developer11AdMob73

✦ Premium Article

Who Notices When AdMob Revenue Drops at 2 a.m.?

I have been shipping iPhone and Android apps as a solo developer since 2014. The catalog has crossed 50 million cumulative downloads, but I still receive every production alert by myself. There is no team, no on-call rotation. The night AdMob eCPM halved at 1 a.m., the night Crashlytics Fatals spiked at 2:30, the night a paywall change wiped purchases — all of those happened with me asleep.

For the first several years my pattern was the same: wake up, see the revenue dip, scramble to edit Remote Config with bleary eyes. Editing live production values half-awake is a way to cause a second incident, and I have caused several. Step by step I built scaffolding around the late-night hours, and the system now usually lands at one specific state by sunrise: a stage-one rollback has already executed automatically, leaving me a calmer surface to inspect at breakfast.

This article walks through the architecture and code behind that scaffolding. It is not the incident response material from team-oriented SRE books; it is what one person can realistically maintain.

Three Layers of Detection I Settled On After 12 Years

The first thing worth naming is that a single-layer alerting setup misses too much. I monitor three layers in parallel:

  1. Crash layer — the app exits, fails to launch, or always white-screens on one route.
  2. Functional layer — the app does not crash, but purchase buttons do nothing, push delivery stalls, login fails silently.
  3. Revenue layer — eCPM collapses, purchase rate sags, churn spikes, or new install velocity drops.

Years ago, watching the crash layer alone was enough. Today, the functional and revenue layers cause more dollar-weighted damage. Crashlytics can sit at zero Fatals while AdMob eCPM is sixty percent below yesterday — that day's revenue is gone regardless. Three layers, three different notification policies, three different escalation paths.

LayerPrimary signalSecondary signalNotification priority
CrashFirebase CrashlyticsSentryCritical, immediate
FunctionalSentry (errors + performance)Firebase PerformanceHigh, within 5 minutes
RevenueAdMob API + RevenueCatFirebase AnalyticsMedium, within 30 minutes

"Sending the same data to two services" looked wasteful for a long time, but the cost of the redundancy is small compared to the cost of one missed Fatal during a release. I now treat the double instrumentation as cheap insurance.

✦

Thank you for reading this far.

Continue Reading

What follows includes implementation code, benchmarks, and practical content we hope you'll find useful. This site runs without ads — server and development costs are supported entirely by members like you. If it's been helpful, we'd be truly grateful for your support.

WHAT YOU'LL LEARN
✦A working pattern for binding Firebase Crashlytics issue cluster keys to Sentry fingerprints so the same crash collapses into one ticket across both services.
✦A Slack routing design that separates an interrupt channel (Critical, mentions allowed at night) from a log channel (silent, daytime triage), with the exact thresholds I use.
✦A Remote Config plus EAS Update rollback script that walks a feature down 100 → 50 → 10 → 0 percent with manual confirmation between stages, completing within five minutes.
Secure payment via Stripe · Cancel anytime
✦

Unlock This Article

Get full access to the rest of this article. Buy once, read anytime. This site is ad-free — your support goes directly toward keeping it running.

or
Unlock all articles with Membership →
Share

Thank You for Reading

Rork Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • ✦Copy-paste ready implementation code
  • ✦New advanced guides published daily
  • ✦$5/mo or $10 for lifetime access
View Membership →

Related Articles

⬡ Dev Tools2026-07-24
Resolving App Config in Three Layers: Merging Defaults, User, and Remote With Bounded Overrides
A single type-safe layer that merges compiled defaults, user preferences, and remote config. So a broken remote value never takes your app down, each key gets its own override strength, plus schema validation and range clamping, built from a real production incident.
⬡ Dev Tools2026-06-12
Building a Developer Debug Menu Into Your Rork App — Verify Ads, Purchases, and Remote Config Before Release
A production-safe developer debug menu for Rork apps — switch environments, force test ads, simulate entitlements, and override Remote Config, with working TypeScript code and the pitfalls I hit running six apps.
⬡ Dev Tools2026-05-19
Rolling Out Firebase App Check in Rork Without Breaking AdMob or Crashlytics
A practical, staged rollout for Firebase App Check in Rork apps that keeps Crashlytics reporting, Realtime Database listeners, and AdMob payouts intact — written from running AdMob-funded indie apps in production.