Hiya!
I'm Andrew. A father, husband and software engineer living in Scotland.
I've been building software since Turbo Pascal on an Amstrad - an old language no one remembers on an old computer no one used.
During the day, I work at TransferGo as a Staff Engineer. I've built Compliance, Risk and Anti-money Laundering things, then rebuilt the Profiles domain. Now I've joined the Developer Experience team, helping engineers get better at working with AI.
I'm teaching software development concepts using metaphors on YouTube and writing interactive and animated articles.
My spare time is spent with family, kayaking, 3D printing, and coaching youth football.
- Your Codebase is Your Prompt
- Evaluating our Test Pyramid
- Cognitive Debt
- Pipe Operator
- Primitive Obsession
- Composition over Inheritance
- Accidental Intent Cancelling
- Profiles #4: Hidden Coupling
- Profiles #3: Event Inconsistencies
- Profiles #2: Implementing Branch by Abstraction
- Profiles #1: The Profiles Bounded Context RFC
Jev Is Not a Decision Model
Jev gives an opinion and says how confident it is. What we do with that opinion is the decision, and our code makes it. So when Jev gets it wrong, the error sits with us.
How I Avoid Throwing Slop Grenades
Shopify's CEO calls unreviewed AI output slop grenades. Over a long migration I generated hundreds of AI pull requests and kept the slop to myself. But careful engineers can only do so much. I think stopping slop grenades takes a process that makes them impossible.
These Aren't New Principles
Evals, backpressure and agent guardrails are the feedback loops we already had. The mechanism didn't change, only who reads the output.




