You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: resume-draft.md
+16-11Lines changed: 16 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,7 +8,7 @@
8
8
9
9
## Summary
10
10
11
-
Principal Software Engineer building realtime distributed systems that scale. I make architectural decisions that unlock velocity while maintaining correctness—through event-driven patterns, immutable data flows, and infrastructure designed to fail gracefully. 12+ years taking platforms from prototype to production at companies like Wise and Statsbomb, handling millions of events per second.
11
+
Building realtime distributed systems that scale through architectural separation—DSLs for domain experts, state machines for correctness, event-driven patterns for operational simplicity. Making illegal states unrepresentable through type systems and formal validation. 12+ years architecting platforms that handle millions of events while maintaining both velocity and correctness guarantees.
12
12
13
13
---
14
14
@@ -26,6 +26,9 @@ Decomposing monoliths into bounded contexts with clear interfaces, reducing coup
Designing infrastructure that lets teams deploy confidently—through observability, automated testing, and progressive delivery.
28
28
29
+
**Domain-Specific Language Design & State Machine Modeling**
30
+
Designing DSLs that let domain experts express complex rules without code—using formal grammars (ANTLR), state machines (XState), and topological compilation. Making illegal states unrepresentable through type systems and finite state machines.
31
+
29
32
---
30
33
31
34
## Experience
@@ -38,7 +41,7 @@ Building infrastructure for the world's most international account—helping 16M
38
41
39
42
-**Increased conversion 19% through hypothesis-driven experimentation.** Isolated pricing friction points through rapid A/B testing. Short iterations revealed psychological barriers traditional analytics missed—validating hunches with data, not opinions.
40
43
41
-
-**Improved team velocity 4x by eliminating accidental complexity.**Refactored tangled service dependencies into composable modules with clear boundaries. Each team could now deploy independently. Reduced coordination overhead from "everyone talks to everyone" to "services talk through contracts."
44
+
-**Improved team velocity 4x by decomposing tangled service dependencies into bounded contexts with explicit contracts (DDD principles).**Previous architecture forced coordination across 8 teams for every change. Refactored to message-driven boundaries where services communicate through immutable events. Each team could deploy independently. Tradeoff: Added complexity in event schema evolution, but eliminated coordination tax and reduced deployment risk.
42
45
43
46
-**Increased user satisfaction 26% by consolidating fragmented product components.** Migrated six inconsistent UIs into a unified design system backed by shared state management. Users no longer learned different interactions for similar actions—cognitive load dropped, satisfaction rose.
44
47
@@ -48,15 +51,17 @@ Building infrastructure for the world's most international account—helping 16M
48
51
49
52
**Statsbomb** | Bath, UK | 03/2018 - 03/2022
50
53
51
-
Led core data infrastructure for football's most trusted analytics platform—serving Premier League clubs, international federations, and media companies.
54
+
Led core data infrastructure for football analytics platform—serving Premier League clubs, international federations, and media companies.
55
+
56
+
-**Designed domain-specific language (ANTLR grammar) enabling product managers to define sports rules as configuration.** Topological dependency resolution compiled declarative sequences ("pass then reception") into validation logic. Expanded from soccer to American football with zero code changes. Pattern: Separation of rules from execution unlocked non-linear scaling (100 → 1000+ collectors without proportional engineering).
52
57
53
-
-**Architected realtime data streaming platform from scratch, handling 10K+ events/second.**Chose event sourcing with Kafka for immutable audit trails—critical when clubs make million-pound decisions on our data. Event-driven design let us replay history, debug production issues in development, and maintain consistency across services without distributed transactions.
58
+
-**Built collaborative collection system (Electron + XState + Apollo GraphQL) replacing 16-hour sequential workflows with 4-hour concurrent collection.**XState state machines prevented illegal states by design—collectors couldn't submit without required fields, couldn't enter freeze frames without active events. 30+ contextual keyboard shortcuts (Mousetrap with module scoping) built muscle memory—same key, different action per context.
54
59
55
-
-**Increased data collection speed 6x through parallel processing architecture.**Previous sequential pipeline became the bottleneck—one slow collector blocked everyone. Redesigned as independent stream processors with coordinated checkpoints. Tradeoff: More complex failure handling, but throughput scaled linearly with workers.
60
+
-**Architected claims-based metadata graph for automatic entity resolution across crowd-sourced data.**5-person team resolved conflicts once—golden entities cascaded to dependent systems automatically. 99% error prevention through structural correctness (typed schemas, compile-time guarantees) vs runtime validation.
56
61
57
-
-**Improved data quality 8x by making validation impossible to skip.**Moved from "trust but verify" post-processing to typed schemas with compile-time guarantees. Invalid data couldn't enter the system—structural correctness over runtime checks. Quality issues dropped from daily firefighting to rare edge cases.
62
+
-**Event sourcing with Kafka provided immutable audit trails—critical when clubs make million-pound decisions.**Architecture enabled replay for debugging, consistency without distributed transactions, and linear throughput scaling. Reduced match collection from 16 sequential hours to 4 concurrent hours with near real-time (~20s latency).
58
63
59
-
-**These platform improvements drove 3x increase in client satisfaction.**Faster turnaround meant clubs received insights before match deadlines. Better quality meant fewer "wait, this can't be right" conversations. Technical decisions directly impacted renewal rates—architecture has business consequences.
64
+
-**Scaled from 2-person partnership to distributed subsystem ownership across Cairo team.**Engineers took foundational concepts (DSLs, state machines, event sourcing) and evolved them to contexts we hadn't explored—claims-based metadata resolution, concurrent collection workflows, desktop app state management. Pattern: Use production libraries (Apollo, Kafka, ANTLR) for infrastructure; focus engineering on domain problems. Lesson learned: Team building is the multiplier for ambitious architecture. Waiting until year 3 meant racing geo-political constraints before shipping customer-facing DSL.
60
65
61
66
---
62
67
@@ -82,12 +87,12 @@ Core team member building tools for mobile developers to ship better apps—cras
Building realtime distributed systems that scale through architectural decisions that unlock velocity while maintaining correctness—event-driven patterns, immutable data flows, and infrastructure designed to fail gracefully.
42
-
12+ years taking platforms from prototype to production at companies like Wise and Statsbomb,
43
-
handling millions of events per second.
41
+
Building realtime distributed systems that scale through architectural separation—DSLs for domain experts, state machines for correctness, event-driven patterns for operational simplicity. Making illegal states unrepresentable through type systems and formal validation. 12+ years architecting platforms that handle millions of events while maintaining both velocity and correctness guarantees.
<Bodysize="sm"as="p">Designing infrastructure that lets teams deploy confidently—through observability, automated testing, and progressive delivery.</Body>
66
64
</div>
65
+
<div>
66
+
<Headinglevel={3}as="h3"class="mb-2"><span>Domain-Specific Language Design & State Machine Modeling</span></Heading>
67
+
<Bodysize="sm"as="p">Designing DSLs that let domain experts express complex rules without code—using formal grammars (ANTLR), state machines (XState), and topological compilation. Making illegal states unrepresentable through type systems and finite state machines.</Body>
<Bodysize="sm"as="p"class="mb-4">Building infrastructure for the world's most international account—helping 16M+ customers move money across borders.</Body>
85
87
<Bodysize="base"as="ul"class="space-y-3">
86
88
<li><strong>Increased conversion 19% through hypothesis-driven experimentation.</strong> Isolated pricing friction points through rapid A/B testing. Short iterations revealed psychological barriers traditional analytics missed—validating hunches with data, not opinions.</li>
87
-
<li><strong>Improved team velocity 4x by eliminating accidental complexity.</strong> Refactored tangled service dependencies into composable modules with clear boundaries. Each team could now deploy independently. Reduced coordination overhead from "everyone talks to everyone" to "services talk through contracts."</li>
89
+
<li><strong>Improved team velocity 4x by decomposing tangled service dependencies into bounded contexts with explicit contracts (DDD principles).</strong> Previous architecture forced coordination across 8 teams for every change. Refactored to message-driven boundaries where services communicate through immutable events. Each team could deploy independently. Tradeoff: Added complexity in event schema evolution, but eliminated coordination tax and reduced deployment risk.</li>
88
90
<li><strong>Increased user satisfaction 26% by consolidating fragmented product components.</strong> Migrated six inconsistent UIs into a unified design system backed by shared state management. Users no longer learned different interactions for similar actions—cognitive load dropped, satisfaction rose.</li>
<Bodysize="sm"as="p"class="mb-4">Led core data infrastructure for football analytics platform—serving Premier League clubs, international federations, and media companies.</Body>
102
104
<Bodysize="base"as="ul"class="space-y-3">
103
-
<li><strong>Architected realtime data streaming platform from scratch, handling 10K+ events/second.</strong> Chose event sourcing with Kafka for immutable audit trails—critical when clubs make million-pound decisions on our data. Event-driven design let us replay history, debug production issues in development, and maintain consistency across services without distributed transactions.</li>
104
-
<li><strong>Increased data collection speed 6x through parallel processing architecture.</strong> Previous sequential pipeline became the bottleneck—one slow collector blocked everyone. Redesigned as independent stream processors with coordinated checkpoints. Tradeoff: More complex failure handling, but throughput scaled linearly with workers.</li>
105
-
<li><strong>Improved data quality 8x by making validation impossible to skip.</strong> Moved from "trust but verify" post-processing to typed schemas with compile-time guarantees. Invalid data couldn't enter the system—structural correctness over runtime checks. Quality issues dropped from daily firefighting to rare edge cases.</li>
106
-
<li><strong>These platform improvements drove 3x increase in client satisfaction.</strong> Faster turnaround meant clubs received insights before match deadlines. Better quality meant fewer "wait, this can't be right" conversations. Technical decisions directly impacted renewal rates—architecture has business consequences.</li>
105
+
<li><strong>Designed domain-specific language (ANTLR grammar) enabling product managers to define sports rules as configuration.</strong> Topological dependency resolution compiled declarative sequences ("pass then reception") into validation logic. Expanded from soccer to American football with zero code changes. Pattern: Separation of rules from execution unlocked non-linear scaling (100 → 1000+ collectors without proportional engineering).</li>
106
+
<li><strong>Built collaborative collection system (Electron + XState + Apollo GraphQL) replacing 16-hour sequential workflows with 4-hour concurrent collection.</strong> XState state machines prevented illegal states by design—collectors couldn't submit without required fields, couldn't enter freeze frames without active events. 30+ contextual keyboard shortcuts (Mousetrap with module scoping) built muscle memory—same key, different action per context.</li>
107
+
<li><strong>Architected claims-based metadata graph for automatic entity resolution across crowd-sourced data.</strong> 5-person team resolved conflicts once—golden entities cascaded to dependent systems automatically. 99% error prevention through structural correctness (typed schemas, compile-time guarantees) vs runtime validation.</li>
108
+
<li><strong>Event sourcing with Kafka provided immutable audit trails—critical when clubs make million-pound decisions.</strong> Architecture enabled replay for debugging, consistency without distributed transactions, and linear throughput scaling. Reduced match collection from 16 sequential hours to 4 concurrent hours with near real-time (~20s latency).</li>
109
+
<li><strong>Scaled from 2-person partnership to distributed subsystem ownership across Cairo team.</strong> Engineers took foundational concepts (DSLs, state machines, event sourcing) and evolved them to contexts we hadn't explored—claims-based metadata resolution, concurrent collection workflows, desktop app state management. Pattern: Use production libraries (Apollo, Kafka, ANTLR) for infrastructure; focus engineering on domain problems. Lesson learned: Team building is the multiplier for ambitious architecture. Waiting until year 3 meant racing geo-political constraints before shipping customer-facing DSL.</li>
0 commit comments