Example-Driven Thinking

When the abstract problem is hard, construct a concrete case: three units, Alice buys two, Bob buys two at the same time. Edge cases, counterexamples and thought experiments.

Example-Driven Thinking

"Design the inventory system" cannot be reasoned about; "three units, Alice buys two, Bob buys two at the same moment — what should happen?" can. A concrete example turns a design task into a question with an answer, and the answer usually reveals the requirement the abstract sentence was hiding.

Q · The problem is stated abstractly and you cannot get a grip on it. How do you construct a concrete example that makes the real question visible?
Edge Cases From Examples

Once one example exists, the edge cases come from varying it along a short, repeatable list: zero, one, many, duplicate, invalid, concurrent. The list is not a template — it is where the requirements the happy path hid tend to live, and each one either has an obvious answer or is a decision.

Q · You have the happy path and one worked example. How do you systematically find the cases that will break it, without guessing at random?
Counterexample Thinking

When a claim sounds right — "this always works", "that can never happen" — try to construct one case where it does not. A counterexample found in five minutes on paper is worth more than a week of confidence, and failing to find one after honestly trying is evidence, not proof.

Q · Someone — possibly you — says "this always works" or "that can never happen". How do you test the claim before the system does it for you?
Thought Experiments

Run the system in your head at one user, a hundred, a million — not to build for a million, but to see which assumptions hold at each size and where the design would first bend. A thought experiment is the cheapest experiment there is; it finds the assumption, and a real experiment then checks it.

Q · How do you understand what a design assumes without building it — and without sliding into building for a scale you do not have?
Scale Thought Experiments
▶ lab

Take the store from one server and one database to a size where something breaks, and watch which component is actually the bottleneck at each level — then see that a cache fixes reads and not writes, a queue fixes checkout wait and nothing else, and at low traffic every added component is unjustified. The lab runs the numbers; the lesson is how to read them.

Q · You have imagined the system at scale and named the assumptions. How do you tell which one actually bends first, and which component — if any — would move it?