Projects

What I have built

Coda Payments

Jenkins retirement

Jenkins got slower the longer it ran. Stuck processes, a main process at 18GB, scheduled restarts to keep it alive and big repositories timing out on checkout. I moved every job onto TeamCity and the internal deployment system team by team until Jenkins was gone.

One delivery path and one less platform to babysit. In dynamic environments an app deploy now takes about 5 seconds, where Jenkins took minutes.

JenkinsTeamCityAWS
Coda Payments

Serverless migration framework

297 serverless stacks owned by 13 teams sat on runtimes heading for end of life, with their pipelines going away alongside Jenkins. I built self-service scripts that scanned each stack and output the exact steps and the infrastructure team handled the Terraform side.

13 teams migrated their own stacks off the deprecated runtimes and off Jenkins, each on its own schedule.

LambdaCloudFormationTerraformServerless FrameworkTeamCity
Coda Payments

Build once, deploy anywhere

ECS, EKS, Lambda and frontends each had their own build and release path, so the same change behaved differently depending on where it landed. I led one packaging model for all of them, from design to implementation with several teams, where an artifact is built once and promoted between environments untouched.

35 components onto TeamCity, 25 onto the deployment system and P95 deployment time down 8 minutes 41 seconds.

TeamCityDockerECRAWS
Coda Payments

Shared AI platform

Teams were each setting up their own model access, with per-team spend hard to attribute. I built one platform on Bedrock and EKS with a LiteLLM gateway for per-team keys and cost control, deployed with Argo CD. A teammate built the LiteLLM and Onyx pieces from the plan.

The AI PR reviewer, n8n automations and the internal assistant all run on one governed platform, with spend attributable to the team that caused it.

BedrockEKSArgo CDLiteLLMn8n
Coda Payments

Faster test environments

On-demand test environments took over 25 minutes to come up. I reworked them to start from prebuilt packages rather than building everything on request.

About 5 minutes to a working environment, at lower cost.

DockerAWSTeamCity
Coda Payments

MCP gateway

AI agents needed one controlled route into internal systems, so I set up the company gateway on FastMCP and piloted each new tool before releasing it. By 92 tools, loading every definition was eating the context the agent needed for the actual task.

92 tools sit behind search and call, so an agent loads only the tools it needs.

FastMCPPython
Coda Payments

Bitbucket to GitHub migration

Around 500 repositories had to move hosts while delivery carried on. I led the live sync cutover so pipelines and tooling moved first and developers followed once their repositories were ready. The teams ran their own moves.

Every repository moved on a phased cutover, with teams shipping the whole time.

BitbucketGitHubTeamCity
Coda Payments

Build compliance dashboard

Build configuration drifted away from policy on agent pools, concurrency and VCS polling, with no way to see where. I built a dashboard over the TeamCity data in Metabase.

873 configurations flagged against policy, which gave teams a list to work on.

TeamCityMetabaseAthena
Get2019 - 2020

Automated CI/CD pipelines

Releases were manual. I built pipelines covering build, automated testing and deployment on AWS CodeDeploy and Bitbucket Pipelines.

Deployments 60% faster, with tests running before a release.

AWS CodeDeployBitbucket PipelinesAWS
Get2019 - 2020

Autoscaling right-sizing

Traffic spikes needed capacity sized from real measurements. I load tested to find the limits, then sized instances and tuned the ALB scaling policies around them.

Monthly infrastructure cost down 20%, with the platform staying up during traffic spikes.

EC2Application Load BalancerAutoscaling
Get2019 - 2020

Containerized local development

Every engineer ran a slightly different local setup. I containerised the stack so everyone develops, debugs and tests features against the same environment.

A bug one engineer hits is a bug the next one can reproduce.

Docker
Get2019 - 2020

Zero Trust access controls

Engineers debugged by logging straight into servers. I removed that path and put network access controls in front of it.

Server access runs on controlled routes only, at a fintech company.

AWS networkingAccess controls
Daraz2018 - 2019

High-throughput order queue

Order data had to move between the storefront and the order management system, with third party data sync running alongside it. I built a RabbitMQ producer-consumer architecture and a dedicated high-throughput queue for the sync.

Order processing 40% faster.

RabbitMQMicroservices
Daraz2018 - 2019

Self-order cancellation

Cancelling an order meant contacting customer service. I built self-service cancellation and rolled it out in multiple regions.

Customer service workload down 15%.

PHPMicroservices
Daraz2018 - 2019

Digital goods platform

I ran the Daraz digital goods platform day to day in 5 South Asian markets.

5 markets served from one platform.

PHPMySQLRabbitMQ
Demac Media2015 - 2017

eCommerce performance work

Large Magento storefronts for retail clients were slow. I worked on the query patterns, the caching layers and the server-side code.

Page loads 40% faster for major clients.

MagentoMySQLCaching
Accunity2012 - 2015

SVN to Git migration

The company managed code in SVN. I moved it to Git, stood up an in-house GitLab server and trained the team on it.

Fewer errors and smoother collaboration in the team.

GitGitLabLinux
Accunity2012 - 2015

Resume management system

A client needed a system to manage incoming applications. I led the team that built it.

The client was happy with it and spent more with us.

PHPJavaScriptMySQL