Skip to content

Commit b462e5a

Browse files
committed
Enhance resume with Statsbomb case study depth
- Rewrite summary to emphasize architectural separation (DSLs, state machines, type systems) - Add Domain-Specific Language Design & State Machine Modeling expertise - Replace Statsbomb generic bullets with 5 detailed technical achievements: * DSL architecture (ANTLR, topological compilation, 100→1000+ scaling) * Collection system (Electron + XState + Apollo, 16h→4h workflows) * Claims-based metadata graph (automatic entity resolution) * Event sourcing platform (Kafka, immutable audit trails) * Team scaling lesson (distributed ownership, production library philosophy) - Strengthen Wise bullet with DDD reasoning and tradeoff analysis - Update skills: Add DSL Design, State Machine Modeling, ANTLR, promote XState/Electron to expert
1 parent 64a9f78 commit b462e5a

File tree

3 files changed

+31
-23
lines changed

3 files changed

+31
-23
lines changed

public/resume.pdf

21.4 KB
Binary file not shown.

resume-draft.md

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
## Summary
1010

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.
1212

1313
---
1414

@@ -26,6 +26,9 @@ Decomposing monoliths into bounded contexts with clear interfaces, reducing coup
2626
**Platform Engineering & Infrastructure Evolution**
2727
Designing infrastructure that lets teams deploy confidently—through observability, automated testing, and progressive delivery.
2828

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+
2932
---
3033

3134
## Experience
@@ -38,7 +41,7 @@ Building infrastructure for the world's most international account—helping 16M
3841

3942
- **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.
4043

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.
4245

4346
- **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.
4447

@@ -48,15 +51,17 @@ Building infrastructure for the world's most international account—helping 16M
4851

4952
**Statsbomb** | Bath, UK | 03/2018 - 03/2022
5053

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).
5257

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.
5459

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.
5661

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).
5863

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.
6065

6166
---
6267

@@ -82,12 +87,12 @@ Core team member building tools for mobile developers to ship better apps—cras
8287

8388
### Architecture & Systems
8489

85-
**Expert**: Distributed Systems, Event-Driven Architecture, Microservices, DDD, CQRS
90+
**Expert**: Distributed Systems, Event-Driven Architecture, Microservices, DDD, CQRS, DSL Design, State Machine Modeling
8691
**Proficient**: System Design, Platform Engineering, Real Time Processing, Stream Processing
8792

8893
### Backend & Data
8994

90-
**Expert**: Node.js, Kafka, Redis, SQL, REST, GraphQL, gRPC
95+
**Expert**: Node.js, Kafka, Redis, SQL, REST, GraphQL, gRPC, ANTLR
9196
**Proficient**: Python, Rust, Clojure, Scala, RocksDB, MongoDB, Neo4j, Druid
9297

9398
### DevOps & Infrastructure
@@ -97,7 +102,7 @@ Core team member building tools for mobile developers to ship better apps—cras
97102

98103
### Frontend
99104

100-
**Expert**: TypeScript, React, HTML/CSS
101-
**Proficient**: Vue, Angular, Redux, xstate, RxJS, D3, Electron
105+
**Expert**: TypeScript, React, XState, HTML/CSS, Electron
106+
**Proficient**: Vue, Angular, Redux, RxJS, D3
102107

103108
---

src/pages/resume.astro

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,7 @@ import '../styles/print-resume.css';
3838
<!-- Summary -->
3939
<section class="mb-16">
4040
<Body size="base" as="p" class="text-lg leading-relaxed">
41-
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.
4442
</Body>
4543
</section>
4644

@@ -64,6 +62,10 @@ import '../styles/print-resume.css';
6462
<Heading level={3} as="h3" class="mb-2"><span>Platform Engineering & Infrastructure Evolution</span></Heading>
6563
<Body size="sm" as="p">Designing infrastructure that lets teams deploy confidently—through observability, automated testing, and progressive delivery.</Body>
6664
</div>
65+
<div>
66+
<Heading level={3} as="h3" class="mb-2"><span>Domain-Specific Language Design & State Machine Modeling</span></Heading>
67+
<Body size="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>
68+
</div>
6769
</div>
6870
</section>
6971

@@ -84,7 +86,7 @@ import '../styles/print-resume.css';
8486
<Body size="sm" as="p" class="mb-4">Building infrastructure for the world's most international account—helping 16M+ customers move money across borders.</Body>
8587
<Body size="base" as="ul" class="space-y-3">
8688
<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>
8890
<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>
8991
</Body>
9092
</div>
@@ -100,10 +102,11 @@ import '../styles/print-resume.css';
100102
</div>
101103
<Body size="sm" as="p" class="mb-4">Led core data infrastructure for football analytics platform—serving Premier League clubs, international federations, and media companies.</Body>
102104
<Body size="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>
107110
</Body>
108111
</div>
109112

@@ -144,15 +147,15 @@ import '../styles/print-resume.css';
144147
<div>
145148
<Heading level={3} as="h3" class="mb-2"><span>Architecture & Systems</span></Heading>
146149
<div class="space-y-1">
147-
<Body size="sm" as="p"><strong>Expert:</strong> Distributed Systems, Event-Driven Architecture, Microservices, DDD, CQRS</Body>
150+
<Body size="sm" as="p"><strong>Expert:</strong> Distributed Systems, Event-Driven Architecture, Microservices, DDD, CQRS, DSL Design, State Machine Modeling</Body>
148151
<Body size="sm" as="p"><strong>Proficient:</strong> System Design, Platform Engineering, Real Time Processing, Stream Processing</Body>
149152
</div>
150153
</div>
151154

152155
<div>
153156
<Heading level={3} as="h3" class="mb-2"><span>Backend & Data</span></Heading>
154157
<div class="space-y-1">
155-
<Body size="sm" as="p"><strong>Expert:</strong> Node.js, Kafka, Redis, SQL, REST, GraphQL, gRPC</Body>
158+
<Body size="sm" as="p"><strong>Expert:</strong> Node.js, Kafka, Redis, SQL, REST, GraphQL, gRPC, ANTLR</Body>
156159
<Body size="sm" as="p"><strong>Proficient:</strong> Python, Rust, Clojure, Scala, RocksDB, MongoDB, Neo4j, Druid</Body>
157160
</div>
158161
</div>
@@ -168,8 +171,8 @@ import '../styles/print-resume.css';
168171
<div>
169172
<Heading level={3} as="h3" class="mb-2"><span>Frontend</span></Heading>
170173
<div class="space-y-1">
171-
<Body size="sm" as="p"><strong>Expert:</strong> TypeScript, React, HTML/CSS</Body>
172-
<Body size="sm" as="p"><strong>Proficient:</strong> Vue, Angular, Redux, xstate, RxJS, D3, Electron</Body>
174+
<Body size="sm" as="p"><strong>Expert:</strong> TypeScript, React, XState, HTML/CSS, Electron</Body>
175+
<Body size="sm" as="p"><strong>Proficient:</strong> Vue, Angular, Redux, RxJS, D3</Body>
173176
</div>
174177
</div>
175178
</div>

0 commit comments

Comments
 (0)