← All posts
Shipping25 June 20268 min read

Reading crash reports without panicking

A triage order that turns a wall of stack traces into a short list of real bugs.

A wall of stack traces is not a to-do list. Here is the triage order that turns it into a short one.

Sort by users affected, not by count

One user in a restart loop can generate hundreds of reports. Ten users hitting something once is the bigger problem. Crashlytics will sort either way — pick users.

Read the breadcrumb, not the top frame

The top frame is usually framework code and tells you nothing. What happened just before is where the bug is.

NullPointerException
  at PuzzleGrid.onCell(PuzzleGrid.kt:88)

Line 88 is where it died. Why the value was null is three screens earlier, in whatever let an unfinished puzzle load.

Group by what they have in common

Same OS version? Same device manufacturer? Same locale? A crash that only appears in one locale is almost always a date, number, or string-format bug, and you will never reproduce it on your own phone.

Decide, then move on

Three buckets: fix now, fix next release, or accept. An OEM-specific crash on a four-year-old ROM affecting two users is allowed to stay in bucket three.

Written by Sulton UzDev. Get new posts by email →

Sulton UzDev
Senior Android Developer · Kotlin, Compose & KMP · I build the app and its backend
© 2026 Sulton UzDevUzbekistanBlogProjectsAboutSubscribe