Find the simplest explanation or solution that accounts for all known facts — use when there are multiple competing explanations and the simplest hasn't been tried first
<output_format>
| Explanation | Assumptions | Fits all facts? |
|---|---|---|
| [Simple] | N | Yes/No |
| [Complex] | N |
| Yes/No |
[The winner and why]
[What would confirm or rule out alternatives] </output_format>
| Explanation | Assumptions | Fits all facts? |
|---|---|---|
| Search index corrupted | 1 (index can silently corrupt) | Yes |
| Upstream provider slowed down | 1 (provider had an incident) | Yes — /search calls external API |
| DNS resolution intermittent | 2 (DNS issue + only affects one endpoint) | Partial — why only /search? |
| Memory leak in search service | 2 (leak exists + triggered Tuesday) | Partial — would worsen over time |
Upstream search provider experienced degradation. This requires only one assumption (provider incident), explains why only /search is affected (it's the only endpoint calling that provider), and fits the Tuesday timing without needing a code change.
Check the provider's status page for Tuesday incidents. If clean, run curl directly against the provider API to measure current latency. If provider is fast, re-examine the search index.
</example>
Receives: A phenomenon or problem with multiple possible explanations and a set of known observations
Produces: A ranked candidate explanation table with the simplest sufficient explanation and distinguishing evidence
Chainable to: 5-whys (to drill into the chosen explanation's root cause), map-vs-territory (to check whether the observations themselves are accurate)