System Design
Shaping services, contracts and data flows before code exists.
evidenced in: 8 case studies · 2 companies
proving documents
Accepting inspection answers instantly and processing them durably, with an outbox
Redesigned how field inspectors' answers reach the platform, so the mobile app gets an immediate confirmation after validation while a background consumer processes the answers durably, with retries and traceable failures; outcome qualitative, not measured.
Moving customer reporting off the transactional database
Customer-facing indicators were timing out as analytical queries competed with live application traffic. I authored the architecture decision to separate the workloads, revised it to account for warehouse latency, and helped another engineer establish the service foundation. Rollout is in progress; end-state latency has not been measured.
The role-binding incident—and the separate deadlock found later
A role-cleanup change I implemented treated a user's access as global and removed it across workspaces. I owned the incident response, documented the missing rule, and led the architecture direction for a replacement consumer built by the squad. Months later, I traced a separate deadlock to Kafka partitioning and contributed per-user locking and recoverable failure handling; the later error rate was not measured.
Designing a single computation path for a cross-service metric
Two services independently calculated the same customer-facing metric, causing inconsistent data. I redesigned the architecture so only one service owned the calculation while every other service simply signaled stale data.
Designing the safety guarantees for an AI-orchestrated cleanup, not just automating the grind
Designed and built a Claude Code skill that safely orchestrates parallel agents to remove expired feature flags across a shared frontend and two backend services, closing a 36-subtask cleanup epic (24 feature flags plus 3 expired product tours and a legacy page, ~3,100 lines removed in one commit), with disjoint-file-set batching so agents can't collide, diff-against-baseline validation instead of absolute pass/fail, and an enforced two-repository deploy order so infrastructure changes can never precede the code that depends on them.
Synchronizing a Cross-Service Data Edit Atomically
Made an edit to an organizational node in the asset hierarchy propagate consistently across denormalized copies in seven tables and two services, via a single atomic transaction with post-commit events, the work that made me the team's reference for cross-service synchronization.
Changing where a new state is handled, instead of teaching eight read paths about it
A new platform-wide asset state was specified as a rule that eight different read paths had to learn. I proposed applying it once at the write boundary instead, removing the asset from route scope and restoring it on reactivation, which made most of the original scope unnecessary and left the counters, reports, app sync and adherence untouched.
Introducing a Design System where none existed
Identified the absence of frontend standards, proposed a Design System, built it from scratch and taught the team how to adopt it.
exercised at