anr-watchdog-triageDiagnose hangs and OS kills that never throw: Android ANRs, iOS watchdog terminations and hangs, and memory-pressure kills such as jetsam. Map each kill to its cause first — an ANR trace whose main thread is blocked on a lock, disk I/O or a binder call; a watchdog kill because launch or resume ran o
app-size-budgetCut a native app's download and install size and keep it cut. Start from the size the store reports per device, not the IPA or AAB on disk; decompose it with an App Thinning size report or bundletool and a link map; cut in a fixed order — duplicate and unused assets, extra architectures, image forma
async-ui-racesRemove race conditions from client code that talks to a server: classify the race first - out-of-order responses, double submit, optimistic updates diverging from the server, state set after unmount - then fix each with its own tool: request keys or AbortController so the latest wins, a disabled con
battery-drain-diagnosisFind what drains the battery and heats the phone in a native iOS or Android app, and prove the fix. Split foreground from background drain first, trace a scripted scenario on a physical device with batterystats, the Android Studio Power Profiler, Xcode's energy gauge and MetricKit, and check suspect
bfcache-eligibilityMake back and forward navigations restore instantly from the browser's back/forward cache: run the DevTools back/forward cache test and read its not-restored reasons, clear blockers in the order they usually occur (unload handlers moved to pagehide, Cache-Control: no-store on pages that do not need
browser-memory-leak-huntFind and fix a memory leak in a long-lived browser page: confirm the growth is JavaScript heap or DOM rather than images or GPU, run the three-snapshot technique (warm up, snapshot, repeat the action ten times, snapshot, repeat, snapshot) keeping only objects allocated between the first two snapshot
crash-triagePrioritise native iOS and Android crashes so each release fixes the ones hurting most people. Verify symbolication first — dSYM UUIDs, the R8 mapping.txt, native symbols — since an unsymbolicated crash is a pipeline bug before an app bug; then group by signature, rank by affected users not events, s
csp-report-only-rolloutIntroduce a Content-Security-Policy without breaking the site: start with Content-Security-Policy-Report-Only and a hardened report endpoint, read about two weeks of violation reports grouped by directive, blocked source and page, move scripts to per-response nonces or hashes with strict-dynamic rat
datetime-bug-huntFix off-by-one-day, wrong-hour and daylight-saving bugs in apps and their APIs. Classify each temporal value as an instant, a local wall-clock time or a calendar date; store instants in UTC, wall-clock times with an IANA zone name rather than an offset, and dates as dates, never midnight timestamps;
deep-link-routingMake https links open the right screen in a native app: iOS universal links, Android App Links and deferred links for people without the app. Host apple-app-site-association and assetlinks.json at their exact well-known paths with no redirect and a JSON content type, check team and bundle IDs and th
deploy-version-skewStop tabs opened on an earlier release breaking when a new one ships: keep earlier releases' hashed assets on the origin and CDN rather than deleting them, upload assets before the HTML that names them, return a real 404, not the SPA fallback, for a missing chunk, stamp the live build id on API resp
hydration-mismatch-huntFind why server-rendered HTML and the first client render disagree, and fix the cause rather than the warning: diff the raw server HTML from curl against the parsed DOM and the first client render, never the final DOM, then check the five usual sources (time, randomness or locale read during render;
lie-fi-resilienceMake a mobile or web client survive bad networks, not only no network: reproduce under conditioning at 3G, at 100% loss and on a link that is up but carries no data (captive portal, lie-fi), give every request a deadline, a capped retry budget with jittered backoff and an idempotency key, derive the
locale-edge-sweepFind internationalisation defects by sweeping every screen through a fixed hostile locale set, not the next market's language. Externalise strings as ICU messages, then sweep: a pseudo-locale with about 40 percent expansion, Turkish dotless i in case mapping, right-to-left with logical properties, G
mobile-startup-and-jankMake a native app open fast and scroll smoothly. Measure cold start on a low-end physical device in a release build with Macrobenchmark, Android vitals, XCTest launch metrics, MetricKit and Instruments; split launch into pre-main or process start, app initialisation and first frame; list every SDK i
on-device-migration-safetyShip a change to an app's on-device database — Core Data, SwiftData, Room, SQLite — when the store cannot roll it back and every phone migrates alone. Enumerate every app version still in the field from analytics, keep a fixture database per schema version and run migrations from every one in CI, no
push-notification-deliveryFind why a push notification did not arrive or did not show by walking the delivery chain in order: permission, token registration and refresh, the APNs or FCM request (push type, priority, collapse key, expiry), the provider's response with dead tokens deleted on 410 or UNREGISTERED, then on-device
pwa-service-workerMake a web app work offline and install cleanly, with a way out when its service worker goes wrong: ship the rescue first, a no-op worker at the same URL that clears caches and unregisters itself; pick a strategy per resource class (precache the hashed shell, stale-while-revalidate for tolerant read
text-input-edge-casesHarden text fields against what people type, paste and autofill: count graphemes with Intl.Segmenter rather than .length, ignore Enter during IME composition, normalise to NFC before comparing or storing, trim once when saving, never reject a name with a pattern, keep client and server limits in one
web-app-seoMake a JavaScript-rendered site indexable: fetch each template without JavaScript first and compare it with the rendered HTML from Search Console's URL Inspection, then fix in order - rendering mode, status codes and soft 404s, canonicals, truthful sitemap lastmod, reciprocal hreflang, valid structu
web-vitals-triageFind why a Core Web Vital is poor for real users and fix the part that dominates: refuse lab scores until p75 field data is split by device and URL group, pull attribution (the LCP element and its four sub-parts, the slow interaction's target with its input delay, processing and presentation phases,
webkit-only-bug-triageTriage a bug that only happens in Safari or on iPhone and iPad: reproduce it in real WebKit (a device, the iOS Simulator or Playwright's WebKit build) with Web Inspector attached before reading code, then check the usual causes in order: 100vh against dvh and the safe area, inputs under 16px zooming