About Me #
I’m a principal engineer based in London, focused on developer experience, software testing, and the platforms and tools engineers use every day.
I created Testcontainers in 2015 — a Docker-based library for running real dependencies inside automated tests. It’s grown into a de-facto approach to integration testing across Java, .NET, Go, Node, Python and more, used at companies including Uber, Netflix, Spotify and Google. In 2021 I co-founded AtomicJar to build a commercial complement to it, Testcontainers Cloud; AtomicJar was acquired by Docker in 2023. I’m no longer involved in the project, but I’m proud of what it became.
Today I’m a principal engineer at Skyscanner, working on developer enablement, internal tooling and production platforms — including Turbolift, a tool for making code changes across a large microservice estate (the story behind it). Lately I’ve been focused on making AI agents genuinely useful inside large, real-world codebases.
A thread runs through most of what I build: pragmatic tools that pay attention to what engineers actually need and get the job done.
Outside work I’m a father of two, a husband, and a general-purpose geek — interested in home automation, electronics, and a long tail of other things. A few of those have escaped onto the internet: euston.wtf, for catching trains from Euston a little more easily; weekends, a printable calendar generator built around weekends and public holidays; and bikegears, a gear calculator for youth bike racing.
Contact #
The best way to reach me is LinkedIn or email. My code is on GitHub.
I write here from time to time — the archive goes back a fair way.
Latest Posts
| Using Tailscale with Docker | |
| Faster builds with highly parallel GitHub Actions | |
| More practical direnv |
More posts can be found in the archive.