The Fixed Investigation Order
coreadvancedUnder pressure, people debug by guessing at the part of the system they know best. A fixed order removes the guessing: state the symptom precisely, check what changed recently, then walk outward through metrics, logs, traces, dependencies, network, permissions and quotas. Each step either explains the symptom or eliminates a whole region of the system.
Think of it as
Debugging is a search, and the order is chosen by how much each check eliminates per minute. "What changed?" comes second because it explains most incidents in one question. Quotas and IAM come late not because they are rare but because they produce specific errors, so by the time you reach them you already know where to look.
What we're doing: Work one incident through the order and watch the search space collapse.
- 1
- "Slow but not failing" is a different investigation from "failing", and separating them at step 1 saves the most time of any decision here.
- 6
- Step 2 rarely proves anything on its own, but it produces the candidate that later steps confirm or discard.
- 12
- Flat CPU on the tier that looks slow is the signal to stop looking at it — saturation is somewhere downstream.
- 18
- Traces answer the "which hop" question directly, which is why they sit above dependency inspection rather than below it.
- 23
- Stopping is part of the method. Continuing past a full explanation is how one incident becomes three theories.
Why this works: The order is not sacred, but having one is. Six steps ran, four were unnecessary, and every step either eliminated a region of the system or produced the next candidate. The same incident debugged by intuition usually starts at logs, finds nothing because there are no errors, and loses twenty minutes before anyone looks at the database.
Opening the logs first
Wrong
Better
What you see: Twenty minutes reading normal log lines from a service that turns out to be healthy, while the actual failure is one tier away.
Why: Logs are high volume and low selectivity: they tell you what happened in one component, but not which component to read. Metrics answer "where and when" in seconds and turn the log search from an open-ended read into a filtered query over a known time window.
- A funnel of ten numbered steps, each narrower than the one above.
- Step 1, symptom: which endpoint, what error, since when, what fraction.
- Step 2, recent change: deploys, config edits, flags, scaling events, dependency releases.
- Step 3, metrics: where and when — error rate, latency, saturation, queue depth.
- Step 4, logs: what the failing requests actually said.
- Step 5, traces: which hop consumed the time.
- Step 6, dependency health: database, cache, queue, third parties.
- Step 7, network: security groups, NACLs, routes, DNS.
- Step 8, IAM: AccessDenied naming principal, action and resource.
- Step 9, quotas: throttling and limit-exceeded errors.
- Step 10, cost and anomaly signals: an unexplained spend change at the same minute.
- A note at the bottom: stop at the first step whose answer explains the symptom.
Each step: the question, where to look, and what a hit looks like
Together
Remember: Symptom, recent change, metrics, logs, traces, dependencies, network, IAM, quotas, cost — in that order. Write the symptom down including what is not affected, because that line eliminates more of the system than anything else you will do, and stop as soon as the symptom is fully explained.
See also: common investigations · correlation ids and request ids · network troubleshooting order · metrics logs traces and alarms

