Welcome everyone. Here you’ll find some of my thoughts, ideas, and experiences within software development.
Recent Posts
Stop letting your AI agent grep its way around your codebase
I’ve been using coding agents like Claude Code a fair bit recently, and for the most part I think they’re great tools, but not without flaws. The agent doesn’t understand my codebase; It just reads it. Those two things are not the same.
How an agent finds things by default Ask an agent to rename a method, or to find everywhere a particular type gets used, and watch what it actually does.
read moreSemantic versioning? Nah, just break your users
What is Semantic Versioning and why is it useful? At a very high level, Semantic Versioning is a way of versioning things to indicate whether a change is breaking, additive, or a fix for something. It is a version number split into 3 chunks, Major, Minor and Patch. It can be summarised as:
Given a version number MAJOR.MINOR.PATCH, increment the:
MAJOR version when you make incompatible API changes
MINOR version when you add functionality in a backward compatible manner
read moreTesting and Configuration in .NET Core
When running automated tests, or running things locally, I often want to use a different configuration to what I would run in production. A JSON file often suffices for local development, however this isn’t useful for automated tests where I want different configurations for different tests, or if my configuration is dynamic (e.g. I need to spin up a docker container during startup, and I have to get some configuration from that on the fly).
read moreTesting in Production with Feature Toggles in .NET Core
I’ve always been a big fan of testing, and often think about ways to improve the testability of our system. The most effective testing is to test what your users actually use, and that is to test in production. This can be quite a scary thought to some, shipping untested code out to our live system, with real users, and hope it doesn’t break!
Of course, the simple solution would be to run two “Production Environments” side by side, and use one exclusively for testing, and only once you are satisfied everything is working, push the tested changes across to the other environment.
read more


