INTERNAL · TEAM BRIEF
FOR THE TEAM · READING TIME ~12 MIN

Reason from atoms, not analogies.

First principles thinking means breaking a problem down to its irreducible truths and reasoning upward from there — instead of inheriting answers from what already exists. This page lays out how we want to approach hard problems together: the method, the questions, the examples from our world, and the failure modes to watch for.

// ORIGIN
Aristotle, ~350 BC
// MODE
Derived > Borrowed
// COST
Slow, non-linear payoff
// USE WHEN
Stakes are high, defaults are stale
01 ORIGINS

An idea older than the wheel — and just as useful.

Over two thousand years ago, Aristotle called a first principle "the first basis from which a thing is known." In every systematic inquiry, he wrote, we acquire knowledge by working back to primary causes. Descartes restated it in the 17th century with his method of doubt: peel away every assumption you can possibly doubt until what remains is indubitable, and rebuild from there.

"Physics teaches you to reason from first principles rather than by analogy. So I said, okay, let's look at the first principles. What is a rocket made of?"
— Elon Musk, on cutting SpaceX launch costs ~10×

Modern proponents — Musk at SpaceX, Bezos at Amazon, Charlie Munger across decades of investing, and Richard Feynman in physics — all describe the same move: drop the inherited frame, list what's actually true, and rebuild. Most people don't. Most people, in Musk's phrase, "live life by analogy" — they project the current form forward instead of asking what function it has to serve.

02 THE CONTRAST

The cook follows the recipe. The chef knows why it works.

Analogy is borrowed knowledge — fast, usually correct, useless when the situation is genuinely new. First principles is derived knowledge — slow, harder, the only thing that works when the analogy breaks.

// REASONING BY ANALOGY

"It's like…"

Map a new problem onto an old, familiar one and inherit its answer. Cheap to do, often right — until the analogy breaks.

  • Everyone uses Postgres, we should too.
  • Stripe has a public API, ours should look the same.
  • The team did microservices last time — let's do it again.
  • Rockets cost $65M; that's the price.
  • "That's how we've always done it."
// REASONING FROM FIRST PRINCIPLES

"What is it actually made of?"

List the irreducible facts of the situation, then build the answer up from there. Expensive — but you stop inheriting someone else's mistakes.

  • What read/write patterns does our data have?
  • What guarantees does this API need to provide?
  • What's the actual coupling between these services?
  • Aluminum + titanium + carbon fiber = 2% of $65M.
  • What problem is this convention solving — does it still apply?
03 THE METHOD

Four moves. Run them in order.

First principles isn't a vibe — it's a procedure. The same four steps work whether you're choosing a database, debugging a flaky test, or proposing an architecture change.

// STEP 01

Frame the goal.

State the outcome in plain language — not the solution. A solution dressed as a problem will lock you into the analogy you're trying to escape.

"We want X" — not "we need to build Y to get X."
// STEP 02

Decompose to atoms.

Break the problem into the smallest pieces you're sure are true. Constraints, requirements, physical limits, data shape. Anything else is an assumption.

Five Whys, until the answer is "I don't know."
// STEP 03

Challenge each piece.

For every "atom," ask: is this a fact, a constraint, or a convention? Conventions can be moved. Constraints can sometimes be renegotiated. Facts are the floor.

"Why do we believe this? What changes if we don't?"
// STEP 04

Rebuild from the floor.

Compose a solution out of only the atoms you trust. If your result looks like the conventional answer, fine — you've earned it. If it doesn't, you've found something.

"Given only these, what's the simplest thing that works?"
// PROBLEM "Our checkout is slow." └─ decompose ──┐ ├─ Latency budget: 2400 ms p95 (fact) ├─ Network round-trips: 14 (measured) ├─ DB queries: 37 (measured) ├─ Cache layer present (convention — "everyone caches checkout") ├─ Synchronous fraud check (assumption — was it ever benchmarked?) └─ "Must be SSR" (convention — inherited from prior arch) └─ challenge ─┐ • The cache hides N+1 queries — does it solve the cause or mask it? • Fraud check can run after order accept; rollback is cheap. • SSR on this path adds 380 ms and isn't SEO-relevant. └─ rebuild ───┐ = Kill the cache. Fix N+1. Async fraud. CSR this route. = Result: 2400 ms → 640 ms p95. No new infra.
04 TOOLKIT

