Staff Software Engineer and published author (“Rust Web Development” – Manning) with 15+ years making
-pragmatic architecture decisions for backend systems at scale. Currently shipping Rust, C++, and Python code to
-hundreds of millions of Firefox users at Mozilla. Founded Rust&Tell Berlin, the largest Rust meetup globally.
+
+
+
Staff Software Engineer at Mozilla, shipping Rust, C++, and Python to hundreds of millions of Firefox users.
+Published author (“Rust Web Development” – Manning). Founder of Rust&Tell Berlin, the largest Rust meetup
+globally.
-
SKILLS
-
Languages: Rust, Python, TypeScript, JavaScript, Go Frontend: React, Angular, Vue.js Backend: Rust (Actix, Warp, Axum), Python (FastAPI), Node.js, Go Patterns: REST, GraphQL, gRPC, async Rust, distributed systems (P2P) Infrastructure: AWS, Google Cloud, Docker, Kubernetes, CI/CD, Grafana Domains: Systems Programming, FFI, Distributed Systems, Web Services, Micro Services, IoT, Blockchain,
-Firefox
+
SKILLS
+
Languages: Rust, C++, Python, TypeScript, Go Backend & Systems: Rust (Actix, Warp, Axum), Python (FastAPI), Node.js, async Rust, FFI/UniFFI
+ Patterns: REST, GraphQL, gRPC, distributed systems (P2P), microservices Infrastructure: AWS, Google Cloud, Docker, Kubernetes, CI/CD, Grafana AI Tooling: Claude Code, GitHub Copilot
-
PROFESSIONAL EXPERIENCE
-
-
Staff Software Engineer - Full-time February 2026 - Now
- Senior Software Engineer - Full-time July 2024 - January 2026
- Mozilla, Remote Shipping Rust, C++, and Python code across Firefox desktop and mobile to hundreds of millions of users. All work is open source.
-
-
-
Consolidated four separate favicon implementations across Firefox teams into a single Image Service – chose to extend an existing Python/Airflow pipeline rather than build a new microservice, now serving 4 teams from one manifest behind a GCS-backed API
-
-
Implemented Oblivious HTTP (OHTTP) from scratch in application-services (shared Rust component cross-compiled to Swift and Kotlin via UniFFI) plus handwritten C++ and Rust for Firefox Desktop – users are now unidentifiable when making privacy-sensitive requests across all platforms
-
-
Maintained Firefox Push notification service (50k requests/second, sub-200ms latency): reduced memory footprint, added circuit breakers, and built Grafana dashboards for operational visibility
-
-
Contributor and code reviewer for UniFFI, Mozilla’s multi-language bindings generator enabling Rust code to be called from Kotlin, Swift, Python, and JavaScript
-
-
Built Rust extensions for Merino (Python/FastAPI service powering Firefox Suggest); wrote RFCs, mapped out project plans, and surfaced cross-team blockers early
-
-
Led “Rusty Fridays” internal education sessions, guiding engineers through Rust adoption and mentoring junior contributors across teams
+
PROFESSIONAL EXPERIENCE
+
Staff Software Engineer (promoted from Senior) July 2024 - Present
+ Mozilla, Remote
+
+
+
Implemented Oblivious HTTP (OHTTP) from scratch in application-services (shared Rust component
+ cross-compiled to Swift/Kotlin via UniFFI) plus C++ and Rust for Firefox Desktop – users are now
+ unidentifiable when making privacy-sensitive requests across all platforms
+
+
+
Consolidated four separate favicon implementations into a single Image Service – extended an existing
+ Python/Airflow pipeline rather than building a new microservice, now serving 4 teams from one
+ manifest behind a GCS-backed API
+
+
+
Maintained Firefox Push notification service (50k req/s, sub-200ms latency): reduced memory footprint,
+ added circuit breakers, built Grafana dashboards
+
+
+
Contributor and code reviewer for UniFFI, Mozilla’s multi-language bindings generator (Rust to Kotlin,
-
-
Senior Systems Engineer, Team Lead - Full-time April 2023 - June 2024
- Toposware, Remote Core team of 4 building a peer-to-peer distributed network protocol from scratch in Rust.
-
-
Achieved 10x throughput per node by profiling and targeting the actual bottleneck – optimized batch processing and serialization paths, tuned message volumes to avoid throughput degradation – rather than redesigning the consensus layer
-
-
Led benchmark initiative with 3 engineers that revealed nodes were compute-bound on encryption/decryption, not network-limited – findings redirected optimization effort away from networking toward crypto performance
-
-
Rewrote the CLI from scratch, replacing error-prone CLI parameters with local config files – reduced operator misconfiguration during node setup
-
-
Built an EVM bridge connecting external Ethereum-compatible chains to the core network
-
-
Set up load testing, CI/CD pipelines, and Grafana dashboards for production observability
+ Swift, Python, JavaScript)
+
+
+
Led “Rusty Fridays” internal education sessions, mentoring engineers across teams through Rust
+ adoption
+
Senior Systems Engineer, Team Lead 2023 - 2024
+ Toposware, Remote Core team of 4 building a peer-to-peer distributed network protocol from scratch in Rust.
+
+
+
Achieved 10x throughput per node by profiling the actual bottleneck – optimized batch processing and
+ serialization paths rather than redesigning the consensus layer
+
+
+
Led benchmark initiative that revealed nodes were compute-bound on crypto operations, not
+ network-limited – redirected optimization effort accordingly
+
+
+
Built an EVM bridge connecting external Ethereum-compatible chains to the core network
+
Senior Software Engineer 2022 - 2023
+ Centrifuge, Remote Protocol team building DeFi applications on Substrate/Polkadot in Rust.
+
+
+
Implemented on-chain fund pool mutations – core feature for the lending protocol enabling live capital
+ allocation adjustments
+
+
+
Replaced manual documentation with CI-driven auto-generation from Rust source – eliminated
+ persistent drift between code and public docs
+
Author, “Rust Web Development” 2020 - 2022
+ Manning Publications Published end-to-end guide covering async Rust, web frameworks, and production deployment.
+
Technical lead for Fortune 500 engagements: debugged latency issues, redesigned messaging flows,
+ advised on architectures matching client team size and resources
+
+
+
Created reusable engagement playbooks adopted across the EMEA Professional Services team
-
-
Senior Software Engineer - Full-time August 2022 - February 2023
- Centrifuge, Remote Protocol team building DeFi applications on Substrate/Polkadot in a self-governed organization.
-
-
Implemented fund pool mutations on-chain, enabling users to adjust capital allocations in live pools – core feature for the lending protocol
-
-
Built client-facing APIs on top of fund pools, giving external integrators programmatic access to pool operations
-
-
Replaced manual documentation with CI-driven auto-generation from Rust source on every PR – eliminated persistent drift between code and public docs
-
-
Co-authored RFCs to build consensus on new protocol features across the decentralized team
-
-
-
Author of “Rust Web Development” October 2020 - December 2022
- Manning Publications, Remote
-
-
Published “Rust Web Development” through Manning – end-to-end guide covering async Rust, web frameworks, and production deployment, distributed globally
-
-
-
Sr. Solutions Architect (Professional Services) - Full-time May 2021 - July 2022
- Solutions Architect (Professional Services) - Full-time June 2020 - May 2021
- Twilio Inc., Remote Second Solutions Architect hired for the new EMEA Professional Services team. Led enterprise integrations across contact center, messaging, and voice products.
-
-
-
Technical lead for Fortune 500 engagements: debugged audio quality and latency issues, redesigned messaging flows, and advised clients on achievable architectures given their team size and resources
-
-
Advocated for combining two existing lower-cost Twilio products over adopting a newer, more expensive one for a major engagement – reduced client spend while using battle-tested components
-
-
Created reusable engagement playbooks (setup checklists, edge-case discovery questions, technical review templates) adopted across the EMEA team
-
-
Hired and onboarded engineers to scale the Professional Services team
-
-
-
Systems Engineer - Contract August 2019 - May 2020
- Kraken Digital Currency Exchange, Remote (San Francisco) Member of the first Rust engineering team (12 engineers), replacing core banking infrastructure and API gateway.
-
-
Migrated core banking services and API gateway from PHP to Rust, achieving 100x throughput improvement – enabling the exchange to absorb order-of-magnitude traffic growth without scaling hardware
-
-
Built new Rust services from scratch with comprehensive test coverage and security-first design
-
-
Worked directly with the CTO on privacy-focused architectural decisions for the trading platform
-
-
-
Rust Developer - Freelance March 2019 - July 2019
- Self Employed, Berlin/Toronto
-
-
Founded the monthly “Rust & Tell Berlin” meetup – grew it into the largest Rust meetup globally, still running years later
-
-
Contributed to Rust core and ecosystem libraries
-
-
Created Rust learning resources specifically for Node.js developers transitioning to systems programming
-
-
-
Sr. Software Engineer - Freelance March 2016 - February 2019
- OSRAM, Körber Digital, Avenga, ERGO Group, GIATA, PaperHive, Glispa (Berlin) Freelance consultant for enterprise clients across IoT, logistics, tourism, and ad-tech.
-
-
Designed authentication infrastructure for OSRAM’s IoT platform (thousands of connected lighting devices) using Keycloak for user auth and service-to-service auth across microservices (Node.js, Go, Lua)
-
-
First engineering hire at Körber Digital: chose Node.js/React/AWS stack, built real-time data pipelines with a time-series database optimized for fast retrieval of sensor data
-
-
Decomposed GIATA’s monolithic tourism ERP into 6 Docker-based microservices – rewrote the hotel ingestion pipeline and mass photo upload system, significantly improving UI responsiveness and system scalability
-
-
Tech Lead at Avenga: introduced Scrum and refactored a monolith into microservices to unblock parallel team development
-
-
Built analytics dashboards and ad platforms at Glispa (AngularJS); mentored teams on modern JavaScript practices
-
-
-
Software Engineer - Full-time August 2015 - February 2016
- smartB Energy Management GmbH, Berlin Small agile team building energy monitoring applications for business owners.
-
-
-
Introduced pair programming and component-based frontend architecture, enabling multiple developers to work on the same codebase without conflicts
-
-
Full-stack development with JavaScript and Python using TDD
-
-
-
Software Engineer - Freelance March 2015 - July 2015
- blogfoster GmbH, Berlin First developer hired to replace legacy PHP/Backbone application with Node.js and React.
-
-
Built the first version of the ad marketplace; co-designed architecture with the CTO using TDD from day one
-
-
-
Frontend Developer - Full-time February 2014 - March 2015
- Dalia Research, Berlin First and sole frontend developer at 8-person startup.
-
-
Bootstrapped the customer-facing survey platform and analytics dashboards in AngularJS – core UI remained largely untouched in production for close to 10 years
-
-
EDUCATION
-
Bachelor of Science, Computer Science September 2010 - February 2014
- TH Ingolstadt Scholarship from Allianz Deutschland AG to study Computer Science, fully funded and with trainings in Scrum,
-Java, PL/I and mainframe systems on the side.
+
Systems Engineer 2019 - 2020
+ Kraken Digital Currency Exchange, Remote
+
+
+
Migrated core banking services and API gateway from PHP to Rust, achieving 100x throughput
+ improvement – enabling order-of-magnitude traffic growth without scaling hardware
+
+
+
Worked directly with the CTO on privacy-focused architectural decisions for the trading platform
+
Earlier Career 2014 - 2019
+ Sr. Software Engineer across enterprise clients (OSRAM, Körber Digital, GIATA, Avenga) and startups (Dalia
+Research, blogfoster, smartB) in Berlin.
+
+
+
Founded “Rust & Tell Berlin” meetup – grew it into the largest Rust meetup globally, still running
+ years later
+
+
+
Designed IoT authentication infrastructure at OSRAM for thousands of connected devices (Node.js,
+ Go, Lua)
+
+
+
First engineering hire at Körber Digital: built real-time sensor data pipelines on AWS
+
+
+
Decomposed GIATA’s monolithic ERP into 6 Docker-based microservices, improving system scalability
+
EDUCATION
+
Bachelor of Science, Computer Science TH Ingolstadt – Scholarship from Allianz Deutschland AG (fully funded)
+
+
+
+
-
-
\ No newline at end of file
diff --git a/resume.4ct b/resume.4ct
index 26be2b4..84a4e43 100644
--- a/resume.4ct
+++ b/resume.4ct
@@ -2,5 +2,5 @@
\doTocEntry\tocsection{0}{\csname a:TocLink\endcsname{1}{x1-10000}{QQ2-1-1}{\centerline {SUMMARY}}}{1}\relax
\doTocEntry\tocsection{0}{\csname a:TocLink\endcsname{1}{x1-20000}{QQ2-1-2}{\centerline {SKILLS}}}{1}\relax
\doTocEntry\tocsection{0}{\csname a:TocLink\endcsname{1}{x1-30000}{QQ2-1-3}{\centerline {PROFESSIONAL EXPERIENCE}}}{1}\relax
-\doTocEntry\tocsection{0}{\csname a:TocLink\endcsname{1}{x1-40000}{QQ2-1-4}{\centerline {EDUCATION}}}{5}\relax
+\doTocEntry\tocsection{0}{\csname a:TocLink\endcsname{1}{x1-40000}{QQ2-1-4}{\centerline {EDUCATION}}}{3}\relax
\par
diff --git a/resume.4tc b/resume.4tc
index 67ad61f..5ad2690 100644
--- a/resume.4tc
+++ b/resume.4tc
@@ -2,4 +2,4 @@
\doTocEntry\tocsection{0}{\csname a:TocLink\endcsname{1}{x1-10000}{QQ2-1-1}{\centerline {SUMMARY}}}{1}\relax
\doTocEntry\tocsection{0}{\csname a:TocLink\endcsname{1}{x1-20000}{QQ2-1-2}{\centerline {SKILLS}}}{1}\relax
\doTocEntry\tocsection{0}{\csname a:TocLink\endcsname{1}{x1-30000}{QQ2-1-3}{\centerline {PROFESSIONAL EXPERIENCE}}}{1}\relax
-\doTocEntry\tocsection{0}{\csname a:TocLink\endcsname{1}{x1-40000}{QQ2-1-4}{\centerline {EDUCATION}}}{5}\relax
+\doTocEntry\tocsection{0}{\csname a:TocLink\endcsname{1}{x1-40000}{QQ2-1-4}{\centerline {EDUCATION}}}{3}\relax
diff --git a/resume.css b/resume.css
index 661fe72..cc15aed 100644
--- a/resume.css
+++ b/resume.css
@@ -35,6 +35,8 @@ li p:first-child{ margin-top:0em; }
li p:last-child, li div:last-child { margin-bottom:0.5em; }
li p:first-child{ margin-bottom:0; }
li p~ul:last-child, li p~ol:last-child{ margin-bottom:0.5em; }
+ul.itemize1,ol.enumerate1{padding-left: 0;}
+ul li.itemize,ol li.enumerate{margin-left: 1rem;}
.enumerate1 {list-style-type:decimal;}
.enumerate2 {list-style-type:lower-alpha;}
.enumerate3 {list-style-type:lower-roman;}
@@ -66,6 +68,7 @@ div.flushleft {text-align: left;}
.framebox-r {text-align:right;}
span.thank-mark{ vertical-align: super }
span.footnote-mark sup.textsuperscript, span.footnote-mark a sup.textsuperscript{ font-size:80%; }
+aside.footnote-text p{margin-top:0; margin-bottom:0;text-indent: 0;}
code.verb{font-family:monospace,monospace;}
div.tabular, div.center div.tabular {text-align: center; margin-top:0.5em; margin-bottom:0.5em; }
table.tabular td p{margin-top:0em;}
@@ -111,7 +114,9 @@ table.pmatrix {width:100%;}
span.bar-css {text-decoration:overline;}
img.cdots{vertical-align:middle;}
.partToc a, .partToc, .likepartToc a, .likepartToc {line-height: 200%; font-weight:bold; font-size:110%;}
-.index-item, .index-subitem, .index-subsubitem {display:block}
+.theindex-letter{ margin-top: 1em;}
+.index-subitem{ margin-left: 2ch;}
+.index-subsubitem{ margin-left: 4ch;}
div.caption {text-indent:-2em; margin-left:3em; margin-right:1em; text-align:center; margin-top: 0.5rem;}
div.caption span.id{font-weight: bold; white-space: nowrap; }
h1.partHead{text-align: center}
@@ -122,7 +127,7 @@ p.bibitem-p { text-indent: 0em; margin-left: 2em; margin-top:0.6em; margin-botto
.subparagraphHead, .likesubparagraphHead { font-weight: bold;}
.verse{white-space:nowrap; margin-left:2em}
div.maketitle {text-align:center;}
-h2.titleHead{text-align:center;}
+h1.titleHead{text-align:center;}
div.maketitle{ margin-bottom: 2em; }
div.author, div.date {text-align:center;}
div.thanks{text-align:left; margin-left:10%; font-size:85%; font-style:italic; }
@@ -139,6 +144,8 @@ figure.figure {text-align:center;}
figcaption.caption {text-indent:-2em; margin-left:3em; margin-right:1em; text-align:center;}
figcaption.caption span.id{font-weight: bold; white-space: nowrap; }
p + figcaption, img + figcaption{margin-top: 1em;}
+.thebibliography dl { display: grid; grid-auto-columns: min-content 1fr; grid-auto-flow: column; }
+.thebibliography dt { grid-column: 1; margin-bottom: 0.5em; }
.abstract{margin:1em;}
table.tabbing {width:100%; margin-top:1em;}
td.tabbing {width:33%;}
diff --git a/resume.dvi b/resume.dvi
index 8e73a40..c982761 100644
Binary files a/resume.dvi and b/resume.dvi differ
diff --git a/resume.idv b/resume.idv
index 5dd7dd3..90994a7 100644
Binary files a/resume.idv and b/resume.idv differ
diff --git a/resume.lg b/resume.lg
index a815e27..1def4b4 100644
--- a/resume.lg
+++ b/resume.lg
@@ -42,6 +42,8 @@ Css: li p:first-child{ margin-top:0em; }
Css: li p:last-child, li div:last-child { margin-bottom:0.5em; }
Css: li p:first-child{ margin-bottom:0; }
Css: li p~ul:last-child, li p~ol:last-child{ margin-bottom:0.5em; }
+Css: ul.itemize1,ol.enumerate1{padding-left: 0;}
+Css: ul li.itemize,ol li.enumerate{margin-left: 1rem;}
Css: .enumerate1 {list-style-type:decimal;}
Css: .enumerate2 {list-style-type:lower-alpha;}
Css: .enumerate3 {list-style-type:lower-roman;}
@@ -73,6 +75,7 @@ Css: .framebox-l {text-align:left;}
Css: .framebox-r {text-align:right;}
Css: span.thank-mark{ vertical-align: super }
Css: span.footnote-mark sup.textsuperscript, span.footnote-mark a sup.textsuperscript{ font-size:80%; }
+Css: aside.footnote-text p{margin-top:0; margin-bottom:0;text-indent: 0;}
Css: code.verb{font-family:monospace,monospace;}
Css: div.tabular, div.center div.tabular {text-align: center; margin-top:0.5em; margin-bottom:0.5em; }
Css: table.tabular td p{margin-top:0em;}
@@ -118,7 +121,9 @@ Css: table.pmatrix {width:100%;}
Css: span.bar-css {text-decoration:overline;}
Css: img.cdots{vertical-align:middle;}
Css: .partToc a, .partToc, .likepartToc a, .likepartToc {line-height: 200%; font-weight:bold; font-size:110%;}
-Css: .index-item, .index-subitem, .index-subsubitem {display:block}
+Css: .theindex-letter{ margin-top: 1em;}
+Css: .index-subitem{ margin-left: 2ch;}
+Css: .index-subsubitem{ margin-left: 4ch;}
Css: div.caption {text-indent:-2em; margin-left:3em; margin-right:1em; text-align:center; margin-top: 0.5rem;}
Css: div.caption span.id{font-weight: bold; white-space: nowrap; }
Css: h1.partHead{text-align: center}
@@ -129,7 +134,7 @@ Css: .paragraphHead, .likeparagraphHead { margin-top:2em; font-weight: bold;}
Css: .subparagraphHead, .likesubparagraphHead { font-weight: bold;}
Css: .verse{white-space:nowrap; margin-left:2em}
Css: div.maketitle {text-align:center;}
-Css: h2.titleHead{text-align:center;}
+Css: h1.titleHead{text-align:center;}
Css: div.maketitle{ margin-bottom: 2em; }
Css: div.author, div.date {text-align:center;}
Css: div.thanks{text-align:left; margin-left:10%; font-size:85%; font-style:italic; }
@@ -146,6 +151,8 @@ Css: figure.figure {text-align:center;}
Css: figcaption.caption {text-indent:-2em; margin-left:3em; margin-right:1em; text-align:center;}
Css: figcaption.caption span.id{font-weight: bold; white-space: nowrap; }
Css: p + figcaption, img + figcaption{margin-top: 1em;}
+Css: .thebibliography dl { display: grid; grid-auto-columns: min-content 1fr; grid-auto-flow: column; }
+Css: .thebibliography dt { grid-column: 1; margin-bottom: 0.5em; }
Css: .abstract{margin:1em;}
Css: table.tabbing {width:100%; margin-top:1em;}
Css: td.tabbing {width:33%;}
diff --git a/resume.log b/resume.log
index 36a2222..348a135 100644
--- a/resume.log
+++ b/resume.log
@@ -1,12 +1,15 @@
-This is pdfTeX, Version 3.141592653-2.6-1.40.29 (TeX Live 2026) (preloaded format=pdflatex 2026.3.1) 4 MAR 2026 11:52
+This is pdfTeX, Version 3.141592653-2.6-1.40.29 (TeX Live 2026) (preloaded format=latex 2026.3.1) 9 MAR 2026 09:46
entering extended mode
restricted \write18 enabled.
%&-line parsing enabled.
-**resume.tex
-(./resume.tex
-LaTeX2e <2025-11-01>
-L3 programming layer <2026-01-19>
-(./res.cls
+**\makeatletter\def\HCode{\futurelet\HCode\HChar}\def\HChar{\ifx"\HCode\def\HCo
+de"##1"{\Link##1}\expandafter\HCode\else\expandafter\Link\fi}\def\Link#1.a.b.c.
+{\g@addto@macro\@documentclasshook{\RequirePackage[#1,html]{tex4ht}}\let\HCode\
+documentstyle\def\documentstyle{\let\documentstyle\HCode\expandafter\def\csname
+ tex4ht\endcsname{#1,html}\def\HCode####1{\documentstyle[tex4ht,}\@ifnextchar[{
+\HCode}{\documentstyle[tex4ht]}}}\makeatother\HCode resume.cfg,html5.a.b.c.\inp
+ut resume.tex
+(./resume.tex (./res.cls
Document Style `res' <26 Sep 89>.
Document Class: res 2000/05/19 v1.4b Resume class
(/usr/local/texlive/2026basic/texmf-dist/tex/latex/base/article.cls
@@ -38,77 +41,406 @@ No auxiliary output files.
\resumewidth=\dimen150
\@columnwidth=\dimen151
\c@numberofcolumns=\count283
-) (/usr/local/texlive/2026basic/texmf-dist/tex/latex/psnfss/helvet.sty
+) (/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/tex4ht.sty
+version 2025-12-14-13:41
+Package: tex4ht
+--------------------------------------
+--- Note --- for _ at preamble, use the command line option `early_'
+--------------------------------------
+--------------------------------------
+--- Note --- for ^ at preamble, use the command line option `early^'
+--------------------------------------
+\tmp:toks=\toks22
+)
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/usepackage.4ht
+version 2025-08-27-10:30
+)
+(/usr/local/texlive/2026basic/texmf-dist/tex/latex/psnfss/helvet.sty
Package: helvet 2020/03/25 PSNFSS-v9.3 (WaS)
(/usr/local/texlive/2026basic/texmf-dist/tex/latex/graphics/keyval.sty
Package: keyval 2022/05/29 v1.15 key=value parser (DPC)
-\KV@toks@=\toks22
+\KV@toks@=\toks23
))
-(/usr/local/texlive/2026basic/texmf-dist/tex/latex/l3backend/l3backend-pdftex.d
-ef
-File: l3backend-pdftex.def 2025-10-09 L3 backend support: PDF output (pdfTeX)
-\l__color_backend_stack_int=\count284
+(./resume.cfg
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/tex4ht.4ht
+version 2025-07-09-13:35
+--------------------------------------
+--- Note --- for additional information, use the command line option `info'
+--------------------------------------
+
+::::::::::::::::::::::::::::::::::::::::::
+ TeX4ht info is available in the log file
+::::::::::::::::::::::::::::::::::::::::::
+) (/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/tex4ht.sty
+version 2025-12-14-13:41
+
+l.882 --- TeX4ht warning --- nonprimitive \everypar ---
+--- needs --- tex4ht resume ---
+\tmp:cnt=\count284
+\openout15 = `resume.tmp'.
+
+(./resume.tmp)
+\tmp:dim=\skip52
+ (./resume.xref)
+\:refout=\write3
+\openout3 = `resume.xref'.
+
+
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4.4ht
+version 2026-01-04-08:10
+--------------------------------------
+--- Note --- to remove the processing instruction use the c
+ommand line option `no-VERSION'
+--------------------------------------
+--------------------------------------
+--- Note --- to remove the DOCTYPE declaration use the command line option `no-
+DOCTYPE'
+--------------------------------------
+)
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/unicode.4ht
+version 2026-01-04-08:10
+)
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4-math.4ht
+version 2026-01-29-13:49
+)
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html5.4ht
+version 2026-01-18-07:06
+)
+--------------------------------------
+--- Note --- for marking of the base font, use the command line option `fonts+'
+
+--------------------------------------
+--------------------------------------
+--- Note --- for non active _, use the command line option `no_'
+--------------------------------------
+--------------------------------------
+--- Note --- for _ of catcode 13, use the command line option `_13'
+--------------------------------------
+--------------------------------------
+--- Note --- for non active ^, use the command line option `no^'
+--------------------------------------
+--------------------------------------
+--- Note --- for ^ of catcode 13, use the command line option `^13'
+--------------------------------------
+
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4.4ht
+version 2026-01-04-08:10
+--------------------------------------
+--- Note --- for alternative charset, use the command line option `charset=...'
+
+--------------------------------------
+--------------------------------------
+--- Note --- to ignore CSS font decoration, use the `NoFonts' command line opti
+on
+--------------------------------------
+--------------------------------------
+--- Note --- for jpg bitmaps of pictures, use the `jpg' command line option. (C
+haracter bitmaps are controled only by `g' records of tex4ht.env and `-g' switc
+hes of tex4ht.c)
+--------------------------------------
+--------------------------------------
+--- Note --- for gif bitmaps of pictures, use the `gif' command line option. (C
+haracter bitmaps are controled only by `g' records of tex4ht.env and `-g' switc
+hes of tex4ht.c)
+--------------------------------------
+--------------------------------------
+--- Note --- for content and toc in 2 frames, use the command line option `fram
+es'
+--------------------------------------
+--------------------------------------
+--- Note --- for content, toc, and footnotes in 3 frames, use the command line
+option `frames-fn'
+--------------------------------------
+--------------------------------------
+--- Note --- for file extension name xht, use the command line option `xht'
+--------------------------------------
+TeX4ht package options: html5,html,xhtml
+--------------------------------------
+--- Note --- To print a timestamp, use the command line option timestamp
+--------------------------------------
+--------------------------------------
+--- Note --- to ignore CSS code, use the command line option `-css
+--------------------------------------
+--------------------------------------
+--- Note --- for inline CSS code, use the command line option `css-in'
+--------------------------------------
+--------------------------------------
+--- Note --- for pop ups on mouse over, use the command line option `mouseover'
+
+--------------------------------------
+--------------------------------------
+--- Note --- for addressing images in a subdirectory, use the command line opti
+on `imgdir:.../'
+--------------------------------------
+)
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/unicode.4ht
+version 2026-01-04-08:10
+)
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4-math.4ht
+version 2026-01-29-13:49
+)
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html5.4ht
+version 2026-01-18-07:06
+--------------------------------------
+--- Note --- To print a timestamp, use the command line option timestamp
+--------------------------------------
+--------------------------------------
+--- Note --- We use a default CSS style. Use the `nostyle' option if you want t
+o use custom a CSS design
+--------------------------------------
+)
+\:tokwrite=\toks24
+\:tokpage=\toks25
+--------------------------------------
+--- Note --- for back links to toc, use the command line option `sections+'
+--------------------------------------
+--------------------------------------
+--- Note --- for linear crosslinks of pages, use the command line option `next'
+
+--------------------------------------
+\openout15 = `resume.4ct'.
+
+\:tocout=\write4
+\openout4 = `resume.4tc'.
+
+
+(resume.4tc)
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4.4ht
+version 2026-01-04-08:10
+)
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/unicode.4ht
+version 2026-01-04-08:10
+)
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4-math.4ht
+version 2026-01-29-13:49
+)
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html5.4ht
+version 2026-01-18-07:06
+)
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/latex.4ht
+version 2025-12-04-13:51
+LaTeX Info: Redefining \_ on input line 180.
+LaTeX Info: Redefining \begin on input line 634.
+LaTeX Info: Redefining \end on input line 682.
+LaTeX Info: Redefining \, on input line 844.
+LaTeX Info: Redefining \; on input line 845.
+LaTeX Info: Redefining \! on input line 846.
+LaTeX Info: Redefining \: on input line 847.
+LaTeX Info: Redefining \> on input line 848.
+--------------------------------------
+--- Note --- for links into captions, instead of float heads, use the command l
+ine option `refcaption'
+--------------------------------------
+
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4.4ht
+version 2026-01-04-08:10
+)
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/unicode.4ht
+version 2026-01-04-08:10
+)
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4-math.4ht
+version 2026-01-29-13:49
+)
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html5.4ht
+version 2026-01-18-07:06
+)
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4.4ht
+version 2026-01-04-08:10
+--------------------------------------
+--- Note --- For mini tocs immediately aftter the header use the command line o
+ption `minitoc<'
+--------------------------------------
+--------------------------------------
+--- Note --- For full TOC on each page compatible with the collapsetoc DOM filt
+er, use the `fulltoc' command line option.
+--------------------------------------
+--------------------------------------
+--- Note --- for enumerated list elements with valued data, use the command lin
+e option `enumerate+'
+--------------------------------------
+--------------------------------------
+--- Note --- for enumerated list elements li's with value attributes, use the c
+ommand line option `enumerate-'
+--------------------------------------
+--------------------------------------
+--- Note --- for CSS2 code, use the command line option `css2'
+--------------------------------------
+--------------------------------------
+--- Note --- for pictorial tabular, use the command line option `pic-tabular'
+--------------------------------------
+--------------------------------------
+--- Note --- for bitmap fbox'es, use the command line option `pic-fbox'
+--------------------------------------
+--------------------------------------
+--- Note --- for minipage with width, use the command line option `minipage-wid
+th'
+--------------------------------------
+--------------------------------------
+--- Note --- for bitmap framebox'es, use the command line option `pic-framebox'
+
+--------------------------------------
+--------------------------------------
+--- Note --- for inline footnotes use command line option `fn-in'
+--------------------------------------
+--------------------------------------
+--- Note --- for tracing of latex font commands, use the command line option `f
+onts'
+--------------------------------------
+--------------------------------------
+--- Note --- for width specifications of tabular p entries, use the `p-width' c
+ommand line option or a configuration similar to \Configure{HColWidth}{\HCode{
+style="width:\HColWidth"}}
+--------------------------------------
+)
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/unicode.4ht
+version 2026-01-04-08:10
+)
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4-math.4ht
+version 2026-01-29-13:49
+--------------------------------------
+--- Note --- for pictorial eqnarray, use the command line option `pic-eqnarray'
+
+--------------------------------------
+--------------------------------------
+--- Note --- for pictorial array, use the command line option `pic-array'
+--------------------------------------
+--------------------------------------
+--- Note --- for pictorial $...$ environments, use the command line option `pic
+-m' (not recommended!!)
+--------------------------------------
+--------------------------------------
+--- Note --- for pictorial $...$ and $$...$$ environments with latex alt, use t
+he command line option `pic-m+' (not safe!!)
+--------------------------------------
+--------------------------------------
+--- Note --- for pictorial array, use the command line option `pic-array'
+--------------------------------------
+)
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html5.4ht
+version 2026-01-18-07:06
+))
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/fontmath.4ht
+version 2022-10-25-13:59
+
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4.4ht
+version 2026-01-04-08:10
+)
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/unicode.4ht
+version 2026-01-04-08:10
+)
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4-math.4ht
+version 2026-01-29-13:49
+)
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html5.4ht
+version 2026-01-18-07:06
+))
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/res.4ht
+version 2009-05-21-09:32
+)
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/article.4ht
+version 2023-04-10-13:46
+
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4.4ht
+version 2026-01-04-08:10
+--------------------------------------
+--- Note --- for automatic sectioning pagination, use the command line option `
+1', `2', `3', '4', '5', '6', or '7'
+--------------------------------------
+--------------------------------------
+--- Note --- for files named derived from section titles, use the command line
+option `sec-filename'
+--------------------------------------
+--------------------------------------
+--- Note --- for i-columns index, use the command line option `index=i' (e.g.,
+index=2)
+--------------------------------------
+)
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/unicode.4ht
+version 2026-01-04-08:10
+)
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4-math.4ht
+version 2026-01-29-13:49
+)
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html5.4ht
+version 2026-01-18-07:06
+))
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/res-a.4ht
+version 2009-05-21-09:32
+
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4.4ht
+version 2026-01-04-08:10
+)
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/unicode.4ht
+version 2026-01-04-08:10
+)
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4-math.4ht
+version 2026-01-29-13:49
+)
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html5.4ht
+version 2026-01-18-07:06
+))
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4.4ht
+version 2026-01-04-08:10
+)
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/unicode.4ht
+version 2026-01-04-08:10
+)
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html4-math.4ht
+version 2026-01-29-13:49
+)
+(/usr/local/texlive/2026basic/texmf-dist/tex/generic/tex4ht/html5.4ht
+version 2026-01-18-07:06
+))
+(/usr/local/texlive/2026basic/texmf-dist/tex/latex/l3backend/l3backend-dvips.de
+f
+File: l3backend-dvips.def 2025-10-09 L3 backend support: dvips
+\l__pdfannot_backend_content_box=\box53
+\l__pdfannot_backend_model_box=\box54
+\g__pdfannot_backend_int=\count285
+\g__pdfannot_backend_link_int=\count286
+\g__pdfannot_backend_link_sf_int=\count287
)
LaTeX Warning: Unused global option(s):
[10pt].
No file resume.aux.
-LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 30.
-LaTeX Font Info: ... okay on input line 30.
-LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 30.
-LaTeX Font Info: ... okay on input line 30.
-LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 30.
-LaTeX Font Info: ... okay on input line 30.
-LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 30.
-LaTeX Font Info: ... okay on input line 30.
-LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 30.
-LaTeX Font Info: ... okay on input line 30.
-LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 30.
-LaTeX Font Info: ... okay on input line 30.
-LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 30.
-LaTeX Font Info: ... okay on input line 30.
+LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 2.
+LaTeX Font Info: ... okay on input line 2.
+LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 2.
+LaTeX Font Info: ... okay on input line 2.
+LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 2.
+LaTeX Font Info: ... okay on input line 2.
+LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 2.
+LaTeX Font Info: ... okay on input line 2.
+LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 2.
+LaTeX Font Info: ... okay on input line 2.
+LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 2.
+LaTeX Font Info: ... okay on input line 2.
+LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 2.
+LaTeX Font Info: ... okay on input line 2.
+--- file resume.css ---
+)
LaTeX Font Info: External font `cmex10' loaded for size
(Font) <7> on input line 46.
LaTeX Font Info: External font `cmex10' loaded for size
(Font) <5> on input line 46.
-[1
+ [1
-{/usr/local/texlive/2026basic/texmf-var/fonts/map/pdftex/updmap/pdftex.map}]
-Underfull \hbox (badness 10000) in paragraph at lines 121--123
-
- []
-
-
-Underfull \hbox (badness 10000) in paragraph at lines 147--149
-
- []
-
-[2] [3]
+] [2] [3]
***********
LaTeX2e <2025-11-01>
L3 programming layer <2026-01-19>
***********
)
Here is how much of TeX's memory you used:
- 598 strings out of 469006
- 10756 string characters out of 5454814
- 445756 words of memory out of 5000000
- 29363 multiletter control sequences out of 15000+600000
- 629322 words of font info for 45 fonts, out of 8000000 for 9000
+ 4481 strings out of 469007
+ 58078 string characters out of 5454840
+ 592612 words of memory out of 5000000
+ 33137 multiletter control sequences out of 15000+600000
+ 629490 words of font info for 46 fonts, out of 8000000 for 9000
319 hyphenation exceptions out of 8191
- 49i,8n,52p,357b,206s stack positions out of 10000i,1000n,20000p,200000b,200000s
-
-Output written on resume.pdf (3 pages, 77604 bytes).
-PDF statistics:
- 39 PDF objects out of 1000 (max. 8388607)
- 24 compressed objects within 1 object stream
- 0 named destinations out of 1000 (max. 500000)
- 1 words of extra memory for PDF output out of 10000 (max. 10000000)
+ 49i,8n,59p,828b,464s stack positions out of 10000i,1000n,20000p,200000b,200000s
+Output written on resume.dvi (3 pages, 26000 bytes).
diff --git a/resume.pdf b/resume.pdf
index b1e9f46..2962ffd 100644
Binary files a/resume.pdf and b/resume.pdf differ
diff --git a/resume.tex b/resume.tex
index f30e0d2..62ccc43 100644
--- a/resume.tex
+++ b/resume.tex
@@ -52,7 +52,7 @@
\section{\centerline{SUMMARY}}
\vspace{8pt} % Gap between title and text
-Staff Software Engineer and published author ("Rust Web Development" -- Manning) with 15+ years making pragmatic architecture decisions for backend systems at scale. Currently shipping Rust, C++, and Python code to hundreds of millions of Firefox users at Mozilla. Founded Rust\&Tell Berlin, the largest Rust meetup globally.
+Staff Software Engineer at Mozilla, shipping Rust, C++, and Python to hundreds of millions of Firefox users. Published author (``Rust Web Development'' -- Manning). Founder of Rust\&Tell Berlin, the largest Rust meetup globally.
%----------------------------------------------------------------------------------------
@@ -65,12 +65,11 @@ Staff Software Engineer and published author ("Rust Web Development" -- Manning)
\section{\centerline{SKILLS}}
\vspace{8pt} % Gap between title and text
-{\bf Languages:} Rust, Python, TypeScript, JavaScript, Go \\
-{\bf Frontend:} React, Angular, Vue.js \\
-{\bf Backend:} Rust (Actix, Warp, Axum), Python (FastAPI), Node.js, Go \\
-{\bf Patterns:} REST, GraphQL, gRPC, async Rust, distributed systems (P2P) \\
+{\bf Languages:} Rust, C++, Python, TypeScript, Go \\
+{\bf Backend \& Systems:} Rust (Actix, Warp, Axum), Python (FastAPI), Node.js, async Rust, FFI/UniFFI \\
+{\bf Patterns:} REST, GraphQL, gRPC, distributed systems (P2P), microservices \\
{\bf Infrastructure:} AWS, Google Cloud, Docker, Kubernetes, CI/CD, Grafana \\
-{\bf Domains:} Systems Programming, FFI, Distributed Systems, Web Services, Micro Services, IoT, Blockchain, Firefox
+{\bf AI Tooling:} Claude Code, GitHub Copilot
%----------------------------------------------------------------------------------------
@@ -84,114 +83,70 @@ Staff Software Engineer and published author ("Rust Web Development" -- Manning)
\vspace{8pt} % Gap between title and text
-{\sl Staff Software Engineer - Full-time} \hfill February 2026 - Now \\
-{\sl Senior Software Engineer - Full-time} \hfill July 2024 - January 2026 \\
+{\sl Staff Software Engineer (promoted from Senior)} \hfill July 2024 - Present \\
Mozilla, Remote \\
-Shipping Rust, C++, and Python code across Firefox desktop and mobile to hundreds of millions of users. All work is open source.
\begin{itemize} \itemsep -2pt
-\item Consolidated four separate favicon implementations across Firefox teams into a single Image Service -- chose to extend an existing Python/Airflow pipeline rather than build a new microservice, now serving 4 teams from one manifest behind a GCS-backed API
-\item Implemented Oblivious HTTP (OHTTP) from scratch in application-services (shared Rust component cross-compiled to Swift and Kotlin via UniFFI) plus handwritten C++ and Rust for Firefox Desktop -- users are now unidentifiable when making privacy-sensitive requests across all platforms
-\item Maintained Firefox Push notification service (50k requests/second, sub-200ms latency): reduced memory footprint, added circuit breakers, and built Grafana dashboards for operational visibility
-\item Contributor and code reviewer for UniFFI, Mozilla's multi-language bindings generator enabling Rust code to be called from Kotlin, Swift, Python, and JavaScript
-\item Built Rust extensions for Merino (Python/FastAPI service powering Firefox Suggest); wrote RFCs, mapped out project plans, and surfaced cross-team blockers early
-\item Led ``Rusty Fridays'' internal education sessions, guiding engineers through Rust adoption and mentoring junior contributors across teams
+\item Implemented Oblivious HTTP (OHTTP) from scratch in application-services (shared Rust component cross-compiled to Swift/Kotlin via UniFFI) plus C++ and Rust for Firefox Desktop -- users are now unidentifiable when making privacy-sensitive requests across all platforms
+\item Consolidated four separate favicon implementations into a single Image Service -- extended an existing Python/Airflow pipeline rather than building a new microservice, now serving 4 teams from one manifest behind a GCS-backed API
+\item Maintained Firefox Push notification service (50k req/s, sub-200ms latency): reduced memory footprint, added circuit breakers, built Grafana dashboards
+\item Contributor and code reviewer for UniFFI, Mozilla's multi-language bindings generator (Rust to Kotlin, Swift, Python, JavaScript)
+\item Led ``Rusty Fridays'' internal education sessions, mentoring engineers across teams through Rust adoption
\end{itemize}
-{\sl Senior Systems Engineer, Team Lead - Full-time} \hfill April 2023 - June 2024 \\
+{\sl Senior Systems Engineer, Team Lead} \hfill 2023 - 2024 \\
Toposware, Remote \\
Core team of 4 building a peer-to-peer distributed network protocol from scratch in Rust.
\begin{itemize} \itemsep -2pt
-\item Achieved 10x throughput per node by profiling and targeting the actual bottleneck -- optimized batch processing and serialization paths, tuned message volumes to avoid throughput degradation -- rather than redesigning the consensus layer
-\item Led benchmark initiative with 3 engineers that revealed nodes were compute-bound on crypto operations, not network-limited -- redirected optimization effort accordingly
-\item Rewrote the CLI from scratch, replacing error-prone CLI parameters with local config files -- reduced operator misconfiguration during node setup
+\item Achieved 10x throughput per node by profiling the actual bottleneck -- optimized batch processing and serialization paths rather than redesigning the consensus layer
+\item Led benchmark initiative that revealed nodes were compute-bound on crypto operations, not network-limited -- redirected optimization effort accordingly
\item Built an EVM bridge connecting external Ethereum-compatible chains to the core network
-\item Set up load testing, CI/CD pipelines, and Grafana dashboards for production observability
\end{itemize}
-{\sl Senior Software Engineer - Full-time} \hfill August 2022 - February 2023 \\
+{\sl Senior Software Engineer} \hfill 2022 - 2023 \\
Centrifuge, Remote \\
-Protocol team building DeFi applications on Substrate/Polkadot in a self-governed organization.
+Protocol team building DeFi applications on Substrate/Polkadot in Rust.
\begin{itemize} \itemsep -2pt
-\item Implemented fund pool mutations on-chain, enabling users to adjust capital allocations in live pools -- core feature for the lending protocol
-\item Built client-facing APIs on top of fund pools, giving external integrators programmatic access to pool operations
-\item Replaced manual documentation with CI-driven auto-generation from Rust source on every PR -- eliminated persistent drift between code and public docs
-\item Co-authored RFCs to build consensus on new protocol features across the decentralized team
+\item Implemented on-chain fund pool mutations -- core feature for the lending protocol enabling live capital allocation adjustments
+\item Replaced manual documentation with CI-driven auto-generation from Rust source -- eliminated persistent drift between code and public docs
\end{itemize}
-{\sl Author of "Rust Web Development"} \hfill October 2020 - December 2022 \\
-Manning Publications, Remote \\
-\begin{itemize} \itemsep -2pt
-\item Published ``Rust Web Development'' through Manning -- end-to-end guide covering async Rust, web frameworks, and production deployment, distributed globally
-\end{itemize}
+{\sl Author, ``Rust Web Development''} \hfill 2020 - 2022 \\
+Manning Publications \\
+Published end-to-end guide covering async Rust, web frameworks, and production deployment.
-{\sl Sr. Solutions Architect (Professional Services) - Full-time} \hfill May 2021 - July 2022 \\
-{\sl Solutions Architect (Professional Services) - Full-time} \hfill June 2020 - May 2021 \\
+\vspace{4pt}
+
+{\sl Sr. Solutions Architect (promoted from SA)} \hfill 2020 - 2022 \\
Twilio Inc., Remote \\
-Second Solutions Architect hired for the new EMEA Professional Services team. Led enterprise integrations across contact center, messaging, and voice products.
\begin{itemize} \itemsep -2pt
-\item Technical lead for Fortune 500 engagements: debugged audio quality and latency issues, redesigned messaging flows, and advised clients on achievable architectures given their team size and resources
-\item Advocated for combining two existing lower-cost Twilio products over adopting a newer, more expensive one for a major engagement -- reduced client spend while using battle-tested components
-\item Created reusable engagement playbooks (setup checklists, edge-case discovery questions, technical review templates) adopted across the EMEA team
-\item Hired and onboarded engineers to scale the Professional Services team
+\item Technical lead for Fortune 500 engagements: debugged latency issues, redesigned messaging flows, advised on architectures matching client team size and resources
+\item Created reusable engagement playbooks adopted across the EMEA Professional Services team
\end{itemize}
-{\sl Systems Engineer - Contract} \hfill August 2019 - May 2020 \\
-Kraken Digital Currency Exchange, Remote (San Francisco)\\
-Member of the first Rust engineering team (12 engineers), replacing core banking infrastructure and API gateway.
+{\sl Systems Engineer} \hfill 2019 - 2020 \\
+Kraken Digital Currency Exchange, Remote \\
\begin{itemize} \itemsep -2pt
-\item Migrated core banking services and API gateway from PHP to Rust, achieving 100x throughput improvement -- enabling the exchange to absorb order-of-magnitude traffic growth without scaling hardware
-\item Built new Rust services from scratch with comprehensive test coverage and security-first design
+\item Migrated core banking services and API gateway from PHP to Rust, achieving 100x throughput improvement -- enabling order-of-magnitude traffic growth without scaling hardware
\item Worked directly with the CTO on privacy-focused architectural decisions for the trading platform
\end{itemize}
-{\sl Rust Developer - Freelance} \hfill March 2019 - July 2019 \\
-Self Employed, Berlin/Toronto \\
-\begin{itemize} \itemsep -2pt
-\item Founded the monthly ``Rust \& Tell Berlin'' meetup -- grew it into the largest Rust meetup globally, still running years later
-\item Contributed to Rust core and ecosystem libraries
-\item Created Rust learning resources specifically for Node.js developers transitioning to systems programming
-\end{itemize}
+\vspace{4pt}
-{\sl Sr. Software Engineer - Freelance} \hfill March 2016 - February 2019 \\
-OSRAM, K\"orber Digital, Avenga, ERGO Group, GIATA, PaperHive, Glispa (Berlin) \\
-Freelance consultant for enterprise clients across IoT, logistics, tourism, and ad-tech.
+{\sl Earlier Career} \hfill 2014 - 2019 \\
+Sr. Software Engineer across enterprise clients (OSRAM, K\"orber Digital, GIATA, Avenga) and startups (Dalia Research, blogfoster, smartB) in Berlin.
\begin{itemize} \itemsep -2pt
-\item Designed authentication infrastructure for OSRAM's IoT platform (thousands of connected lighting devices) using Keycloak for user auth and service-to-service auth across microservices (Node.js, Go, Lua)
-\item First engineering hire at K\"orber Digital: chose Node.js/React/AWS stack, built real-time data pipelines with a time-series database optimized for fast retrieval of sensor data
-\item Decomposed GIATA's monolithic tourism ERP into 6 Docker-based microservices -- rewrote the hotel ingestion pipeline and mass photo upload system, significantly improving UI responsiveness and system scalability
-\item Tech Lead at Avenga: introduced Scrum and refactored a monolith into microservices to unblock parallel team development
-\item Built analytics dashboards and ad platforms at Glispa (AngularJS); mentored teams on modern JavaScript practices
-\end{itemize}
-
-{\sl Software Engineer - Full-time} \hfill August 2015 - February 2016 \\
-smartB Energy Management GmbH, Berlin \\
-Small agile team building energy monitoring applications for business owners.
-\begin{itemize} \itemsep -2pt
-\item Introduced pair programming and component-based frontend architecture, enabling multiple developers to work on the same codebase without conflicts
-\item Full-stack development with JavaScript and Python using TDD
-\end{itemize}
-
-{\sl Software Engineer - Freelance} \hfill March 2015 - July 2015 \\
-blogfoster GmbH, Berlin \\
-First developer hired to replace legacy PHP/Backbone application with Node.js and React.
-\begin{itemize} \itemsep -2pt
-\item Built the first version of the ad marketplace; co-designed architecture with the CTO using TDD from day one
-\end{itemize}
-
-{\sl Frontend Developer - Full-time} \hfill February 2014 - March 2015 \\
-Dalia Research, Berlin \\
-First and sole frontend developer at 8-person startup.
-\begin{itemize} \itemsep -2pt
-\item Bootstrapped the customer-facing survey platform and analytics dashboards in AngularJS -- core UI remained largely untouched in production for close to 10 years
+\item Founded ``Rust \& Tell Berlin'' meetup -- grew it into the largest Rust meetup globally, still running years later
+\item Designed IoT authentication infrastructure at OSRAM for thousands of connected devices (Node.js, Go, Lua)
+\item First engineering hire at K\"orber Digital: built real-time sensor data pipelines on AWS
+\item Decomposed GIATA's monolithic ERP into 6 Docker-based microservices, improving system scalability
\end{itemize}
\section{\centerline{EDUCATION}}
\vspace{8pt} % Gap between title and text
-{\sl Bachelor of Science, Computer Science} \hfill September 2010 - February 2014 \\
-TH Ingolstadt\\
-Scholarship from Allianz Deutschland AG to study Computer Science, fully funded and with trainings in Scrum, Java, PL/I and mainframe systems on the side.
+{\sl Bachelor of Science, Computer Science} \\
+TH Ingolstadt -- Scholarship from Allianz Deutschland AG (fully funded)
diff --git a/resume.xref b/resume.xref
index f1ffd28..5ae92bc 100644
--- a/resume.xref
+++ b/resume.xref
@@ -5,4 +5,4 @@
\:CrossWord{)Qx1-10000}{1}{1}%
\:CrossWord{)Qx1-20000}{1}{1}%
\:CrossWord{)Qx1-30000}{1}{1}%
-\:CrossWord{)Qx1-40000}{1}{5}%
+\:CrossWord{)Qx1-40000}{1}{3}%