ryan w tenney

engineer

I build high-scale distributed systems, routing platforms, and optimization engines. I lead small teams that tackle hard problems and ship fast.

About

I specialize in high-scale distributed systems, routing, and optimization. Over 17 years I've built platforms handling billions of daily requests, led teams that ship fast on ambiguous problems, and found the gaps nobody else was looking for.

I'm at my best leading small, autonomous teams tackling hard infrastructure challenges — real-time routing, dispatch optimization, platform reliability at scale. I like working at the intersection of deep technical problems and business-critical outcomes.

Outside of work, I maintain open-source projects, tinker with hardware, and occasionally build things like constraint solvers for wedding seating charts.

Experience

2026 — present

Senior Staff Engineer

Zocdoc

Appointments team, reporting to the VP of Engineering: the scheduling infrastructure behind the marketplace, the Zo AI phone assistant, and the public API.

  • Led Availability Rules, a scheduling-rules platform built to close the gaps practices cited when choosing competitors; rules evaluate as independent exclusions, so they compose cleanly and every removed timeslot is attributable
  • Set the platform boundary and evaluation contract for Clinical Fit: providers define rules against a clinical ontology, and patients answer questions derived from their candidate providers' rules to reach the most appropriate one
  • Owned the availability service, Zocdoc's first AWS microservice; measured per-endpoint latency and traffic in production, exposed capacity headroom a broken dashboard query had been hiding, and turned the findings into performance budgets for new rules
  • Designed and built an in-memory, compute-on-demand replacement for its Redis/DynamoDB precalculation model — three AZs, a write-ahead log, snapshots, Kinesis to S3 — and carried it to shadow-test readiness
  • Built Reviewbot, an LLM pull-request reviewer orchestrated as a declarative agent DAG that briefs human reviewers on comprehension, spec fidelity, risk, and test confidence; adopted by other engineers, and wrote the team's guide to production LLM API use
2018 — 2026

Senior Staff Engineer

Grubhub

Technical lead for Pathfinder, the vehicle routing platform handling 1.5 billion requests per day.

  • Led a team of 5 engineers building real-time traffic, map matching, and drive time polygon services
  • Launched a third-party courier fleet in response to NYC regulatory changes, leading 7 engineers through ambiguous requirements and cross-team dependencies to an on-time delivery projected to save $5M in fulfillment costs; designed the courier gateway so new providers, even an autonomous drone fleet, plug in by configuration alone
  • Designed Just-In-Time order dispatch to time kitchen starts based on courier arrival predictions — applied to over 200 million orders
  • Rescued the struggling delivery boundary generator, got it into production, and owned delivery boundary generation from then on
  • Built actor-based simulation modeling realistic order and courier behavior in pre-production, catching bugs that previously went undetected until production
  • Discovered a systemic regulatory compliance violation carrying eight-figure liability across multiple state jurisdictions; implemented geofencing controls to remediate
  • Built MCP servers connecting AI tools to internal systems — self-directed work that spread organically across engineering teams
2017 — 2018

Senior Engineer

Shutterstock

Search infrastructure and content moderation for the stock media marketplace.

  • Migrated the on-premises Solr cluster to SolrCloud in AWS, with a circuit breaker in the search service that fails over to a backup cluster during outages
  • Built a prototype machine learning classifier to identify R-rated imagery for content moderation
2016 — 2017

Senior Engineer

American Express

Middleware development for the US cardmember mobile app.

  • Debugged production login failures caused by a race condition that only manifested on Power8 hardware; kept systems running manually during an extended code freeze while tracing the root cause, then shipped a one-line fix
  • Led development of Check Spending Power; uncovered that a dependent team's promised API didn't actually exist, escalated early enough to fall back to a legacy API and ship on time
  • Designed and built mobile backend for Pay It / Plan It, allowing cardholders to pay or finance transactions directly from the app
2013 — 2016

Senior Engineer

EnerNOC

Platform engineering for energy management and demand response systems.

  • Internationalized the entire platform to capture a Japan market opportunity post-Fukushima; designed approach so subsequent locales required no more than 60 days and $60k to support
  • Built tariff engine processing real-time energy readings against a database of global utility tariffs
  • Led engineering team's migration from monolithic webapp to microservices architecture
2010 — 2013

Software Engineer → Senior Engineer

Martello Technologies

Network monitoring platform in Java, from the time-series store up to the visualizations.

  • Built a custom time-series database on HBase and real-time data visualizations in JavaScript and SVG
  • Lead inventor on a remote access technology (US Patent 10,097,523); engineering liaison to the lead customer, shaping the product roadmap around their needs