Four lenses that drive the method.

These are the questioning techniques that actually get a room down to the floor. Use them inside the four-step method — they're the how, not a replacement for it.

Socratic Questioning

// METHOD

A disciplined sequence of questions that exposes assumptions and tests reasoning. The point isn't to win — it's to surface what's actually believed.

1. What do you mean by that? 2. How do you know it's true? 3. What's the evidence — and against it? 4. What's an alternative view? 5. What follows if you're right? If wrong? 6. Why does this question matter?

The Five Whys

// ROOT CAUSE

Take the visible problem and ask "why" until the answer stops moving — usually around the fourth or fifth pass. The honest endpoint is often "I don't know." That's the discovery.

Bug: payment failed for user. 1. Why? Webhook timed out. 2. Why? Sync handler holds DB conn. 3. Why? We retry inline. 4. Why? No queue in this service. 5. Why? Inherited from MVP. ◀ root cause

The Feynman Technique

// LEARNING

Explain the thing in plain language, as if to a smart 12-year-old. Wherever you reach for jargon, you've found a gap. Fill it. Re-explain. Repeat.

"Idempotency is when…" → catches yourself using "idempotent" → reword: "doing it twice is the same as once" → next gap: "why does that matter for retries?" → keep going until no jargon remains.

Inversion

// MUNGER

Don't ask "how do I make this succeed?" — ask "how would I guarantee this fails?" Then refuse to do those things. The fastest way to be smart is to stop being stupid.

Goal: a reliable deploy pipeline. Invert: how would I break prod weekly? → no rollback, no canary, no health check, no tests, shared mutable state, manual steps, no audit trail. Do the opposite. That's the spec.
05 IN SOFTWARE

Seven places engineers default to analogy — and what changes when they don't.

Most of these aren't dramatic. They're the small, daily decisions where teams quietly inherit someone else's answer. The win isn't always a rewrite. Sometimes it's a smaller scope, a deleted system, or just a different question in the design review.

01

Monolith vs. microservices

// ARCHITECTURE

The default analogy

"Netflix and Amazon use microservices. We're scaling, so we should split too."

From first principles

What are the actual coupling boundaries in the code? What independent deploy pressure exists? What's the team topology? Microservices solve organizational scaling, not request volume.

What changes

A 12-person team rediscovers that a well-modularized monolith plus one extracted service beats 14 microservices nobody owns.

02

"We need a cache."

// PERFORMANCE

The default analogy

"This endpoint is slow. Put Redis in front of it. Every fast site has caching."

From first principles

What does the endpoint actually do? Why is it slow — N+1, missing index, oversized payload, sync work that could be async? A cache often hides the cause and becomes a permanent dependency.

What changes

You add one index. p95 drops 8×. You never deploy Redis. The cache invalidation bug you would have shipped never exists.

03

Build vs. buy

// TOOLING

The default analogy

"There's a SaaS for that. We pay $X/mo and avoid distraction." (Or the inverse: "We can build it in a weekend.")

From first principles

What is core to our business and what is plumbing? What does the vendor actually do — data ingestion, retention, dashboards — and what would the in-house equivalent cost in ongoing maintenance, not just initial build?

What changes

You keep the vendor for analytics (commodity) and build the pricing engine in-house (proprietary). The opposite of what the loudest argument suggested.

04

Picking a database

// PERSISTENCE

The default analogy

"Use Postgres." Or: "We have time-series-ish data — use a time-series DB."

From first principles

What's the read pattern? Write pattern? Consistency model required? Cardinality? Query shape? "Postgres" is usually right because it's flexible — but you should be able to say why for your shape, not just inherit it.

