I build the unglamorous parts of software — the deploy systems, the SDKs, the build pipelines, and the internal tools the rest of the product depends on.

I am Theo Aldridge, a software engineer based in Berlin. For the last decade I have worked on infrastructure and developer tooling at companies where engineering taste is taken seriously. Stripe taught me how to write APIs that survive a decade of use. Vercel taught me how a small team can ship at a pace that looks unreasonable from the outside.

Right now I consult independently. I take on one project at a time, usually three to six months long, with teams who need an engineer who can both write the code and explain the decisions in a document that someone in six months can actually understand.

Berlin · open to remote · last updated May 2026

About

I started writing software the way many engineers in my cohort did — building small things on the side, falling in love with the part where you press save, hit refresh, and something you imagined exists. Twenty years later, the loop is still the most interesting one I know.

My professional career has been mostly in payments and developer platforms. At Stripe I worked on the API client libraries — the things that thousands of integrations call every second. At Vercel I worked on the build and deployment pipeline, the parts you only notice when they break. I am drawn to the layer of software that sits beneath the product, the layer where a single mistake propagates outward into thousands of incident reports.

Outside work I read more than I should, run middle distances badly, and maintain a few open-source TypeScript libraries that have lived longer than several of my employers. I am married, no children, two plants that have somehow survived since 2019.

Previously
Stripe — Senior Software Engineer, API Libraries (2 years)
Vercel — Staff Engineer, Build Infrastructure (3 years)
Heroku — Software Engineer, Platform (4 years)
Speaking
JSConf EU 2024 · NodeConf Remote 2023 · TSConf 2022
Education
BSc Computer Science, Imperial College London, 2014
Languages
English (native) · German (B2, conversational) · Swedish (A2, polite)

Experience

  1. 2025 — Now

    Independent Consultant

    Self-employed·Berlin

    • Led the migration of a Series-B fintech's SDK monorepo from Lerna to a custom Turborepo + changesets pipeline, cutting CI time from 22 to 6 minutes.
    • Designed a typed event-sourcing layer for a healthcare scheduling platform, replacing a fragile webhook system that had caused three production incidents.
    • Currently working with a developer-tools company on the open-source release of their internal task runner.
  2. 2022 — 2025

    Staff Software Engineer

    Vercel·Remote

    • Owned the build pipeline that compiles, bundles, and deploys roughly a million projects per month. Reduced cold-build p95 by 41% across a calendar year.
    • Designed and shipped the incremental compile cache used by Turborepo, which is now relied on by the majority of large customers and most of the internal monorepo.
    • Hired and mentored four engineers onto the platform team, two of whom are now senior engineers in their own right.
  3. 2020 — 2022

    Senior Software Engineer

    Stripe·Remote

    • Maintained and extended the Node.js and TypeScript client libraries, used by more than a hundred thousand integrations in production.
    • Led the migration of the public reference docs onto a new TypeScript-first generator, reducing the time from API change to published documentation from days to hours.
    • Wrote the internal RFC that became the company-wide standard for SDK versioning and deprecation.
  4. 2016 — 2020

    Software Engineer

    Heroku (Salesforce)·London / Dublin

    • Worked on the buildpack subsystem and the Node.js runtime, including the migration to a Rust-based buildpack lifecycle.
    • Wrote the open-source memcached add-on integration that is still in use today, more than nine years after the first commit.
    • Mentored junior engineers and ran the internal hiring loop for the platform organisation for two years.

Selected projects

01

grove

A typed, minimal task runner for TypeScript monorepos. Reads a small config file, builds a dependency graph, runs tasks in parallel with content-hashed caching, and gets out of your way. No plugins, no daemons, no opinions about your bundler.

I built grove because every existing task runner I tried either insisted on running its own dev server, or required a configuration file longer than the code it was orchestrating. It has been used in three production monorepos so far, and is the only tool on this list I would happily depend on tomorrow.

