Software engineering · empirical research · technical education
I am a software engineering consultant, researcher, and former Computer Science teacher. I work across C++, systems behaviour, AI-assisted programming, software quality, and computing education, with an emphasis on evidence, reproducible experiments, and explanations that remain honest about the systems underneath them.
Three parts of the same problem
I am interested in how software is built, how we know whether it behaves as intended, and how we teach people to reason about systems that are increasingly hidden behind abstractions.
Engineering
C++, software architecture, testing, DevOps, performance, maintainability, and the practical trade-offs involved in building reliable systems.
Research
Empirical software engineering, reproducible experiments, AI-assisted programming, software quality, and methods for separating plausible explanations from measurable evidence.
Education
Technical explanations and learning activities that make hidden behaviour observable without reducing complex systems to misleading rules of thumb.
Current research
AI-assisted programming and unexpected software behaviour
My current MSc research examines unexpected behaviours in AI-generated and human-written code through a reproducible empirical study. The work focuses on defects, rework, maintainability, technical debt, and the reliability of generated solutions.
The study is designed around transparent sampling, pinned tools and model versions, repeatable execution, and openly documented methodological decisions. Code, protocols, data artefacts, findings, and limitations will be published as the work matures.
Visible Systems
A developing research and educational direction built around one idea: when behaviour matters, people should have a way to observe it.
Memory layout, cache behaviour, concurrency, performance, compiler transformations, and undefined behaviour are difficult partly because the source code hides the mechanisms that produce the result. Visible Systems explores how carefully designed experiments, instrumentation, and visual representations can improve reasoning without pretending that one visualisation or benchmark explains everything.
Technical writing built around evidence
I write about C++, systems programming, performance, AI-assisted development, empirical software engineering, and computing education. The aim is not to produce another stream of generic tutorials. I want each article to make its assumptions visible, distinguish evidence from interpretation, and give the reader something they can inspect, run, or challenge.
Latest writing
-
From Prediction to Evidence: Teaching False Sharing as an Observable System
A practical false-sharing experiment showing how prediction, measurement and model revision can turn performance folklore into systems reasoning.
-
Teaching Performance Without Folklore: Why Simplified Models Need Somewhere to Go
Why systems education needs simplified models that learners can test, revisit and progressively refine as their understanding develops.
-
Why Systems Programming Feels Hard, and How to Make It More Observable
Why systems programming feels difficult, what computing education research says about mental models and visualisation, and how observable experiments can help learners reason about hidden runtime behaviour.
About me
I have been programming for more than twenty years and now work professionally as a software engineering consultant. Before returning to industry, I taught Computer Science at secondary and sixth-form level. Those two careers continue to shape how I approach technical work: build carefully, measure what matters, explain assumptions, and stay willing to revise the model when the evidence disagrees.
