Blog
Writing about how we build software, not just what we build. Engineering philosophy, architectural decisions, and lessons from getting things wrong.
Building 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.
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.