Debugging Lab
The frontend says Payment failed. Behind it is one of ten causes across five layers. Gather evidence one probe at a time, watch which causes stay consistent with everything you have seen, and name the cause before you touch anything. Symptom → observation → hypothesis → experiment → evidence.
Only the symptom and the context are shown. The cause is hidden until you name it.
- — The storefront moved from shop-old.example to shop.example at 14:00 today.
- — The API still lives at api.shop.example.
- — Failures started at 14:05.
Dots are cost: one is seconds in a tool you already have open, three is access and time.
Nothing observed yet. Pick a probe — cheapest first is a reasonable habit, but the probe that splits the candidates is the one that matters.
10 causes agree with everything observed. Titles appear once three or fewer remain — until then, the number is the evidence.
A hypothesis names what you expect a probe to show. If the probe shows something else, the hypothesis is dead — that is the experiment.
The classic first move with no hypothesis behind it. Press it as often as you like.
Every observation is what the tool would actually show — a log line, a status code, a dashboard reading — and some probes distinguish nothing on purpose: the provider status page reads the same in every scenario, and restarting the server produces the same next failure in every scenario. A lab where every probe helped would teach that gathering evidence is free. Ten causes, five layers, one symptom; a real incident has none of those bounds.