What changes

You still pick Postgres — but with deliberate choices about partitioning, indexes, and a clear migration story you didn't have before.

05

Debugging the flaky test

// DEBUGGING

The default analogy

"It's flaky. Retry it three times in CI. Everyone does that." (Or: @flaky annotation.)

From first principles

A flaky test is a true statement about your system — it says something is non-deterministic. What state is shared? What timing assumption is encoded? Five whys until you find the actual race.

What changes

You find a shared mutable singleton three layers down. The "flake" was a real production bug under load — you just hadn't been paged yet.

06

API design

// INTERFACES

The default analogy

"REST with these resources, because that's how Stripe does it. Or GraphQL, because Shopify."

From first principles

Who calls this and how often? What does the caller need to know — and not know — to be successful? What invariants does the API have to preserve regardless of client behavior? Style follows from that.

What changes

Half the endpoints collapse. The remaining ones model intent (/refund) rather than data (PATCH /payment) — and the clients get simpler.

07

"We need to migrate to Kubernetes."

// INFRASTRUCTURE

The default analogy

"It's the industry standard. Everyone runs on k8s. We'll look unprofessional without it."

From first principles

What problem does k8s solve — multi-tenant scheduling, declarative ops, portable workloads? Do we have those problems right now, or in the next 18 months? What does the maintenance cost look like at our team size?

What changes

You stay on managed containers for another year, ship features instead of YAML, and revisit k8s when your team is 3× larger and the actual constraints have arrived.

06 IN THE TEAM

How to put this into a workflow without slowing the team to a crawl.

First principles is expensive. Used everywhere, it grinds the team to a halt — used nowhere, you inherit drift. The job is to apply it where the stakes justify the cost: hard-to-reverse decisions, recurring problems, anything with the word "always" attached.

The First-Principles RFC

For any non-trivial design doc, require these four sections — in order. The order matters. Solutions before atoms is how analogies sneak in.

  1. Goal in plain language. No solution words. The reader should be able to disagree with the goal before they see your answer.
  2. Atoms. Constraints, requirements, measured data, hard limits. Mark each as fact / constraint / convention.
  3. Assumptions, named. Anything you believe but can't prove. The riskiest ones first.
  4. Proposal, derived. A solution that uses only the atoms — and a paragraph on what would have to change for this to be wrong.

Running a First-Principles Session

A 60-minute workshop format that works for architecture decisions, incident retros, and "why does this keep happening?" loops.

  1. 10m — frame. One person states the problem. Everyone writes the goal in their own words.
  2. 15m — decompose. Silent: list every atom you can on stickies. Don't filter.
  3. 15m — sort. Cluster atoms. Tag each fact / constraint / convention. Disagreement here is the real work.
  4. 15m — invert. "How would we guarantee this fails?" Use as a check on the proposal.
  5. 5m — capture. The four-section RFC writes itself from the wall.

Questions to seed in any review

Drop these into design reviews, retros, and 1:1s. They're cheap, they don't require a workshop, and they shift the room without confrontation.

  • What problem is this convention solving — does it still apply here?
  • If we were starting today with no prior code, would we build this?
  • What's the cheapest thing that would prove this assumption wrong?
  • What would have to be true for us to do nothing?
  • If this fails, what's the failure mode we didn't list?

Cultural prerequisites

First principles dies fast in a low-trust room. The method only works if people can say "I don't know" without paying for it socially. Specifically:

  • Stupid questions get welcomed — they're usually the most useful ones.
  • "Why do we do this?" can be asked of senior people without it reading as insubordination.
  • The right answer is allowed to be "no change" — the goal is honest reasoning, not novelty.
  • Leaders model "I don't know" out loud. Often.

Prompt bank — by context

