CV/index.html

156 lines
No EOL
17 KiB
HTML

<!DOCTYPE html>
<html lang='en-US' xml:lang='en-US'>
<head> <title>Bastian Gruber - CV</title>
<meta charset='utf-8' />
<meta content='TeX4ht (https://tug.org/tex4ht/)' name='generator' />
<meta content='width=device-width,initial-scale=1' name='viewport' />
<link href='resume.css' rel='stylesheet' type='text/css' />
<meta content='resume.tex' name='src' />
<link href="style.css" rel="stylesheet" type="text/css" /></head><body>
<div class='resume'> <!-- tex4ht:inline --><div class='tabular'> <table class='tabular' id='TBL-1'><colgroup id='TBL-1-1g'><col id='TBL-1-1' /></colgroup><tr id='TBL-1-1-' style='vertical-align:baseline;'><td class='td00' id='TBL-1-1-1' style='white-space:nowrap; text-align:left;'><span class='cmbx-12'>Bastian Gruber</span> </td></tr><tr id='TBL-1-2-' style='vertical-align:baseline;'><td class='td00' id='TBL-1-2-1' style='white-space:nowrap; text-align:left;'> </td>
</tr><tr id='TBL-1-3-' style='vertical-align:baseline;'><td class='td00' id='TBL-1-3-1' style='white-space:nowrap; text-align:left;'> </td></tr></table> </div>
<table class='center-addresses'><tr><td class='first-address'><!-- tex4ht:inline --><div class='tabular'> <table class='tabular' id='TBL-2'><colgroup id='TBL-2-1g'><col id='TBL-2-1' /></colgroup><tr id='TBL-2-1-' style='vertical-align:baseline;'><td class='td00' id='TBL-2-1-1' style='white-space:nowrap; text-align:left;'><span class='cmbx-10'>Professional </span> </td>
</tr><tr id='TBL-2-2-' style='vertical-align:baseline;'><td class='td00' id='TBL-2-2-1' style='white-space:nowrap; text-align:left;'>LinkedIn: <a href="https://linkedin.com/in/bastiangruber">linkedin.com/in/bastiangruber</a> </td>
</tr><tr id='TBL-2-3-' style='vertical-align:baseline;'><td class='td00' id='TBL-2-3-1' style='white-space:nowrap; text-align:left;'>Book: <a href="https://rustwebdevelopment.com">rustwebdevelopment.com</a> </td>
</tr><tr id='TBL-2-4-' style='vertical-align:baseline;'><td class='td00' id='TBL-2-4-1' style='white-space:nowrap; text-align:left;'>E-Mail: <a href="mailto:gruberbastian@me.com">gruberbastian@me.com</a> </td>
</tr><tr id='TBL-2-5-' style='vertical-align:baseline;'><td class='td00' id='TBL-2-5-1' style='white-space:nowrap; text-align:left;'>Website: <a href="https://bastiangruber.ca">bastiangruber.ca</a> </td></tr></table> </div></td><td class='second-address'><!-- tex4ht:inline --><div class='tabular'> <table class='tabular' id='TBL-3'><colgroup id='TBL-3-1g'><col id='TBL-3-1' /></colgroup><tr id='TBL-3-1-' style='vertical-align:baseline;'><td class='td00' id='TBL-3-1-1' style='white-space:nowrap; text-align:left;'><span class='cmbx-10'>Code </span> </td>
</tr><tr id='TBL-3-2-' style='vertical-align:baseline;'><td class='td00' id='TBL-3-2-1' style='white-space:nowrap; text-align:left;'>GitHub: <a href="https://github.com/gruberb">github.com/gruberb</a> </td>
</tr><tr id='TBL-3-3-' style='vertical-align:baseline;'><td class='td00' id='TBL-3-3-1' style='white-space:nowrap; text-align:left;'>Git: <a href="https://code.novanexus.ca/gruberb">code.novanexus.ca/gruberb</a> </td></tr></table> </div></td></tr></table>
<h4 class='sectionHead' id='summary'><a id='x1-10000'></a><div class='centerline'> SUMMARY </div></h4><div class='section'>
<!-- l. 55 --><p class='noindent'>Staff Software Engineer and published author (&ldquo;Rust Web Development&rdquo; &ndash; 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&amp;Tell Berlin, the largest Rust meetup globally.
</p>
</div><h4 class='sectionHead' id='skills'><a id='x1-20000'></a><div class='centerline'> SKILLS </div></h4><div class='section'>
<!-- l. 68 --><p class='noindent'><span class='cmbx-10'>Languages: </span>Rust, Python, TypeScript, JavaScript, Go <br class='newline' /><span class='cmbx-10'>Frontend: </span>React, Angular, Vue.js <br class='newline' /><span class='cmbx-10'>Backend: </span>Rust (Actix, Warp, Axum), Python (FastAPI), Node.js, Go <br class='newline' /><span class='cmbx-10'>Patterns: </span>REST, GraphQL, gRPC, async Rust, distributed systems (P2P) <br class='newline' /><span class='cmbx-10'>Infrastructure: </span>AWS, Google Cloud, Docker, Kubernetes, CI/CD, Grafana <br class='newline' /><span class='cmbx-10'>Domains: </span>Systems Programming, FFI, Distributed Systems, Web Services, Micro Services, IoT, Blockchain,
Firefox
</p>
</div><h4 class='sectionHead' id='professional-experience'><a id='x1-30000'></a><div class='centerline'> PROFESSIONAL EXPERIENCE </div></h4><div class='section'>
<!-- Mozilla -->
<p class='noindent'><span class='cmsl-10'>Staff Software Engineer - Full-time </span>February 2026 - Now
<br class='newline' /><span class='cmsl-10'>Senior Software Engineer - Full-time </span>July 2024 - January 2026
<br class='newline' /><span class="company">Mozilla</span>, Remote <br class='newline' />Shipping Rust, C++, and Python code across Firefox desktop and mobile to hundreds of millions of users. All work is open source.
</p>
<ul class='itemize1'>
<li class='itemize'>Consolidated four separate favicon implementations across Firefox teams into a single Image Service &ndash; 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
</li>
<li class='itemize'>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 &ndash; users are now unidentifiable when making privacy-sensitive requests across all platforms
</li>
<li class='itemize'>Maintained Firefox Push notification service (50k requests/second, sub-200ms latency): reduced memory footprint, added circuit breakers, and built Grafana dashboards for operational visibility
</li>
<li class='itemize'>Contributor and code reviewer for UniFFI, Mozilla&rsquo;s multi-language bindings generator enabling Rust code to be called from Kotlin, Swift, Python, and JavaScript
</li>
<li class='itemize'>Built Rust extensions for Merino (Python/FastAPI service powering Firefox Suggest); wrote RFCs, mapped out project plans, and surfaced cross-team blockers early
</li>
<li class='itemize'>Led &ldquo;Rusty Fridays&rdquo; internal education sessions, guiding engineers through Rust adoption and mentoring junior contributors across teams</li></ul>
<!-- Toposware -->
<p class='noindent'><span class='cmsl-10'>Senior Systems Engineer, Team Lead - Full-time </span>April 2023 - June 2024
<br class='newline' /><span class="company">Toposware</span>, Remote <br class='newline' />Core team of 4 building a peer-to-peer distributed network protocol from scratch in Rust.</p>
<ul class='itemize1'>
<li class='itemize'>Achieved 10x throughput per node by profiling and targeting the actual bottleneck &ndash; optimized batch processing and serialization paths, tuned message volumes to avoid throughput degradation &ndash; rather than redesigning the consensus layer
</li>
<li class='itemize'>Led benchmark initiative with 3 engineers that revealed nodes were compute-bound on encryption/decryption, not network-limited &ndash; findings redirected optimization effort away from networking toward crypto performance
</li>
<li class='itemize'>Rewrote the CLI from scratch, replacing error-prone CLI parameters with local config files &ndash; reduced operator misconfiguration during node setup
</li>
<li class='itemize'>Built an EVM bridge connecting external Ethereum-compatible chains to the core network
</li>
<li class='itemize'>Set up load testing, CI/CD pipelines, and Grafana dashboards for production observability</li></ul>
<!-- Centrifuge -->
<p class='noindent'><span class='cmsl-10'>Senior Software Engineer - Full-time </span>August 2022 - February 2023
<br class='newline' /><span class="company">Centrifuge</span>, Remote <br class='newline' />Protocol team building DeFi applications on Substrate/Polkadot in a self-governed organization.</p>
<ul class='itemize1'>
<li class='itemize'>Implemented fund pool mutations on-chain, enabling users to adjust capital allocations in live pools &ndash; core feature for the lending protocol
</li>
<li class='itemize'>Built client-facing APIs on top of fund pools, giving external integrators programmatic access to pool operations
</li>
<li class='itemize'>Replaced manual documentation with CI-driven auto-generation from Rust source on every PR &ndash; eliminated persistent drift between code and public docs
</li>
<li class='itemize'>Co-authored RFCs to build consensus on new protocol features across the decentralized team</li></ul>
<!-- Manning -->
<p class='noindent'><span class='cmsl-10'>Author of &ldquo;Rust Web Development&rdquo; </span>October 2020 - December 2022
<br class='newline' /><span class="company">Manning Publications</span>, Remote</p>
<ul class='itemize1'>
<li class='itemize'>Published &ldquo;Rust Web Development&rdquo; through Manning &ndash; end-to-end guide covering async Rust, web frameworks, and production deployment, distributed globally</li></ul>
<!-- Twilio -->
<p class='noindent'><span class='cmsl-10'>Sr. Solutions Architect (Professional Services) - Full-time </span>May 2021 - July 2022
<br class='newline' /><span class='cmsl-10'>Solutions Architect (Professional Services) - Full-time </span>June 2020 - May 2021
<br class='newline' /><span class="company">Twilio Inc.</span>, Remote <br class='newline' />Second Solutions Architect hired for the new EMEA Professional Services team. Led enterprise integrations across contact center, messaging, and voice products.
</p>
<ul class='itemize1'>
<li class='itemize'>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
</li>
<li class='itemize'>Advocated for combining two existing lower-cost Twilio products over adopting a newer, more expensive one for a major engagement &ndash; reduced client spend while using battle-tested components
</li>
<li class='itemize'>Created reusable engagement playbooks (setup checklists, edge-case discovery questions, technical review templates) adopted across the EMEA team
</li>
<li class='itemize'>Hired and onboarded engineers to scale the Professional Services team</li></ul>
<!-- Kraken -->
<p class='noindent'><span class='cmsl-10'>Systems Engineer - Contract </span>August 2019 - May 2020
<br class='newline' /><span class="company">Kraken Digital Currency Exchange</span>, Remote (San Francisco)<br class='newline' />Member of the first Rust engineering team (12 engineers), replacing core banking infrastructure and API gateway.</p>
<ul class='itemize1'>
<li class='itemize'>Migrated core banking services and API gateway from PHP to Rust, achieving 100x throughput improvement &ndash; enabling the exchange to absorb order-of-magnitude traffic growth without scaling hardware
</li>
<li class='itemize'>Built new Rust services from scratch with comprehensive test coverage and security-first design
</li>
<li class='itemize'>Worked directly with the CTO on privacy-focused architectural decisions for the trading platform</li></ul>
<!-- Self Employed -->
<p class='noindent'><span class='cmsl-10'>Rust Developer - Freelance </span>March 2019 - July 2019
<br class='newline' /><span class="company">Self Employed</span>, Berlin/Toronto</p>
<ul class='itemize1'>
<li class='itemize'>Founded the monthly &ldquo;Rust &amp; Tell Berlin&rdquo; meetup &ndash; grew it into the largest Rust meetup globally, still running years later
</li>
<li class='itemize'>Contributed to Rust core and ecosystem libraries
</li>
<li class='itemize'>Created Rust learning resources specifically for Node.js developers transitioning to systems programming</li></ul>
<!-- Freelance -->
<p class='noindent'><span class='cmsl-10'>Sr. Software Engineer - Freelance </span>March 2016 - February 2019
<br class='newline' /><span class="company">OSRAM</span>, <span class="company">K&ouml;rber Digital</span>, <span class="company">Avenga</span>, <span class="company">ERGO Group</span>, <span class="company">GIATA</span>, <span class="company">PaperHive</span>, <span class="company">Glispa</span> (Berlin) <br class='newline' />Freelance consultant for enterprise clients across IoT, logistics, tourism, and ad-tech.</p>
<ul class='itemize1'>
<li class='itemize'>Designed authentication infrastructure for <span class="company">OSRAM</span>&rsquo;s IoT platform (thousands of connected lighting devices) using Keycloak for user auth and service-to-service auth across microservices (Node.js, Go, Lua)
</li>
<li class='itemize'>First engineering hire at <span class="company">K&ouml;rber Digital</span>: chose Node.js/React/AWS stack, built real-time data pipelines with a time-series database optimized for fast retrieval of sensor data
</li>
<li class='itemize'>Decomposed <span class="company">GIATA</span>&rsquo;s monolithic tourism ERP into 6 Docker-based microservices &ndash; rewrote the hotel ingestion pipeline and mass photo upload system, significantly improving UI responsiveness and system scalability
</li>
<li class='itemize'>Tech Lead at <span class="company">Avenga</span>: introduced Scrum and refactored a monolith into microservices to unblock parallel team development
</li>
<li class='itemize'>Built analytics dashboards and ad platforms at <span class="company">Glispa</span> (AngularJS); mentored teams on modern JavaScript practices</li></ul>
<!-- smartB -->
<p class='noindent'><span class='cmsl-10'>Software Engineer - Full-time </span>August 2015 - February 2016
<br class='newline' /><span class="company">smartB Energy Management GmbH</span>, Berlin <br class='newline' />Small agile team building energy monitoring applications for business owners.
</p>
<ul class='itemize1'>
<li class='itemize'>Introduced pair programming and component-based frontend architecture, enabling multiple developers to work on the same codebase without conflicts
</li>
<li class='itemize'>Full-stack development with JavaScript and Python using TDD</li></ul>
<!-- blogfoster -->
<p class='noindent'><span class='cmsl-10'>Software Engineer - Freelance </span>March 2015 - July 2015
<br class='newline' /><span class="company">blogfoster GmbH</span>, Berlin <br class='newline' />First developer hired to replace legacy PHP/Backbone application with Node.js and React.</p>
<ul class='itemize1'>
<li class='itemize'>Built the first version of the ad marketplace; co-designed architecture with the CTO using TDD from day one</li></ul>
<!-- Dalia -->
<p class='noindent'><span class='cmsl-10'>Frontend Developer - Full-time </span>February 2014 - March 2015
<br class='newline' /><span class="company">Dalia Research</span>, Berlin <br class='newline' />First and sole frontend developer at 8-person startup.</p>
<ul class='itemize1'>
<li class='itemize'>Bootstrapped the customer-facing survey platform and analytics dashboards in AngularJS &ndash; core UI remained largely untouched in production for close to 10 years</li></ul>
</div><h4 class='sectionHead' id='education'><a id='x1-40000'></a><div class='centerline'> EDUCATION </div></h4><div class='section'>
<p class='noindent'><span class='cmsl-10'>Bachelor of Science, Computer Science </span>September 2010 - February 2014
<br class='newline' /><span class="company">TH Ingolstadt</span><br class='newline' />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.
</p>
</div></div>
</body>
</html>