Your Crashlytics inbox has 40 new issues since Friday. Most are duplicates, three are real, one is on fire. The cost is not the fix — it is the 45 minutes of reading stack traces in a Monday standup before anyone agrees which is which. AI is good at this exact first pass: read the trace, name the area, suggest an owner.
The task
Turn a raw crash log (Crashlytics, Sentry, Firebase) into a 3-line triage card: severity, area, suggested owner. Output one card per issue, no fluff.
When this is the right job for AI
- You already have a code-area map (“payments lives in /billing”, “auth in /session”).
- You have a small team with named owners by area, not “everyone owns everything.”
- You can paste the top frame and the next 5-8 frames — not the full 1,200-line log.
- You will sanity-check the owner suggestion. AI does not know your team’s politics.
What to feed the AI
- The top frame of the stack and 5-8 surrounding frames
- App version where it first appeared
- Affected sessions / users / device counts (whatever Crashlytics gives you)
- The code-area map: file path prefix → owner
- The severity rubric: when is something P0, P1, P2
- Anything the issue has in common with a recent change (“we changed the auth flow in 4.2.0”)
Copy-ready prompt
You are triaging an iOS crash for a 4-engineer team.
Stack (top 8 frames):
0 CRASH __exceptionPreprocess
1 objc_exception_throw
2 -[NSDictionary getObjects:andKeys:count:]
3 -[BillingCoordinator _hydratePurchaseRecords:] (BillingCoordinator.swift:218)
4 -[BillingCoordinator restorePurchases] (BillingCoordinator.swift:74)
5 -[SettingsViewController didTapRestore:] (SettingsViewController.swift:312)
6 UIControlEventInvocation
7 UIApplicationMain
First seen: app version 4.2.0 (current is 4.2.1).
Affected: 218 sessions across 41 users in the last 24 hours.
Device skew: 89% iPhone 14/15, 11% older.
iOS skew: 92% iOS 17+, 8% iOS 16.
Code-area map:
- /billing → owner: Sara
- /session → owner: Jin
- /ui → owner: Mei
- /core, /storage → owner: Ravi
Recent changes:
- 4.2.0 shipped a refactor of BillingCoordinator (Sara) — receipt parsing rewrite.
- 4.2.0 also bumped minimum iOS to 16.
Severity rubric:
- P0: crash-on-launch OR more than 1% of sessions OR blocks revenue path.
- P1: revenue path or auth path, less than 1% of sessions.
- P2: non-blocking, less than 0.2% of sessions.
- P3: cosmetic / log-only.
Output: a 3-line triage card.
Line 1: Severity + one-sentence summary of what crashed.
Line 2: Area (which file / subsystem) + suggested owner + WHY them.
Line 3: First debug step they should take, in one sentence. Be specific (file, line, method).
Rules:
- Do not invent line numbers I did not give you.
- If you cannot tell who the owner is from the area map, say "owner unclear" and propose Sara as escalation point.
- If the severity is ambiguous, default UP one level and explain.
Sample output structure
P1 — BillingCoordinator crashes while restoring purchases; receipt-hydration is force-unwrapping or counting wrong on an empty/partial dictionary. Area: /billing → owner: Sara. She owns the 4.2.0 receipt-parsing rewrite, and the crashing method is
_hydratePurchaseRecords:at BillingCoordinator.swift:218 — directly in her diff. First step: add a guard or unwrap-with-default at BillingCoordinator.swift:218 around the dictionarygetObjects:andKeys:count:call; reproduce with an empty restore response in the sandbox account.
P2 — UI-layer crash from a stale layout pass on rotation; only iOS 16 devices, 0.18% of sessions. Area: /ui → owner: Mei. The top in-app frame is
SettingsViewController.viewWillTransition(line 88). Mei owns settings + transitions. First step: reproduce on iPhone 11 with iOS 16.7 by rotating into split-view at SettingsViewController; suspect the rebuilt constraints in viewWillTransition.
How to refine
- AI invents line numbers → repeat “use only the frames I gave you; do not invent lines.”
- Severity is always P2 → enforce the rubric. “If revenue path is touched, it is at minimum P1.”
- Owner is always the most recent committer → require “match by area first, recent change second.”
- Output is paragraphs → strict “3 lines, fixed structure.”
- AI proposes generic fix (“add error handling”) → demand “first step names file, method, and what to check.”
Common mistakes
- Triaging without a code-area map. AI guesses owner from method names; it will be wrong.
- Pasting only the top frame. The crash site is rarely the cause; AI needs the next 5-8 frames.
- Ignoring device skew. A crash that is 89% iPhone 14/15 on a 60/40 iOS-version split is structural, not OS-specific.
- Auto-assigning to the most recent committer. Recent changes are a signal, not a rule.
FAQ
- Can AI handle obfuscated stack traces? Only if symbols are mapped first. Run dSYM upload, then paste the symbolicated trace.
- What about ANRs / hangs? Same prompt, swap the rubric: “ANR P0 if more than 0.5% sessions; P1 otherwise.”
- Should I batch issues? Yes — feed AI 5-10 stack traces in one prompt and ask for one card per issue. Cuts triage time more than running one at a time.
- What about Sentry breadcrumbs? Paste the last 5-8 breadcrumbs after the stack frames. They often name the real cause.
Related
- AI Bug Report
- AI Incident Postmortem
- AI Release Notes
- AI App Review Appeal
- AI Sprint Planning
Tags: #AI writing #crash-reports #Triage #app-product-ops #Indie dev