Skip to content

Selected system work

A few systems, described by what changed.

Real work, framed by problem and outcome rather than client names. Some details are generalized to respect confidentiality.

Search · Streaming
240m → 6m~40× fasterNo backfill stalls

OpenSearch ingestion pipeline rebuild

Problem
The existing DMS + Kinesis pipeline was slow, and large indexing runs blocked new data from being indexed — a hard ceiling on throughput.
Approach
Re-architected the path to Debezium → MSK (Kafka) → OpenSearch Ingestion, decoupling backfills from live writes and parallelizing the heavy lifting.
Outcome
Indexing 1M records went from 240 minutes to 6 minutes (~40× faster), and large runs stopped starving new indexing.
Cloud · IaC
$30k → $22.5k / mo~$90k / yr savedRepeatable IaC

Console-to-CDK infrastructure migration

Problem
Production infrastructure was managed by hand in the console — hard to review, easy to drift, and expensive to run.
Approach
Migrated compute, messaging, data, ingress, delivery, security, and networking to AWS CDK, then modernized selected workloads through architecture changes, usage-based right-sizing, opt-in cost controls, and Graviton moves where they fit.
Outcome
Infrastructure changes became repeatable and code-reviewed, while monthly spend dropped from $30k to $22.5k (~$90k/year) after CDK migration, usage-based container right-sizing, Graviton moves, and opt-in AWS cost controls.
Backend · Latency
~95% fasterArchitectural redesignHot-path tuning

Customer-facing Inbox rebuild

Problem
A customer-facing Inbox had slow response times that hurt day-to-day usability, especially under load.
Approach
Redesigned the architecture and optimized the hot paths end to end, rather than patching around the symptoms.
Outcome
Cut response times by roughly 95%, making the Inbox feel near-instant again.
Backend · Migration
PHP → Node.jsCritical-path rewriteLower maintenance

Core 'Sorter' service: PHP → Node.js

Problem
The Sorter — the most critical component routing messages through the system — was an aging PHP service that was hard to evolve and maintain.
Approach
Rebuilt it in Node.js / TypeScript with a cleaner design, modernizing the critical path while preserving behavior.
Outcome
Improved the performance and maintainability of the system's single most vital component.
Database · Scale
1B+ rows in one database tablePartitioned by dateSafer reporting load

Billion-row production database optimization

Problem
A production reporting table had grown past a billion rows, and query patterns that once worked were degrading under real traffic.
Approach
Combined denormalization, read replicas, cursor pagination, targeted index hints, short-TTL caching, monthly date partitioning, enforced date filters, archiving, rate limits, and review guardrails for future queries.
Outcome
Kept reporting queries efficient on the active dataset, reduced production load, and made future access patterns safer to evolve.
SaaS · Multi-tenancy
Multi-tenant SaaSMillions of customersLegacy migration

Multi-tenant insurance SaaS platform

Problem
Large insurance brokerages needed to manage millions of customers across isolated tenants on a single platform.
Approach
Helped build a multi-tenant SaaS product and led a migration that moved data off a legacy single-tenant system onto it.
Outcome
Adopted by several of the world's largest insurance brokerages to manage millions of customers more efficiently.