John Swanson - Software Engineer
A seasoned software engineer with over a decade of industry experience, expertise in functional programming, permissions and access control, and a passion for observability. I'm the person who writes the migration and gets the data model right, and I enjoy making features behave correctly under caching, multi-tenancy, and the other cross-cutting challenges of distributed systems.
Professional Experience
2023 - now: Senior Software Engineer @ Metabase (remote)
- Shipped the API Keys feature as the primary engineer: migrations, key creation and authentication, full CRUD, and excluding API-key users from billing calculations
- Designed and built the archive-to-Trash system: the trash collection, restore/delete semantics, serialization, and search integration
- Built Database Routing, a flagship enterprise feature - migrations, CRUD and healthcheck APIs, and router/mirror access controls made correct under caching, sandboxing, impersonation, serialization, and audit logging
- Drove multi-tenancy: tenant provisioning and deactivation, tenant-scoped JWT auth with tenant attributes, dedicated tenant collections, and the permission model to match
- Built Remote Sync, including transforms serialization and pull-mode behavior
- Currently driving Explorations - a new asynchronous model for finding interesting patterns in data
2020 - 2023: Senior Software Engineer @ Reserve (remote)
- Automated the (previously hours-long, manual) process of refreshing our blocklists of sanctioned individuals, improved precision/recall of the search, and reduced search time by over 50%
- Implemented a system to rerun blocklist checks (with refreshed blocklists) across entire userbase on a regular basis
- Designed and implemented an integration with Unit21 for fraud detection
- Automated cryptocurrency deposits/withdrawals, handling $1M+ volume per week
- Designed and implemented a robust, reliable and observable system for delivering webhooks to customers
- Improved observability and reliability: containerized dependencies for local development, added observability tools to generate timing metrics and log contexts, propagated log contexts when running asynchronous jobs
2018 - 2020: Senior Software Engineer @ CircleCI (remote)
- Designed and built a microservice to preprocess user config, used this preprocessing stage to add additional features, such as reusable, shared commands and jobs
- Planned and implemented SLIs, SLOs, and error budgets for team services
- Took on a failure-prone, expensive system for scaling VMs for user builds, made incremental improvements:
- Circuit breaker (automatically switch between compute regions)
- Auto-scaler (automatically determine demand for various machine sizes/types and scale them appropriately)
- Improved isolation between different regions and compute types
- Added Windows and GPU executors
2013 - 2018: Software Developer @ DreamHost (remote since 2015)
- Led team of engineers in building a single-page app wysiwyg webpage editor
- Designed and built out continuous integration/deployment using CircleCI and Kubernetes
- Extracted financial data from customer billing records, used to obtain/stay compliant with a $30M loan from Goldman Sachs
- Identified causes of customer churn based on statistical analysis of customer data
Side projects
- TicTag - a stochastic time tracker. Used Slack to ping users at random intervals (averaging once per 45 minutes), allowing them to tag their time. Over long periods, you'd get a highly accurate picture of how you spend time with little effort. Integration with the Beeminder API provided a mechanism for setting up commitment contracts for how you spend time.
- I've also made contributions to open-source projects like clj-time and chezmoi.
Education
BA Economics - Pomona College '10
Selected Technical Skills
Clojure / PostgreSQL / Linux / Git / Kubernetes / distributed systems