Understanding code is hard.
I build systems for devs and AI to bridge the gap.
10 years. 10 lessons. The most important things I learned building developer tools at GitHub.
Recursive promises, a Y-combinator, and an AI-generated poem walk into a browser—this post is what happens next.
An exploration of how Ruby's inject and zip methods can be implemented using nothing but anonymous functions and the Y-combinator. A silly, elegant, mind-bending combinator journey that is slower than you'd like.
A multi-language LSP server multiplexer with a simple, unified API and a container-based architecture designed for both local and remote orchestration. Built to give AI agents the same precise, language-aware code intelligence that developers rely on every day.
An evaluation harness for analyzing multi-turn agent behavior in repeatable, isolated environments. It produces detailed breakdowns of tool usage and token consumption, and tracks the key metrics of task duration, cost, and efficiency. Eval-Agent also supports multi-step experiments, making it easy to measure how changes across iterations impact these metrics over time.
Core member of GitHub’s code search team, contributing across the full distributed system. I served as a lead author of the symbol-extraction library used during indexing and helped optimize the backfill pipeline, reducing end-to-end backfill duration from five days to 36 hours across more than 200M repositories.
Contributed to the early development of GitHub’s AI assistant chat experience, including the core prompt-building library that manages dynamic prompt construction. Worked across Rust and Go backend services and integrated code intelligence capabilities such as GitHub code search and Tree-sitter into the chat workflow.
Helped build GitHub’s code navigation system from the ground up, spanning Go-based network services, a Ruby client embedded in the GitHub Rails monolith, and a backend architecture powered by MySQL Vitess and Azure Blob Storage. I co-authored the Kafka-based ingest and indexing pipeline, separating CPU-bound and I/O-bound workloads across dedicated queues and services to scale navigation across millions of repositories.
Contributed patches to the Tree-sitter runtime and library, and played an early key role in building out its language grammar ecosystem. I worked on grammars for JavaScript, Python, and Ruby, and wrote the first version of the Haskell grammar.
Helped author an experimental program analysis library written in Haskell to parse, diff, and analyze the source code for multiple programming languages. GitHub code navigation emerged from this research prototype.
A Ruby gem for cleanly structuring business logic: define composable units of work, bundle them into use cases or coordinators, and compose reusable workflows with shared context. Designed to keep code readable, testable, and maintainable, even as business logic grows in complexity.
Attending Oxford University's MSc in Software Engineering. Coursework complete; currently writing my thesis. Summary of courses taken:
When I'm not building software, I'm making sawdust in the workshop, chasing waves, or cooking Neapolitan pizza.