Module 18 Lesson 4 of 6 🕑 ~55 min

> cat module-18-4-root-cause-analysis.md

Root Cause Analysis

Resolving a ticket and understanding why the incident happened are two different things. This lesson covers the discipline of finding root cause — and writing tickets in a way that makes the answer reusable the next time the same symptom shows up.

1 Root Cause Analysis & Symptom vs. Root Cause

Consider: the application stopped responding, an engineer restarted the server, the application started working again. The service is restored — but why did the server stop responding in the first place? Possible causes include a memory leak, database exhaustion, a full disk, a certificate failure, thread exhaustion, a software defect, a network failure, or a dependency outage. This is where root cause analysis becomes important, and it means repeatedly separating the symptom from the cause:

SymptomUsers cannot log in.
Immediate errorAuthentication service unavailable.
Deeper issueDatabase connections exhausted.
Root causeA software defect causes connections not to close.

A strong investigation keeps asking "why?" at every layer instead of stopping at the first explanation that makes the alert go away.

2 The Five Whys & Timeline-Based RCA

One simple RCA technique is the Five Whys — keep asking "why" until you hit something you can actually fix:

Why could users not authenticate?
  Because the authentication server was unavailable.
Why was it unavailable?
  Because the application crashed.
Why did the application crash?
  Because memory usage reached 100%.
Why did memory usage reach 100%?
  Because a process continuously allocated memory.
Why did the process continuously allocate memory?
  Because of a memory leak introduced in the latest software release.

Root cause: Software memory leak.

For major incidents, a timeline often reveals cause and response effectiveness better than a five-step chain alone:

08:00  New application version deployed
08:20  Memory usage begins increasing
09:15  First authentication errors
09:22  Monitoring alert generated
09:27  Service desk receives user reports
09:30  Incident declared
09:48  Application restarted
09:52  Service restored
11:30  Engineering identifies memory leak

3 Root Cause vs. Trigger & Contributing Factors

These aren't always the same thing. A backup process starting is a trigger; if it then fills the disk because of insufficient capacity combined with uncontrolled temporary file growth, that combination is the underlying root cause — the backup itself didn't necessarily contain a defect, it just exposed a weakness that was already there.

Major incidents often have multiple contributing factors, and good RCA resists the temptation to oversimplify:

Root Cause: Database connection leak.

Contributing Factors:
- Monitoring threshold too high
- No automated restart
- Insufficient capacity
- Alert not routed to on-call engineer
- Deployment testing did not include sustained load

4 Corrective Actions, Workaround vs. Fix & Known Errors

An RCA should produce actual actions, usually spanning several time horizons:

Immediate:  Restart affected service.
Short Term: Increase database connection pool.
Medium Term: Deploy software patch.
Long Term:  Add connection utilisation monitoring.
Process:    Add load testing before future releases.

A workaround reduces impact without removing the root cause — restarting the service every 24 hours might prevent the leak from causing outages, while the permanent fix is actually upgrading to the version that corrects the leak. Tickets should clearly state which one you delivered: "Workaround implemented, permanent fix pending" is a very different statement from "resolved."

Some organisations maintain a known error database so the next engineer doesn't have to re-run the same investigation: "Known Error: Authentication service may exhaust memory after approximately seven days under high load. Workaround: restart service. Permanent Fix: upgrade to release 8.x.x." Repeated resolutions are exactly the kind of thing that should graduate into a Knowledge Base article (Module 17 covers writing these well) — if support gets 100 tickets asking how to clear the Windows DNS cache, that's a KB article, not 100 separate investigations.

5 Good Ticket Titles & the Description Template

Which of these ticket titles would you actually be able to find again by searching six months later: "System broken," or "Azure-hosted application returning HTTP 503 after deployment"?

Reveal the answer

The second, obviously — but it's worth naming why: a good title contains the exact symptom, the exact error, and enough context (which platform, which trigger) that someone searching for their own version of the same problem finds it. "HELP!!!!" and "System broken" are unsearchable; "MFA push notifications not reaching Android devices" or "Production VPN authentication failing for EMEA users" tell you what's wrong before you've even opened the ticket.

A useful description template to reach for every time:

ISSUE            Describe the problem.
BUSINESS IMPACT  Who is affected? How many users? Production or test?
START TIME       When did the problem begin?
ENVIRONMENT      Production / UAT / Development, app version, OS, cloud platform
EXPECTED RESULT  What should happen?
ACTUAL RESULT    What actually happens?
ERROR            Exact error message.
REPRODUCTION     Steps required to reproduce.
CHANGES          Any recent changes?
TROUBLESHOOTING  What has already been tested?
LOGS             Relevant timestamps and correlation IDs.