2008 — 2010

Software Engineer

Symplicity, Xerox

Backend development and systems work across a range of industries.

Projects

01

Reviewbot: A Pull Request Reviewer That Shows Its Work

A background service that reviews pull requests with a pipeline of specialist Claude agents: triage that budgets the spend, a synthesizer that writes the one voice that gets posted, a deterministic gate that stops it second-guessing earlier rounds, and an audit log that makes every agent's reading measurable. Includes a clickable re-creation of the dashboard on invented data.

PythonClaude CodeMulti-Agent PipelinesSQLiteFastAPIReactMCP
02

Courier Signals: The Trip That Advances Itself

Grubhub made couriers tap buttons to move a delivery forward; nobody else did. Courier Signals replaced the taps with the phone's own sensors — GPS, closing rate, and iOS Motion Activity — fused through a filter over the trip's state machine, where getting out of the car is the most informative event in a delivery and no geofence can see it.

Sensor FusionHMMBayesian FilteringCore MotionGeofencingTypeScript
03

Actor Simulation: A Marketplace That Runs Itself

The actor-based simulation that gave Grubhub's pre-production environment a heartbeat, rebuilt in the browser: statistically realistic diners, merchants, and couriers who actually drive real Chicago roads — offer, accept, reject, pocket veto — through a full simulated day of meal peaks, dispatch queues, and delivery stats.

Discrete-Event SimulationActor ModelPoisson ProcessesOSMTypeScriptWeb Workers
04

External Courier Gateway: Someone Else's Couriers

The service that broke Grubhub Managed Delivery's deepest assumption — that the courier on a delivery is ours. Holds against our own dispatch, courier identities minted from an opaque provider id, masked phone numbers, and a full courier's worth of events emulated from webhooks — then re-pointed at an autonomous drone fleet as configuration, not a rewrite.

Event-Driven ArchitectureWebhooksIdempotencyAnti-Corruption LayerState MachinesJava
05

Turn-by-Turn: Guidance from a Graph With No Names

In-app navigation built on a routing graph deliberately stripped of everything guidance needs. Street names come back as a bit-packed side-car — a grammar of direction, base name, and street type over a front-coded dictionary, 2.6 bytes per segment against 76 — and maneuvers are derived per query from junction geometry, branch analysis, and name continuity, because a maneuver isn't a property any edge can store.

CRPBit PackingFront CodingComputational GeometryOSMTypeScript
06

HMM Map Matching: Noisy Pings onto Roads

The map matcher behind Grubhub's courier tracking, rebuilt in the browser: a hidden Markov model over packed parameter arrays — quantized reference speeds, turn probabilities, quadtree candidate lookup — decoding a 1 Hz GPS stream whose errors are ray-traced through 17,000 real Chicago buildings using the GPS Urban Canyon physics, live against ground truth.

HMMViterbiQuadtreeRay TracingOSMTypeScriptWeb Workers
07

Autodispatch: The Assignment Problem, Live

The courier-to-order assignment engine at Grubhub, rebuilt as an interactive bipartite graph: a totally unimodular MIP solved exactly by min-cost flow, an acceptance model structurally forbidden from seeing tips, and the offline simulation harness that proved two plausible objective improvements weren't — including one that posts the best acceptance rate on the board while stranding low-tip diners.

Mixed-Integer ProgrammingMin-Cost FlowTotal UnimodularitySimulationTypeScript
08

Bounder: Delivery Boundaries from Isochrones

The delivery boundary generator I owned from inception at Grubhub, rebuilt in the browser: a CRP isochrone descended into every touched cell, buffered into a polygon via a raster distance field and marching squares, then simplified 95× — with the coverage and over-promise error measured on every query rather than assumed.

CRPIsochronesMarching SquaresComputational GeometryOSMTypeScript
09

Geocoding Without Google

The combined geocoder and reverse geocoder I built on OpenStreetMap data at Grubhub — rejecting Google Maps over a caching restriction that turned a one-time cost per address into a recurring one — rebuilt in the browser: USPS Publication 28 standardization applied to both sides of the match, three inverted indexes that fail in different directions, parity-aware house-number interpolation, and a confidence tier honest enough to drive product behavior.

GeocodingUSPS Pub 28MetaphoneTrigram IndexOSMTypeScript
10

Pathfinder 3.0: Radius-Based Merchant Discovery

Interactive visualization of the merchant discovery design I led at Grubhub: CRP-partitioned road graph, per-cell boundary cliques, and precomputed merchant routing data driving an expanding radius search — animated on real OSM data for downtown Chicago, entirely in the browser.