TypeScript Node.js Monorepo CLI
02

lockstep

An opinionated linter for changesets. Reads your repository's changelog files and enforces a small set of rules: every changeset must reference at least one issue, version bumps must match the type of change described, and breaking changes must include a migration note.

The tool came out of a frustration shared with my team at Vercel — the changelog had drifted from being a record of what changed to a place where engineers said vague things to satisfy CI. lockstep does not solve culture, but it makes the cultural decision visible at the point it happens.

TypeScript Changesets CI Linter
03

teal-cache

A small Rust library for content-addressed build caching. Stores artifacts keyed by the hash of their inputs and exposes a tiny stable API to JavaScript via N-API. Used internally at three companies and as the cache layer in grove.

I wrote this because the existing JavaScript-side caches I tried became the bottleneck once a monorepo got beyond a few hundred packages. The Rust core does the hashing and the disk IO; the JavaScript bindings stay deliberately thin. It is the smallest project on this list and probably the one that has earned the most CPU back per line of code.

Rust N-API Caching Performance
04

atlas-types

A TypeScript code generator that reads a Postgres schema and produces a fully typed query layer — including row types, insert types, partial update types, and a small fluent query builder. No runtime dependency on an ORM, no decorators, no magic.

I built atlas-types after spending too many afternoons fighting with Prisma generators and Drizzle's type inference. It is intentionally less powerful than either of those projects. What it does, it does fast and predictably, with type errors that point to the column you misspelled.

TypeScript Postgres Codegen SQL
05

dispatch

A small CLI for sending operational pages from a terminal. Reads a YAML on-call roster, knows about your team's timezones, and writes a paging log that you can later review. Speaks Slack, Pushover, and PagerDuty as backends; speaks plain text to your shell when you are offline.

I built dispatch during a long winter at Heroku, after one too many incidents where the page went to the wrong person because the rotation calendar had not been updated. It is the project I am least proud of architecturally and the one I have re-used in the most places.

Go CLI On-call Ops
06

lockfile-lens

A small static analyser that reads pnpm and npm lockfiles and tells you which transitive dependencies have been added in the last week, which have changed major version, and which now have known CVEs. Designed to run in CI as a five-second pre-merge check.

I wrote lockfile-lens because dependency review on most teams is either nonexistent or theatre. This one runs fast enough that engineers actually read its output, and it is opinionated enough that it occasionally blocks a merge for a reason worth blocking on.

TypeScript Security CI Supply chain

Open source

microsoft/TypeScript

Authored seven merged PRs to the language service, mostly around module resolution edge cases for monorepo workspaces.

102k · TypeScript

vercel/turborepo

Co-authored the original design of the remote cache protocol and contributed the incremental build manifest format.

27k · Rust

stripe/stripe-node

Maintainer (2020–2022). Rewrote the request layer for AbortSignal support and shipped the auto-retry policy that handles transient network failures.

3.7k · TypeScript

pnpm/pnpm

Reported and fixed a long-standing bug in the workspace resolver that caused silent partial installs for projects with circular dependencies.

29k · TypeScript

Writing

What I'm doing now

May 2026 · Berlin

  • Consulting with a Series-B developer-tools company on the open-source release of their task runner. Three days a week through August.
  • Writing a short book on the design of typed SDKs. Around 30,000 words drafted, probably twice that before the first real edit.
  • Reading Designing Data-Intensive Applications (again) and Annie Ernaux's The Years.
  • Running three to four times a week, currently training for a half-marathon in September that I will almost certainly not enjoy.
  • Not on Twitter, Threads, or Bluesky. The Mastodon link in the sidebar is the only social account I check.

Get in touch

I am open to interesting infrastructure problems. Berlin or remote. The best brief is short and specific: a paragraph on the problem, a paragraph on the team, and a sentence on the timeline.

Email —

PGP key on request · I reply within two business days, even if the answer is no.