Critical Thinking — Problem¶
What it is: analyzing, evaluating, and reconstructing a claim or argument in a systematic way — questioning assumptions, checking evidence, and considering alternatives — instead of accepting the first confident-sounding sentence as fact.
The mechanism: five moves, in order¶
- Isolate the claim — strip it down to one sentence, separate from the evidence or opinion wrapped around it.
- "MongoDB will be faster here" is a claim. "MongoDB is known for being fast and lots of companies use it" is not evidence for that claim — it's the claim restated in different words.
- Surface the assumption it depends on — what has to be true for this claim to hold, that nobody has actually checked?
- The MongoDB claim assumes your read/write pattern resembles the pattern MongoDB is fast at. That assumption is invisible until you name it.
- Evaluate the evidence — is there a real measurement, or just confident phrasing, popularity, or an anecdote?
- "Benchmarked on our staging cluster with our real queries" is evidence. "Everyone's using it" is not — it's the appeal-to-popularity fallacy, and it says nothing about your workload.
- Consider the alternative explanation — what else could produce the same observation, and who benefits from this claim being true?
- Errors spiked right after a deploy — the deploy is one explanation. A traffic spike or an upstream outage at the same time are others; check before concluding cause.
- Reach and record the conclusion — decide, and write down what evidence would change your mind later.
- Not "we decided to migrate" — "we decided to migrate because X; we'll revisit if Y."
flowchart LR
Claim --> Assumptions --> Evidence --> Alternatives --> Conclusion --> Claim
Worked example¶
The claim, in a design doc: "We should switch the orders table from Postgres to MongoDB — it'll be faster for our use case."
- Isolate: MongoDB will be faster than Postgres for our orders table and our query patterns — not faster in general.
- Assumption: that our workload (mostly indexed lookups by
order_id, range scans bycreated_at) behaves like the workloads MongoDB is known to be fast at. - Evidence offered: "MongoDB is known for being fast" (reputation, not a measurement) and "lots of companies use it" (popularity, not performance for this workload). Neither is evidence for the specific claim.
- Alternative: the current Postgres queries might be slow because of a missing index, not because Postgres itself is the bottleneck — a five-minute
EXPLAIN ANALYZEcould rule this out before anyone touches the database engine. - Conclusion that would survive scrutiny: "We ran our top 5 production queries against a MongoDB replica seeded with a 30-day snapshot. The
created_atrange scan (180ms p95 on Postgres) ran at 95ms with a compound index on MongoDB, and write latency was comparable. We're migrating on that basis; we'll revisit if p95 write latency exceeds 20ms in production."
Evaluate before you call it done¶
A conclusion built this way should pass four checks:
- Falsifiable — can you state what evidence would prove this claim wrong?
- Sourced — is the evidence direct (measured on your system) or indirect (someone else's benchmark, a blog post, an anecdote)?
- Alternative-tested — did you consider at least one other explanation for the same observation?
- Recorded — is the reasoning written down somewhere it can be checked later, not just remembered?
Continue to Mistake.