cd ../writing ←

deep dive · 2026-08-23 · 7 min · #ai · #software-factories · #engineering · #judgment

First Principles in the Age of Pattern Machines

Pattern-matching is exactly what LLMs do best, which makes it the first skill commoditized, not the last. The durable human skill is reasoning from first principles: knowing which pattern is right, and when to throw the patterns out entirely.

First Principles in the Age of Pattern Machines

There's a flattering story senior engineers tell themselves. It goes like this: all those years of shipping taught me to pattern-match, to see a new problem and instantly recognize the shape of an old answer, and that hard-won library of patterns is what makes me valuable and hard to replace. I've told myself that story. It's half right, and the wrong half is about to get expensive.

Here's the uncomfortable part. Pattern-matching is exactly what a large language model does. It is the single thing it does best. A model that has read every codebase, every forum answer, every design doc has a pattern library that dwarfs yours and recalls it instantly. So if your value is "I recognize this shape," you are not standing on the durable skill. You are standing on the first thing to get commoditized, not the last.

The popular intuition has this backwards. People assume the machine takes the grunt work and leaves the "smart" pattern-recognition to us. It's the reverse. Pattern-matching is the grunt work now. What's left, the thing the machine genuinely cannot do for you, is reasoning from first principles.

What first-principles reasoning actually is

First-principles reasoning is not pattern lookup. It's derivation. It's the discipline of putting the patterns down and asking the questions underneath them:

A pattern tells you what usually works. First principles tell you what works here, and, just as important, when the usual thing is wrong. That second half is the whole point. Patterns are answers to problems someone else had. Reasoning from fundamentals is how you tell whether their problem is your problem.

The machine is a pattern machine. It will hand you the shape that fit the last thousand cases with total fluency and zero idea whether it fits yours. Deciding whether it fits is not a pattern. It's judgment, derived from the specifics, and it's the scarce skill of this era precisely because the abundant skill (pattern supply) just went to zero cost.

Two failure modes, and why they get worse

Abstract so far. Let me make it concrete, because first-principles thinking isn't a virtue you admire from a distance; it's a defense against two specific ways the AI era will burn you. Both get worse when generation is cheap.

Failure one: cargo-culting a pattern you don't understand

Cargo-culting is copying the form of something without its function. The model is a cargo-cult engine of extraordinary quality: ask it for resilient network code and it will hand you retries with exponential backoff, a circuit breaker, a cache, and a timeout, all arranged correctly, all compiling, all passing the tests you thought to write.

And it might be exactly wrong for you. Retries on a non-idempotent write don't add resilience; they add duplicate charges. A cache in front of data that has to be fresh doesn't add speed; it adds a class of bug you'll debug at 2 a.m. The pattern is real, competent, and lifted from a problem that wasn't yours.

The old friction protected you here by accident. Writing that code by hand was slow enough that you were forced to think about each piece as you typed it. The factory removes the friction and, with it, the forced thinking. You get the finished, plausible artifact before you've asked a single question about whether it belongs. The only defense that scales is refusing to accept a pattern you can't derive. If you can't say why the retry is there and why it's safe here, you don't understand your own system; you're just holding the model's guess with your name on it.

Failure two: solving the wrong problem, very efficiently

This one is worse, because the output looks like success the whole way.

The factory will build whatever you point it at, fast and well. Point it at the wrong problem and you get a beautifully engineered solution to a thing that didn't need solving. Someone asks for a dashboard, so you generate a gorgeous dashboard in an afternoon; the actual problem was that nobody trusts the numbers, and no dashboard fixes trust. Someone says "make this query faster," so you generate an elaborate caching layer; the real answer was to not run the query in the hot path at all.

When implementation was expensive, solving the wrong problem was at least slow, and therefore catchable; you'd feel the cost mounting and stop to ask why. Cheap implementation removes the flinch. You can now be wrong at tremendous speed and with a lovely diff to show for it. Efficiency is a multiplier, and a multiplier on the wrong problem is just a faster way to be wrong. The only thing standing between you and a quarter spent building the wrong thing is the first-principles question you ask before you start: what problem are we actually solving, and would this actually solve it?

How to actually think this way

First principles get talked about like a personality trait you either have or you don't. They're not. They're a small set of habits you can run on purpose, especially in the moment the model hands you something that looks done.

Restate the problem before you accept any solution. In one sentence, say what you're actually solving and the constraint that makes it hard. If you can't, you're not ready to evaluate the answer, the model's or your own. Most wrong solutions are competent answers to a problem nobody wrote down.

Make the pattern justify itself. For every non-obvious choice in a generated diff, demand the why, from fundamentals, not from "this is how it's usually done." Rubber-duck it: if you can't explain to a wall why this line is here and why it's safe, you don't own the code, you're just hosting it.

Reach for the simplest thing, then attack it. The machine reaches for the complete, elaborate, impressive-looking pattern, because that's what the corpus is full of. Start from the minimum that could work and add only what a real, named failure forces you to add. Complexity should have to earn its place.

Separate the essential constraint from the inherited one. Ask of every requirement: is this real, or is it just how the last team did it? Half of "the requirements" are usually fossilized habit. First-principles reasoning is largely the act of noticing which walls are load-bearing and which are just painted on.

None of this is fast, and that's the point. It's the deliberate, expensive thinking the fast machine can't do for you, applied exactly where it can't: at the abstract end, where the model is least reliable and where being wrong costs the most.

I've made the calibration argument separately in Trust but Verify: AI on Concrete vs. Abstract Work. The short version: the more abstract and fluent the output, the harder you check it. First-principles reasoning is how you check.

The one-breath version

The machine can produce any pattern instantly. That makes producing patterns worthless and choosing the right one, or throwing them all out, the entire job. Pattern-matching was never the durable skill; it was the first to fall. Reason from first principles, because in a world of infinite answers, the scarce thing is knowing which question you're answering.

Go deeper


Fourth in a series on the industrialization of software engineering. Previous: Generation Is Cheap, Verification Is Not. Series opener: The Software Factory Hollows the Middle. Next: Where Does Senior Judgment Come From.

# subscribe

Occasional writing on systems & craft — no spam.

Keyboard bindings

Default NORMAL mode, from a hardware keyboard:

h j k l
Scroll left / down / up / right
g g
Scroll to top
G
Scroll to bottom
g + h/w/p/l
Jump to home / writing / projects / lab (lab has no page yet)
t
Cycle theme
f
Hint-jump -- label every on-screen link; type its label to open it
:
Enter COMMAND mode
/
Enter SEARCH mode -- n/N steps through results, Enter opens the highlighted one
?
Toggle this guide
Esc
Return to NORMAL from any mode, or close this guide

COMMAND mode (:) -- v1 commands. The registry is extensible: future commands (e.g. metrics queries) appear below automatically once registered, no template change required.