CRPDijkstraOSMTypeScriptWeb Workers
11

Customizable Route Planning, Visualized

The CRP routing engine behind Grubhub's Pathfinder service, rebuilt in the browser: partition a real OSM road network, compute boundary cliques live, then watch point-to-point queries escape their cell, hop across the overlay, and unpack into the shortest path.

CRPDijkstraOSMTypeScriptWeb Workers
12

Multi-tenant community incident reporting SaaS, grown from a system I built for my own neighborhood association. Rust on Lambda, SvelteKit frontend, and a layered spam-defense stack — including a proof-of-work-style upload authorization — that works without requiring reporters to create accounts.

RustAxumAWS LambdaDynamoDBSvelteKitServerless
13

WGnext

WireGuard client for iOS and macOS with automatic tunnel failover. Fork of the official client adding failover groups: traffic-based health detection, seamless in-place config swaps inside the Network Extension, and hot-spare probes that preserve the Noise session for zero-handshake failover.

SwiftGoNetwork ExtensionWireGuard
14

Loopback Port Forwarding (US 10,097,523)

The local agent from my patent with Martello Technologies, rebuilt in the browser: a management client hardcoded to a single TCP port, pointed at every device on every customer network at once by binding each one to its own stable address inside 127.0.0.0/8 — with the on-demand setup sequence (authorize, port forward down the probe's reverse tunnel, device proxy, nonce-matched meet-in-the-middle) running hop by hop.

JavaAppletSSHTCPSocketsPatent
15

xcancel Forwarder

Network-wide redirect of twitter.com/x.com links to xcancel, configured by a zero-backend web wizard: it interviews you about your network, generates a root CA and wildcard server certs entirely in the browser with node-forge, tailors nginx/Caddy + Docker Compose + DNS config to your answers, and zips the whole deployment into a single download with JSZip.

nginxDockerDNSnode-forgeJSZipJavaScript
3 1
16

Wedding Seating Optimization

Constraint solver that generated the final seating chart for my wedding. Because some problems deserve a proper optimizer.

PythonPuLPFICO Xpress
17

Twomlaut Tour of Germany

TSP-optimized road trip visiting every German city with two or more umlauts. MIP formulation with PuLP/CBC, road routing via Graphhopper on OSM data.

PythonPuLPGraphhopperOSM
18

How GPS Actually Works

An interactive course in satellite navigation, from zero. A live 3D constellation propagating the 24-slot baseline with J2 nodal regression, a fix you assemble one satellite at a time, a real IS-GPS-200 Gold code correlator pulling a signal out of noise three times louder than it is, plus DOP, the error budget and relativity.

TypeScriptOrbital MechanicsLeast SquaresSignal Processingthree.js
19

GPS Urban Canyon

Ray-traced GPS visibility and multipath in real Midtown Manhattan: NYC Open Data footprints, IGS precise orbits parsed in the browser, image-method facade reflections, a 3D city view, and WLS position-error heatmaps — why your phone thinks you're two blocks away.

TypeScriptPythonComputational GeometryOrbital Mechanicsthree.js
20

OmniVault

Self-hosted universal file management with full-text search across 1000+ formats, AI-powered enrichment, and complete version history. Think Paperless-NGX with complete file type freedom and integrated AI.

JavaSpring BootReactElasticsearchPostgreSQLDocker
21

Dropwizard Metrics

Lead maintainer (2014-2017) of the de facto standard for JVM application metrics. Captures JVM- and application-level metrics so you know what's going on.

JavaOpen Source
7.8k 1.8k
22

USB Battery Minder

Custom PCB design for an 8-port USB-C charging station that automatically stops charging at 80% state-of-charge. Detects the CC-to-CV transition in the lithium-ion charge profile to infer battery level without device communication.

KiCadC++ESP32Hardware Design
23

Graph Clearing Problem

Solver for a minimax graph clearing problem, built for the ACP Summer School 2018 competition — the only submission within the time limit.

GoConstraint ProgrammingDecision Diagrams
24

Metrics Spring

Spring integration for Dropwizard Metrics. Instruments annotated methods on Spring beans through dynamic proxies and bytecode generation. Used by American Express, Apple, Dealer.com, eHarmony, ESPN, Orbitz, and more.

JavaSpringOpen Source
693 220
25

passkit4j

Java library for generating Apple Passbook (.pkpass) files.

JavaOpen Source
81 46

Reach out

I'm currently exploring Staff Engineer roles and building out a consultancy practice. Whether you have a hard technical problem, need someone to lead a team, or just want to talk shop — I'd like to hear from you.