Technical
A Year of First Principles: What Survived and What Did Not
For eleven months I tried to derive every technical decision from first principles. Not from best practices. Not from community consensus. From the ground up. The experiment revealed which principles actually hold and which sound good in essays and fail in production.
Principles That Held
Simplicity over cleverness. Every clever solution I wrote this year regretted itself within sixty days. Every simple solution kept running. This principle held completely. No exceptions found.
Boundaries over abstractions. Drawing hard boundaries between modules outperformed creating abstractions that blurred them. The boundary is the design. The abstraction is optional.
Write now, abstract later. Three concrete implementations before any abstraction. This produced better abstractions than designing upfront. Every time.
Verification is the real work. Generating code is cheap. Verifying it is the bottleneck. Plan around verification capacity, not generation speed.
Principles That Broke
Do the simplest thing that could possibly work. Sounds great. In practice, the simplest thing often ignored a failure mode that bit me later. The refined principle: do the simplest thing that handles the three failure modes you can name.
Optimize later. I believed this going in. In practice, some optimization work is ten times cheaper before the abstraction calcifies than after. Some optimizations must be done upfront: data model shape, index selection, cache boundaries.
If it is not tested, it is broken. I still believe this for library code. For scripts and one-offs, exhaustive testing was a net negative. The refined principle: test what will be run more than once by someone else.
The Meta-Principle
Principles are tools, not laws. Pick the principle that fits the problem. Resisting the tempting principle is often where the judgment lives.
The Practical Outcome
Decisions derived from principles beat decisions copied from blog posts. Not every time. Most of the time. The overhead of deriving is real and worth it for any decision that will affect work for more than a month.
What Charlie Munger Got Right
Inversion. Thinking about what would make a project fail clarified what made it succeed. This is the single highest-leverage mental move I made this year. Read Poor Charlies Almanack.
RELATED READING
The Consulting Shift I Am Making In Year Two
After a year of writing and building, my consulting practice is changing shape. Shorter engagements. Sharper outcomes.
ReadThe Frontend Shift: Shipping Less JavaScript In Year Two
A year ago I reached for Next.js for everything. This year I often reach for nothing.
ReadThe Serverless Lesson I Would Write On A Sticky Note
After a year of shipping serverless projects, one rule explains most of the wins and all of the losses.
Read