Portfolio
Twenty-five years of turning paperwork and manual processes into working software, usually single-handed.
Automation isn't new to me. Long before today's AI tools, I was replacing paper scoring sheets, tenancy paperwork and spreadsheet ordering with systems that did the work. The tools have changed; the job hasn't: understand the process, build something that works, improve it from real use.
What follows is a selection, with the stacks and methods behind it.
One person, a whole team's worth of roles
On most projects, the work below is split between a business analyst, a designer, a front-end developer, a back-end developer, a database specialist, a DevOps engineer, a security specialist, a project manager and a marketer. On many of mine, it was all me.
| Role a team would hire | What it looked like in my projects |
|---|---|
| Business analysis | Turning a paper-based process, a spreadsheet or a 30-page form into a clear specification |
| Design | Front-end interfaces, brand-led marketing sites, admin screens staff can use without training |
| Architecture and databases | Database design for live, mission-critical systems; polymorphic models to keep data clean; multi-site and multi-language platforms |
| Development | Full-stack PHP, mostly Laravel, plus Symfony, CodeIgniter, Zend, WordPress, Magento, Joomla and Go |
| Integration | Payment gateways, accounting, credit-checking and insurance services, property portals, maps, email and SMS |
| DevOps and hosting | Server builds, load balancing, deployment, Docker, Google Cloud, AWS and DigitalOcean |
| Security | Penetration-test findings implemented, server hardening, and recovery from attack |
| Project leadership | Technical lead in client meetings, code review, coding standards, and training colleagues |
| Marketing | Brand naming for search, SEO, Google Ads campaigns and conversion optimisation |
| Continuity | Documented recovery procedures so a system never depends on one person |
Selected work
Live scoring for national athletics events
Replacing a paper system that ran under pressure. Three panels of specialist judges and a safety judge score each live two-minute performance, with around 300 performances per event, so the system is mission-critical. I designed the interfaces, architected the database and built it. The audience sees the running order in real time and coaches see provisional placings. A second phase let coaches register and manage squads and pay online, and later work added event entry, team rosters, wristband orders and PDF score sheets. Laravel, MySQL and PostgreSQL, test-driven development, Sass, jQuery, Bootstrap, Nginx, Amazon S3.
A letting agency, run by software
An entire letting business automated, then rebuilt as cloud software. For a three-branch agency with 15 staff: tenancy creation, renewal, change and cancellation documents; properties published automatically to the website and portals such as Rightmove; supplier quotes and works orders; payments, invoices and reports; and matching prospects to properties. The client's site held a top Google position, with a clear effect on the business. Later refactored into a multi-user Laravel software-as-a-service application, with a REST API, a directory of 28,000 agents, a load-balanced server and documented recovery procedures. Laravel 4 to 5, REST APIs, load balancing, PDF generation, automated email.
Public sector: the Planning Inspectorate (GOV.UK)
An upgrade delivered five weeks early. Upgraded a GOV.UK site from PHP 5.4 to 7.2 and its WordPress REST API to version 2, with automated API testing as a bonus. Introduced Git and trained the client team in it. Later: implemented penetration-test findings and accessibility requirements across the English and Welsh websites, and built a stateless, multi-stage, multi-language appeals form, using the GOV.UK Design System. WordPress, PHP 7, REST API, Postman, Git, GDS design patterns, accessibility.
Public sector: Defra and the Animal and Plant Health Agency
Inside a large, fully agile team. Development and debugging of a substantial bespoke ordering system for vets and farmers to order animal tests, on site with the client: weekly sprints, daily stand-ups, multiple teams and bespoke API integrations. Laravel, Jira, Vagrant, Xdebug, Gulp, Sass, GDS patterns.
BBC Good Food: a commenting and reviews service
From rapid prototype to API. For the backend of BBCGoodFood.com's comments, questions, reviews, tips and ratings: a rapid prototype in Laravel, then the service in Symfony's API Platform with generated API documentation, a schema migrated from MySQL to MongoDB as requirements changed, automated integration tests and code-quality checks, running in Docker. Symfony API Platform, Doctrine, MongoDB, Docker, Postman, GitFlow.
University recovery after an attack
Around 200 websites restored. At Queen Mary University of London, after an attack by Anonymous: repairing cross-site scripting and SQL injection vulnerabilities, hardening servers and installing certificates across bespoke, WordPress and Zend Framework sites, plus a command-line tool to find every site's owners and contact them. PHP, Linux server administration, Bash, SSL, security repair.
Taking control of an inherited platform
The first of five developers to get it moving. As lead Laravel developer on a pharmaceutical company's multi-language content platform, where compliance matters: a poorly written, undocumented codebase brought under control, duplicated code merged, multi-language support rebuilt, server and deployment diagrams drawn, and code from third-party agencies reviewed. I also represented the project as technical lead in client meetings. Laravel, Git, code review, refactoring, documentation.
A Go API behind a trade e-commerce site
Live stock levels, built across two languages. A bespoke business-to-business shop in PHP, hosted on Google Cloud, reading live stock levels from an API written in Go. PHP, Go, Google Cloud Platform, Vue.js, AMP.
More, briefly
- Lush (retail): Laravel and Lumen microservices, migration to Google Cloud, API documentation, continuous integration, and Go
- Property: holiday-rental and letting portals with booking calendars, maps, PayPal, currency conversion, SMS and PDF automation
- Healthcare software: a subscription platform for chiropractors to produce patient exercise sheets, from brand name and design to the drag-and-drop builder
- Retail and manufacturing e-commerce: a multi-site cloud ordering platform with full revision history, integrated with the client's tills and payment gateway; B2B uniform ordering for 30 leisure centres, integrated with Sage
- Financial products: an application integrating credit-checking and insurance services
- Courts: one-to-one and group training of judges and clerks at the Royal Courts of Justice, and sensitive data migration
Tech stack
Depth across the whole stack, not a list of buzzwords. These are tools I've used to deliver real work.
Languages and frameworks
PHP (object-oriented, since the early 2000s) with Laravel (from 4.2 onwards), Lumen, Symfony and API Platform, CodeIgniter, Zend Framework, WordPress (plugins, themes, REST API), Magento and Joomla. Go for APIs and microservices. JavaScript with Vue.js, React and jQuery.
Front end
HTML5 and CSS, Sass and Less, Bootstrap and Foundation, Gulp and Laravel Elixir, AMP, accessibility to government standards, and the GOV.UK Design System.
Data
Relational database design in MySQL and PostgreSQL (including PostGIS for location data), MongoDB, Doctrine, and migrations between them.
APIs and integration
Building and consuming REST APIs, Swagger/OpenAPI documentation, Postman testing. Payments with Stripe, PayPal, GoCardless and Sage Pay; accounting with Xero and Sage; SendGrid, Facebook and Google Maps APIs; property portals, credit checking and insurance services.
Infrastructure and DevOps
Linux server builds and hardening (Ubuntu, CentOS, RHEL), Apache and Nginx, Docker, Kubernetes exposure, Vagrant, Bash. Google Cloud Platform, AWS, DigitalOcean and Cloudflare. Load balancing, backups and restore testing, DNS and domain management (a Nominet registrar), and performance tuning.
Quality and delivery
Test-driven development with PHPUnit, Behat and PHPSpec, continuous integration, code-quality tools, Git and GitFlow, Composer and code review.
Methods
Agile, when it helps; common sense always
I've worked in fully agile teams, with weekly sprints, stand-ups and Jira, and I bring the useful parts to every project: short cycles, working software early, and feedback from real users. On my own projects that means building a first version quickly and improving it in steps, rather than a long plan that's out of date by launch.
Prototype first
Several projects started with a rapid prototype to settle the requirements before the real build, so the expensive decisions are made with something working in front of people.
Tests as a safety net
Test-driven development and automated API testing, so changes are safe, especially on systems a business depends on.
Leave it better than I found it
Duplicated code merged, Git introduced, coding standards written down (PSR for PHP), and recovery procedures documented so the client is never dependent on me.
Exponential thinking
A certified ExO Consultant and ExO Sprint Coach with OpenExO: designing for the technology that will exist in two years, not the technology of five years ago.
Qualifications and training
- ExO Sprint Coach, OpenExO, 2020: certified to run a ten-week exponential technology sprint
- ExO Consultant, OpenExO, 2019: among the first ten in the UK
- Google Cloud Platform specialisation: developing, deploying, debugging and securing applications
- Google Ads qualified individual, managing budgets up to £750 a day
- Nominet registrar
- Zero to Dangerous, Flow Research Collective, 2020: neuroscience-based peak performance
Away from the screen

I play classical piano, and write apps to help musicians practise. I've cycled from the south of England to Spain, and back, at around 100 miles a day with four loaded panniers. Somehow it felt effortless.