Case study 03 · Support & Documentation
Turning recurring support tickets into self-service fixes
Our team was spending 35% of every sprint on the same handful of support escalations. I used ticket data to separate “needs a runbook” from “needs a product fix” — and drove both.
- Client
- Fortune 500 Enterprise · Public Service
- My role
- Software Engineer · support analysis & documentation owner
- Timeline
- 4 months
- Team
- 6 engineers, client support desk, platform owners
65%
fewer Tier-2 escalations
75%
faster mean time to resolve
14
runbooks published
01
The problem
Support escalations interrupted engineers constantly. Each one was “quick,” but together they consumed 42 hours per sprint and made roadmap commitments unreliable.
02
Discovery
I exported 6 months of tickets (~850 total items), categorized them by root cause, and ranked them by frequency × time-to-resolve.
| Root cause | Share of tickets | Best fix |
|---|---|---|
| Configuration / access issues (Role permissions, API token resets, environment misconfig) | 45% | Runbook + self-service |
| Integration timeouts (Third-party webhook failures, database connection pooling | 25% | Product fix (retries) |
| Data mismatches (Sync delays between auth provider and local DB) | 18% | Monitoring + alerting |
| Everything else (Edge-case bugs, feature requests) | 12% | Case-by-case |
03
The solution
- 01Ticket dataExport & normalize
- 02Categorize & rankFrequency × effort
- 03Runbooks & KBTier-1 can self-resolve
- 04AlertsCatch issues before users do
- 05Backlog fixesEliminate root causes
Runbooks were written for the support desk, not for engineers: plain-language symptoms, step-by-step checks, and a clear “escalate if” line. Each was reviewed by the person who'd actually use it.
04
Trade-offs & alignment
Product owners initially saw this as “support work.” Framing it as reclaimed roadmap capacity — 30 hours a sprint returned to feature delivery — turned it into a shared priority.
05
Outcome
- Tier-2 escalations fell by 65% within 3 months.
- Mean time to resolve dropped from 4.5 hours to 25 minutes (0.4 hours).
- 8 root-cause fixes shipped from the ranked backlog.
06
What I'd do differently
I'd add a lightweight “was this helpful?” signal to every runbook from launch. Usage data would have told us which docs needed rewriting long before the next ticket did.