First Principles

Removing implementation assumptions to find the fundamental requirement. "We need Redis" → why? → repeated reads are slow. Now evaluate options.

First Principles
▶ lab

"We need Redis" names a solution. First-principles thinking asks what problem it solves — repeated reads are slow — and only then evaluates options, of which Redis is one. The move is not "avoid tools"; it is "find the requirement before you choose".

Q · A requirement arrives already containing its solution. How do you get back to the problem underneath it, so that the solution can be chosen rather than inherited?
The Why Ladder
▶ lab

"We need Kafka" → why? → async events → why? → checkout should not wait for the email. The real requirement is "send the email asynchronously", and a job table meets it. Kafka may be overkill — and the ladder also says when it is not.

Q · Someone says "we need Kafka". How many times do you ask why, what do you do with the answer at the bottom, and how do you know when the original claim was right?
Removing Implementation Assumptions

Requirements arrive with implementation baked in: "the cart is stored in the session", "orders are a table", "search hits the database". Strip each implementation word and see what the sentence still requires — often less, sometimes something different.

Q · A requirement seems to force a design. How do you tell which parts of it are the requirement and which are someone's implementation, quietly included?
Essential vs Accidental Complexity

Payments can fail: that is essential, and every checkout must handle it. Five frameworks for one checkout: that is accidental, and it was chosen. The distinction tells you which complexity to design for and which to remove — and it is not always as clear as the slogan suggests.

Q · The system is complicated. How do you tell which of the complexity is the problem's and which is yours — and what do you do differently about each?
The Simplest Thing That Could Work

"Could work" is the half of the slogan people drop. The simplest thing that could work meets the real requirement — failure handling included — with the fewest parts; the simplest thing that does not is a demo. The move is finding the first, and knowing what evidence would make it insufficient.

Q · You have the real requirement. What is the simplest thing that could actually meet it — and how do you keep "simplest" from sliding into "incomplete"?