Books that changed how I design systems, learn, or manage my career, with the essential takeaway and how I put it into practice.
A Philosophy of Software Design
John Ousterhout
The essential takeaway
Software complexity comes from dependencies and obscurity, not from size. A "deep module" (simple interface, rich implementation) beats ten shallow modules that expose every detail. Over-decomposing code ("classitis") moves complexity around instead of reducing it.
How I put it into practice
On every hexagonal port (Hexray, archi3), apply the deep-module test: an interface with one or two methods hiding real implementation complexity, rather than one that exposes every underlying technical detail.
Learning Domain-Driven Design
Vlad Khononov
The essential takeaway
Not every subdomain deserves the same modeling effort: distinguishing core (the real competitive advantage), supporting, and generic subdomains avoids applying DDD everywhere by reflex. A rich model is only justified if the actual business complexity is worth its cost.
How I put it into practice
Before starting a DDD project like MissionMatch, first classify each subdomain as core, supporting, or generic, and reserve full DDD modeling (aggregates, ubiquitous language) for the core subdomain only.
Fooled by Randomness
Nassim Nicholas Taleb
The essential takeaway
We systematically confuse luck and skill after the fact (survivorship bias, narrative fallacy). What matters isn't the outcome of a single trial, but the distribution of outcomes a model or strategy predicted before the event.
How I put it into practice
On counterparty risk (VaR, SA-CCR), never judge a risk model on a single realized scenario: evaluate its quality against the distribution it predicted, before knowing what actually happened.
The Art of Learning
Josh Waitzkin
The essential takeaway
Waitzkin, a former chess champion turned learning theorist, argues for the "small circles" method: mastering a narrow principle in depth before expanding it, rather than accumulating techniques on the surface. A well-analyzed loss teaches more than a win.
How I put it into practice
On "a new ecosystem a year" (Rust, Go), apply small circles: deeply master a minimal subset of the language before expanding, rather than skimming the entire documentation.
Company of One
Paul Jarvis
The essential takeaway
Growth isn't a default goal: staying deliberately small can be a rational strategic choice, not a lack of ambition. Optimize for resilience, autonomy, and the quality of delivered work rather than for scale.
How I put it into practice
In choosing freelance missions, explicitly refuse the pressure to "scale" (hiring, subcontracting) when staying solo better serves the quality of delivered work, a principle that directly echoes my note on going freelance.
The Staff Engineer's Path
Tanya Reilly
The essential takeaway
Senior technical influence rests on three pillars: shared technical vision, execution, and "glue work," the invisible coordination work that produces no code but makes everything else possible. Growing technically without becoming a manager is a legitimate path.
How I put it into practice
On freelance tech lead engagements, explicitly invest in glue work (documentation, architecture reviews, team mentoring) rather than code alone, to maximize impact beyond one's own individual contribution.