CV
Software Engineer with 9+ years building scalable, secure systems across AWS, Node, TypeScript and Go.
Experience
Where I've worked
Senior Backend Engineer
Apr 2025 – PresentLopay
While at Lopay I've been incredibly active in nearly all areas of the product. I've been directly involved and led multiple infrastructure migrations from Heroku to AWS. I've overhauled the entire testing suite, written hundreds of new tests, and I've done code-base wide tech-debt cleanup–all of which has allowed us to migrate off deprecated dependencies and improve the performance, security and reliability of the product. The tech stack is a monolithic TypeScript/TS.ed API, Postgres, DynamoDB, Redis, RabbitMQ, multiple Next / React Router frontend applications as well as a native iOS and Android mobile app. Most of my changes were within the API but I've made changes to every part of the product.
Alongside migrations and cleanup, I've done a huge amount of feature work on top. I've introduced integrations for 3 separate buy-now-pay-later providers as well as integrations with Xero and Square. This allows merchants to accept buy-now-pay-later payments from customers as well as syncing relevant accounting data directly into Xero.
Another key piece of work I did was around automating payment disputes. Payment disputes were almost entirely done manually by the team before this work. The team reported a 60-70% reduction in their work load after this change and millions of pounds of disputed transactions has since been handled by this new flow without any human intervention.
On the infrastructure and security side, I've done multiple major performance improvements to the API that underpins the whole product. One time I got 4x the performance for the exact same price we were paying before. This also completely solved an issue the API was experiencing with the node event loop being completely saturated and causing requests to fail. Security wise I've fixed multiple issues ranging from full account take-over exploits to SQL injection exploits to IDOR exploits to bad cryptography practices and a lot more.
I've been a key player in pushing the adoption of AI coding tools in the team. The whole team agrees that there has been a significant increase in code output and also agree that the amount of bugs being shipped has also decreased overall. As Lopay deals with money we've invested a lot of time in ensuring any AI tools we introduce do not detract from code quality nor product stability.
Senior Software Engineer
Jan 2024 – Apr 2025Jelly
At Jelly, I played a crucial role in a lean team, working alongside one other Senior Engineer, the founder, and the co-founder, both of whom were non-technical. I was responsible for all engineering aspects, from frontend and backend development to security, DevOps, SRE, solutions architecture, design, project management, and QA. Our tech stack primarily consisted of a TypeScript GraphQL API, a React PWA frontend, and a set of Lambda functions written in TypeScript and GoLang for websockets and event-driven actions.
In my role, I tackled a significant overhaul of the codebase, addressing substantial security issues, updating dependencies, and replacing in-line styles to enhance maintainability. I focused on reducing AWS costs and improving the developer experience, which enabled faster feature deployments and a more seamless workflow.
I introduced websocket functionality for real-time frontend updates. Rather than relying on third-party services like Pusher, we prioritised cost-effectiveness by building a custom solution with AWS API Gateway and GoLang. Additionally, I implemented an advanced permissioning system, empowering users with customizable create/read/update/delete roles for data management, thereby resolving security gaps and strengthening user access control.
On the frontend, I conducted a full-scale revamp, incorporating TailwindCSS and developing a new component library in line with our Figma designs. This overhaul included a complete redesign of the signup and onboarding flow and other core app areas. I also led integrations with major POS providers, Epos Now and Square, managing each integration end-to-end—from initial research and infrastructure setup to a user-friendly frontend that enabled seamless self-service integration.
Throughout my time at Jelly, I consistently championed improvements, advocating for product quality and challenging the status quo to ensure we delivered the best possible experience. My proactive approach fostered positive changes and strengthened our product.
Senior Software Engineer · Team Lead
Apr 2023 – Dec 2023albelli-Photobox Group (APG)
I joined APG right after a large merger and was quickly put on the team responsible for bringing together the backend systems. Shortly after I joined, I was made Team Lead of the orchestration team. Our main job was to manage a key GraphQL application called Orchestration. We used TypeScript and Apollo GraphQL for this, and it ran on AWS Lambda. We also used CloudFront and Redis for caching.
As the Team Lead, I led the creation of a new Orchestration which used newly created APG backend services. This was a big project that used GraphQL federation which had not been used in the company before. We built six different subgraphs, each responsible for specific concerns like content or shipping info for example. We connected these subgraphs initially using Apollo Gateway, then changed to Apollo Router which we ran as a container on ECS. The subgraphs were all TypeScript and ran on AWS Lambda like the original orchestration. This new setup was much more organised and easier to manage than the predecessor.
During my time at APG, I was also on-call during the peak period. APG sells printed photo products like custom calendars and photo books. Black friday and the whole lead up to Christmas is very busy which is one of the reasons we chose Lambda for the compute layer. During this time, I was frequently helping out with any issues as they occurred. I don't have any problem jumping into legacy / unfamiliar code and fixing issues.
Software Engineer
Dec 2022 – Mar 2023Aviva
During my time at Aviva, the tech stack was GoLang / AWS / Lambda / API Gateway / DynamoDB / EventBridge / SQS / CDK / React. Nearly every Microservice was composed of an API Gateway, DynamoDB and Lambda. The front end was React. There were a lot of microservices all of which were deployed using the AWS CDK. This was my first exposure to GoLang in a professional environment and I was able to jump straight in and get going with ease. I had also not used the AWS CDK before but I also picked this up easily and I made several significant infrastructure changes.
During my time at Aviva, the kind of infrastructure we used was notoriously difficult to debug due the fact a single request could see a large number of microservices and any one of these could fail. I used a combination of Amazon X-ray and CloudWatch log insights to identify and fix several different API failures.
Full Stack Engineer
Jan 2021 – Dec 2022iTech Media
I worked on the team responsible for building green-field products. During my time at iTech we released 4 new products which all ran on a platform we built to make launching products faster.
AWS
There were plenty of opportunities to flex my skills in AWS. I was solely responsible for creating and managing the infrastructure for my pillar (collection of teams with a similar focus/vertical). I set up Infrastructure as Code using CloudFormation as standard for all of our projects. We automated everything through a combination of Bitbucket Pipelines & GitHub Actions.
The entire stack is in Docker containers, so we leveraged ECS to host our containers and ECR for the container registry. The rest of the company used EKS (Kubernetes), but we pioneered the move towards Infrastructure as Code using CloudFormation and ECS.
My squad and pillar were the first in the company to become self-sufficient in DevOps / SRE. As we were branching away from help and supervision from the SRE team, we wanted to set the gold standard in the company. For example: as mentioned, everything was IaC as standard. All of our infrastructure in AWS ran in a 3-tier network architecture. AWS SecretsManager generated database passwords and provided them to the application without anyone ever seeing them. We leveraged GuardDuty and CloudTrail to monitor for abnormal account activity.
Development
In my squad, the stack was SvelteKit, Tailwind, TypeScript and CloudFlare Workers. SvelteKit has both frontend and backend code running in the same codebase. I spent most of my time working on the backend code which was essentially Node. Later we decided to convert the project to use TypeScript, this was a fairly painless process. I hadn't used TypeScript before, but my background in strongly typed languages made it very easy to pick up and I was using generics in no time.
I spent a lot of my time writing code for the CloudFlare Worker. This provided at-edge performance for a number of different things, including: localised content, connecting to internal APIs, logging and alerting, error handling and much more.
In the last 9 months, I moved into the data team. Our goal is to create an API from multiple data sources but add the ability for historical data which the sources didn't support. Our project was split into 3 services, import, ingest and deliver. All services were written in TypeScript and were running on Lambda functions. We utilised queuing with AWS SQS, PostgreSQL as a database in combination with DynamoDB where appropriate. We also used AWS SAM for deploying most of this project.
Backend / DevOps Engineer
Dec 2019 – Dec 2020Muzz
At Muzz, I worked as a Backend/DevOps Engineer primarily coding in PHP, alongside NodeJS. When I joined, Muzz had a user base of 4+ million users, scaling, managing and deploying infrastructure on that level was a massive jump from my prior employment. Some of the tables in MySQL had billions of rows, managing that data quickly and efficiently is a very complex challenge, especially with an ever-growing user base. This place was a very fast-paced start-up environment, where we had to balance the importance of quantity with quality (a big difference from my previous place, HAL).
When I first joined Muzz there was an internal moderation system which was used by the staff to moderate users on the app. I was able to take ownership of this internal tool, and using my previous experience, I completely refactored this. In 2 months it was rebuilt in Vue and I had converted the NodeJS backend into solely PHP to align with the rest of our stack. I also introduced fresh UX and UI which was much needed and more consistent with the brand. These changes brought significant performance improvements to the application but also to the staff using the tool, who could more effectively catch bad actors and help users.
Full Stack Engineer
May 2017 – Nov 2019Hire-A-Lite
This was my first professional engineering role. At HAL Group I was part of a 5-member team, including an Android developer, building and maintaining a bespoke internal Laravel SaaS product end-to-end, from feature work through to the AWS infrastructure. I worked directly with the users of the tool and created many features which significantly improved productivity for the users. I started as a junior and left as a Full Stack Engineer with 2 years of AWS experience.
I improved the code deployment process using CodePipeline and CodeBuild and later introduced AWS CloudFormation for infrastructure changes. At HAL, I gained extensive expertise in Vue and Laravel. I also played a role in moving to AWS Cognito for centralised authentication and created authentication “drivers” for Laravel to work with Cognito.
In my final year, I explored hosting applications with Lambda and DynamoDB and set up a Laravel Lambda function with a SQS queue worker for improved performance.
Skills
AWS
AWS Solutions Architect Associate with 9+ years running 24/7 mission-critical infrastructure for 4M+ users. Deep across EC2, Lambda, API Gateway, DynamoDB, CloudFormation/Terraform, CodePipeline CI/CD, CloudFront, ElastiCache, S3/RDS/EFS/Neptune/Redshift, Cognito, and security tooling (Inspector, WAF, GuardDuty).
Node · TypeScript · Deno · Bun
8+ years building backends — microservices, Express apps, websocket servers and event handlers — across Lambda, containers and edge workers. Comfortable with gnarly TypeScript typing and streaming large volumes of data.
GraphQL & Federation
Built and maintained multiple subgraphs from scratch and deployed Apollo Router to federate them together.
Databases
MySQL, PostgreSQL, Aurora and DynamoDB. Optimised problematic queries on terabyte-scale databases with billion-row tables; experienced with DynamoDB single-table design.
PHP / Laravel
3+ years on a bespoke SaaS product — queues, mailing, events, websockets, service containers, Eloquent, and custom Laravel packages with language packs, migrations and notifications.
Frontend
7+ years with Vue, Svelte and React (plus SvelteKit and Next.js) building full-scale SaaS frontends. VueX/Redux state management; Bootstrap, Bulma and Tailwind.
WebSockets
Live UIs, real-time messaging, graphs and notifications — with Pusher and with bespoke websocket servers scaling to tens of thousands of concurrent connections.
REST, Security & Git
Built and consumed REST APIs in many stacks, with API Gateway and JWT authentication. Security — especially JWT and best practices — is a favourite topic. Daily Git Flow with feature/hotfix branches.
Education
Where I studied
Sir Isaac Newton Sixth Form
2015 – 2017A Levels · Norwich
Aylsham High School
2010 – 2015GCSE · Aylsham
Certifications
Credentials