I architect distributed systems that hold up at 3 AM.
Two careers, one instinct: design for the load before you draw the details. I design config-driven platforms, modernize the legacy systems they replace, and build the AI tooling my team works in.
§02 · LOAD-BEARING NUMBERS
SOURCE: LINKED CASE STUDIES · 2025–2026Roughly 397 of those files were per-source. Onboarding a source becomes configuration proven by a zero-side-effect dry run; the first source pattern runs end-to-end on the dev environment, ahead of any production traffic.
CS-01 · PIPELINE PLATFORMThe first jump, 1 to 4 with Java 11 to 17, took the better part of a year. The second, to Micronaut 5 and Java 25, took days to walk back to green and a month to settle, because the first left a test suite and a fast build behind.
CS-03 · MODERNIZATIONA staged, gated AWS KMS migration settled by one SQL query: roughly 190 keys moved by the tool, 17 created under the new key after cutover.
CS-04 · KMS KEY MIGRATIONSession memory is budgeted, not unbounded: the five latest retrospectives per layer, promoted to reference only once a pattern recurs three or more times. 49 of the 77 commits are mine.
CS-08 · AI ENGINEERING PLATFORM§03 · FIELD WORK
Selected Case Studies
Pipeline Platform: A Config-Driven Document Processing System
A multi-service platform built to replace a legacy pipeline of roughly 535 processor files with a config-driven DAG, decoupled sub-processors over RabbitMQ, an operator SPA that owns no mutations, and a standalone JWT issuer designed for a zero-downtime route migration.
Modernizing a Micronaut 1 Monolith Without a Big Bang
How a modernization program carried a 13,047-commit monolith from Micronaut 1 and Java 11 to Micronaut 4 and Java 17, touching every file without a freeze or a rewrite, and why the follow-up jump to Micronaut 5 and Java 25 cost a fraction of the effort.
Strangling a Monolith Through Its Data Layer
How I extracted a 75-entity JPA library and a 7-service gRPC bridge from a production monolith, taking a mostly-flaky shared test suite fully deterministic along the way. One seam of a strangler migration that is still not finished.
An AI Engineering Platform the Team Actually Adopted
How a team-adopted Claude Code platform, forty-seven skills and nineteen agents distributed through one installer script, turned session memory into a budgeted asset instead of a fresh start every time, and the design judgment behind what it deliberately did not ship.
EventHorizon: Building a Detection Platform for the Fourth Time
A solo side project and a clean rebuild of a streaming anomaly detection platform: five Flink jobs chained over Kafka, a statistical and ONNX-served ML ensemble, Micronaut services, and LLM explanations grounded in the detection itself, running end to end on a local Minikube cluster with no production deployment and no scale test yet.
EKS Cluster Migrations
Upgrading three EKS clusters from v1.30 to v1.33 and migrating Karpenter to v1 across roughly 25 production services, solo, under an extended-support deadline.
§04 · FIELD NOTES
Latest Writing
Building Waypoint: A Plan Pane for Claude Code
Why I built a Claude Code mod that draws the session's plan, the PRs it touches, and the decisions only I can make as a live pane, and what it took to make a 48-column side panel trustworthy.
One Feature Contract, Two Languages
Keeping an Isolation Forest trained in pandas and served inside Flink looking at the same six numbers: how the contract is written down, what enforces it, what it cost to get wrong, and the parts nothing checks yet.
One Interface, Two Models, and RAG on pgvector
How EventHorizon's LLM service swaps a local model for a cloud one behind a single interface, grounds anomaly explanations in the detection's own numbers plus context retrieved from pgvector, and where that grounding still leaks.
§05 · DISCIPLINE INDEX
Platform Architecture
An orchestrator, generic workers, an operator dashboard, and a standalone auth service, held to a deliberately shallow contract over RabbitMQ.
Modernization
A live monolith brought current without a freeze or a rewrite, and a schema-first data seam for a strangler decomposition that is not finished yet.
Security
A fail-closed SAML replay guard for an OAuth 2.1 server, a gated KMS key migration, and a tenant-scoped MCP server behind OAuth 2.1.
AI Engineering
A team-adopted Claude Code platform whose budgeted memory loop lets a lesson outlive the session that learned it.
Infrastructure
EKS and Karpenter upgrades done solo, median master CI time cut by about 65%, and Grafana moved from click-ops into Terraform.
Projects & Explorations
ProtoFaker on Maven Central and the EventHorizon side project, plus the AgentFlow exploration of shared context across agents.