Blog
Writing about how we build software, not just what we build. Engineering philosophy, architectural decisions, and lessons from getting things wrong.
// Series: Engineering Philosophy
4 partsBuilding a Mathematics Interpreter in F#: From Parser to Symbolic Calculus
How we built a full interpreter with symbolic differentiation, six number types, and interactive graph plotting, and what the architectural decisions reveal about building extensible systems.
Building an Event-Driven Health Tracker with Three Lambda Functions
How we built a health tracking platform with event-driven notifications, scheduled jobs, and auto-completing goals, and why decoupling what happens from when it happens made everything simpler.
Building WeatherWise: A Weather Platform That Tells You What to Do
Building a weather platform that transforms raw API data into prioritised, actionable recommendations, and the full-stack architecture that supports it.
The Pragmatist's Razor
Cargo cult engineering is adopting practices without understanding. But there's an equal and opposite failure: the engineer so principled they forget they're building software for people, not for architecture diagrams.
The Teacher and the Doer
I started code reviewing for a junior developer a few months ago. It taught me more about my own understanding than I expected, and revealed a model of learning that changes how I think about software knowledge.
Cargo Cult Software Engineering
Richard Feynman warned about scientists who follow the form of science without the substance. The same problem is everywhere in software: teams adopting practices they don't understand, hoping the results will follow.
Building a Portfolio That Practices What It Preaches
How I deployed an Angular 21 SSR app on AWS Lambda, and why every architectural decision was really a statement about how I think software should be built.