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.
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.