At a glance
- Experience
- 16 years, the last 7 in UK public sector
- Core stack
- TypeScript, AWS CDK, serverless AWS
- Known for
- A shared CDK library used across RoS, and a CI/CD template eight teams adopted
- Open source
- 11 years of projects with over a million installs and downloads
Now October 2026
At the Registers of Scotland I architect and implement the technical direction that enables multiple teams to easily develop and deploy to AWS without too much divergence or friction. Day to day that means architecting and creating the CDK Constructs and Tools that teams use to write their IaC, shepherding the automated tooling to keep those projects up-to-date and running training to help those teams utilise the new technologies brought in.
Work 16 years
-
2023 to now
Principal Engineer, contracted as Developer Coach at the Registers of Scotland
I turned the patterns from replatforming the Chancery and Judicial Registers into a shared CDK constructs library, now used by teams across RoS to develop on AWS.
I chose to bring self-hosted GitLab runners, Renovate and LocalStack into the organisation, and steered them through government governance and got stakeholders on board. I then built a GitLab template repository as the standard starting point for CI/CD, and helped eight teams adopt it along with the runners, Renovate and LocalStack.
I also write and run workshops and training wherever a team has a gap, such as taking new graduates to the point of working on production code or teaching CDK to developers from junior to senior. Right now I'm building workshops on accessibility aimed at developers and project managers separately.
-
2019 to 2023
Senior Software Engineer at the Registers of Scotland
I was part of the first team to move Scottish Registers onto AWS, replatforming the Register of Judgments and the Register of Inhibitions from a Delphi application on Windows to serverless AWS. Being first meant spiking and setting the patterns that later teams would follow. We settled on using CDK for the infrastructure, deployed through a multistage, cross-account pipeline in CodePipeline. The application followed serverless designs around Lambda, RDS, Cognito and events, scaling down to zero for the quieter registers.
I brought in the practices for developing with Node and TypeScript, as the team I joined were Java developers new to the Node ecosystem. Given that we were replacing a government system that had lasted 30 years, we needed to build with long-term project health in mind as well as governmental requirements around GDS design, accessibility, security and observability. To achieve this we leaned heavily on DDD and Extreme Programming techniques, almost exclusively following TDD, pair programming and mobbing. Both registers cut over cleanly and are still in production today.
-
2019
Senior TypeScript Developer at Brainnwave
While at Brainnwave, my responsibilities centred around updating and improving the development process of the key application, beginning a migration to TypeScript and mentoring Junior Developers. As part of that, I managed to halve the loading time of their front-end application for the main audience, overhauled the workflow to reduce inefficiencies by a large amount and develop key new features to help them distinguish their application in the market.
-
2018 to 2019
Senior JavaScript Developer at Halo Insurance
During my time at Halo Insurance, I architected and developed a new renewals system built with ReactJS and Redux. Additionally, I laid the groundwork for a transition of their main administration app from Backbone to ReactJS while training their devs on how to use webpack, ES6 and ReactJS.
-
2018
Lead Engineer at Harness Property
My responsibilities as the Lead Engineer for Harness Property was mostly centred around coordinating the development around the a property portal, helping to train our more junior members on ReactJS and Microservices in PHP. Using Domain-Driven Design and Microservice Architecture, alongside Server Side Rendering, we were able to achieve a much higher load capacity than was originally anticipated.
-
2016 to 2018
Backend Team Leader at LifeWorks
As the Backend Team Leader at LifeWorks, my responsibilities centred around working to push the technologies that we were building on forward. Ranging from directing a refactor of a monolithic application to microservice-like architecture with Domain-Driven Design to moving some of the more lengthy processes that could be done asynchronously into an SNS or SQS queue that would be picked up either by a long-running PHP Process or a Node Lambda Function.
-
2010 to 2016
Earlier roles in Sydney, the Netherlands and London
Software engineer roles at eintellego, Indesign, Fujitsu Australia, Gruden, Serole Technologies (contracted to Optus), Hobsons, True and Perkbox. I built software to manage networking devices for eintellego, a front-end framework for use across Fujitsu's brands worldwide, replaced a decade-old tool for network engineers with a simple web service for Optus, built an analytics tool for teachers to help their students at Hobsons and server management tools for True's cloud platform and introduced Hexagonal Architecture and DDD at Perkbox.
Skills
Cloud and delivery
- Serverless on AWS
- Lambda, Cognito and RDS
- AWS CDK
- GitLab CI, GitHub Actions
- Docker, LocalStack
- Renovate
Testing
- Test-driven development
- Mutation testing
- StrykerJS plugin author
- Axe accessibility testing
- CDK and LocalStack integration tests
- Jest, NUnit, JUnit
Practice
- Domain-Driven Design
- Hexagonal architecture
- Event sourcing and CQRS
- Event-driven design
- Pair and mob programming
- Mentoring and teaching
- Accessible, responsive web
Languages
- JavaScript, TypeScript
- Node
- C#, Kotlin, Java
- Python, PHP
- Postgres
Side projects open source
Outside of work I build tools for my interests and the communities I'm a part of. These are a few of my favourite open source projects.
-
Mods of Mistria Installer
I built the GUI installer that Fields of Mistria players install mods with, and the format modders write them in. It's translated into five languages, and I ship native builds for Windows, Linux and macOS from a single codebase.
-
php-ews
I rewrote a dormant PHP library for talking to Microsoft Exchange, handling the NTLM authentication its SOAP services need. Rather than hand-write hundreds of types, I generated typed PHP classes by parsing Exchange's WSDL. This is my longest-running open source project. I've maintained it since 2015, and the generator has had to evolve with PHP from 5.5 to 8.5, moving from docblock types to union-typed setters and keeping up with deprecations like dynamic properties in 8.2.
-
RimWorld Development for Rider
My Rider plugin links RimWorld's XML Defs to the C# classes behind them, with autocomplete, go-to-definition and find usages in both directions, then adds debug launching, validation, code generation and plenty more. It's my proudest project, because Rider's own developers have been surprised that linking the two languages together was possible.
-
Rikai Rebuilt
When Firefox dropped its old add-on format, the Rikaisama Japanese reading add-on stopped working. I rebuilt it as a modern WebExtension for Firefox and Chrome, and I still use it to read Japanese.