How I Work
Engineering Philosophy
I usually get pulled in when workflows are slow, data movement is fragile, or coupling is hiding somewhere in the system. First step is always the same. Find the real constraint, not the symptom. Latency, correctness, production behaviour, and how much of the system the team can actually hold in their head.
That usually means breaking synchronous paths into async stages, making retries safe to repeat, fixing schemas that grew sideways, and putting AI behind human review. I design the system. I also write the code, deploy it, and fix it when it breaks.
Async pipelinesPayment systemsAI with human reviewService boundary designLegacy modernisation
Design For The Failure Path
Retries, partial failures, and stale data shape the design before I think about the happy path. If a system cannot degrade gracefully, the design is not done.
Architect Who Ships
I write the code, run the deploy, and stay on the pager. Architecture decisions made without production exposure are just opinions.
Decouple Before You Scale
Most bottlenecks are hidden coupling, not missing infrastructure. Find the dependency, break it, and only then ask if scaling is even needed.
Earn The Complexity
Every new tool or pattern has to justify its running cost. If the team cannot debug it at two in the morning without the person who built it, it is not ready.