// DESIGN REVIEW
"Walk me through the goal as if I've never seen this product. What's the irreducible thing we're trying to make true?"
// RFC FEEDBACK
"Which assumption in here, if false, would change the whole proposal? What would it cost to test it?"
// INCIDENT RETRO
"What did the system actually do — not what we expected? At which step did our mental model diverge from reality?"
// REFACTOR PITCH
"Before we change this — why is it like this? Whose problem did this shape solve, and is that problem still here?"
// BUILD-VS-BUY
"Strip the vendor's marketing. List the functions it performs. Which are core to us, which are commodity?"
// HIRING / PROCESS
"If we didn't have this step, what bad thing would actually happen? Is that the cheapest way to prevent it?"
07 PITFALLS

When first principles becomes the wrong tool.

The technique is powerful enough that it earns its own warning label. Most failure modes share a root cause: confusing "I have not understood this" with "this has no reason to exist."

CHESTERTON'S FENCE

You don't get to remove what you haven't understood.

That weird middleware, that retry loop, that null check — all were put there by someone solving a real problem. First principles is the right to remove them after you've understood them, not before.

REINVENTING THE WHEEL

"From scratch" is not the same as "smart."

The standard solution often is the first-principles answer — proven by ten thousand teams before you. Rederiving Postgres is a thought exercise, not a deliverable.

ANALYSIS PARALYSIS

You can decompose forever.

If you don't pre-commit to a depth and a deadline, the method becomes a way of avoiding the decision rather than making it. Pick a budget. When it's up, ship the best answer you have.

FALSE AXIOMS

Your "atoms" are often assumptions in disguise.

"Users want X." "Latency must be under 100ms." "We can't break this API." These feel like facts and are usually constraints — sometimes negotiable ones. Mark them as such.

SOLO-HEROISM

One person's first principles is another's blind spot.

The technique cuts through groupthink — but only with a group. Run it alone and you'll just rederive your own priors with extra steps. Get adversarial readers.

WRONG-TOOL

Not every problem needs the slow path.

Naming a variable, fixing a typo, picking a logging format — analogy is fine, analogy is good. Save first principles for decisions you'll have to live with for a year.

08 PAIRS WELL WITH

A latticework, not a single lens.

First principles is one mental model. Munger's point was that you want a latticework — overlapping models that catch each other's blind spots. These are the ones that pair best for engineering work.

// 01 — INVERSION

Solve forward; check backward.

After you derive the answer, ask: "How would I guarantee this fails?" If your design quietly answers yes to several of those, your atoms were incomplete.

Pair with: STEP 04 — rebuild
// 02 — SECOND-ORDER

"And then what?"

First-order thinking stops at the immediate effect. Second-order asks what happens once the world adapts to your change. The cache works — and then everyone codes against the cache, and then…

Pair with: any "build vs buy" decision
// 03 — CHESTERTON'S FENCE

Understand before you delete.

The guard rail against first-principles arrogance. Every weird thing in your codebase had a reason. First derive that reason, then decide whether it still holds.

Pair with: any refactor or migration
// 04 — FEYNMAN

If you can't say it simply, you don't know it.

Explain your design to someone three layers removed. Wherever you hit jargon, you've found a hole in your own reasoning, not theirs.

Pair with: writing the RFC
// 05 — STEELMAN

Argue the opposing case better than its loudest proponent.

Before you "win" the decision, build the strongest version of the position you're rejecting. If you can't, you haven't done the work.

Pair with: design review
// 06 — YAGNI

You Aren't Gonna Need It.

The corollary to "rebuild from atoms": don't add atoms that aren't required yet. First principles makes you derive what's needed — YAGNI keeps you from deriving what isn't.

Pair with: STEP 02 — decompose
HOW WE START USING THIS

Pick the next hard call. Run the four steps.

We don't adopt first principles by reading about it. We pick one real decision on our plate this week — a database choice, a refactor, a vendor, a retry policy — and we run it through the method together. Frame the goal. List the atoms. Challenge each. Rebuild. See what survives.

If it works, we'll do it again. If it doesn't, we'll know what broke and adjust. That's the whole onboarding.