About
I’m a product engineer at charles in Berlin, an AI-native conversational marketing and commerce platform, where I build customer-facing product end to end. Before that: eight years across frontend, backend, and infrastructure at SuitePad, HousingAnywhere, Andela, Rhino, and Leafly.
Alongside that I keep up an independent research practice. I hold an MSc in Advanced Computer Science from the University of Leicester, where my thesis was on operational semantics. My interests sit at the intersection of programming language theory, systems, and data and machine learning: how we give programs precise meaning, how we make them fast and observable, and how we learn from what they produce.
If you’re new here, how I became an engineer is a good place to start, or browse everything by topic.
Selected research
-
AgentLang (AGL): A Typed Language for Agentic Workflows
Repo · 2026
A small typed DSL for agentic workflows, implemented as a Rust library and CLI: agents and tasks with typed inputs and outputs, composed into pipelines with parallel steps, retry and fallback, and run against deterministic mock handlers or live OpenAI and Anthropic adapters.
-
rarepath: Observability-Preserving Trace Sampling
Repo · 2026
A Go implementation of behaviour-diverse trace sampling following Microsoft Research's STEAM paper — retains rare execution paths that uniform random sampling discards.
-
L-Language: A Minimal Functional Language with an Evaluation Visualizer
Repo · 2025
A small functional language implemented in Haskell, paired with a React visualizer that steps through evaluation and operational semantics rules. Grew out of my MSc thesis on operational semantics at the University of Leicester.
-
causality: Ranked Root-Cause Hypotheses from Logs and Traces
Repo · 2026
An incident root-cause assistant for on-call engineers that ranks hypotheses, each grounded in the exact spans and log lines that support it.
Writing
- Functional Program Design in OCaml: Building a Task Tracker
- The Two Modes of Thinking: How Divergent and Convergent Thinking Drive Research and Innovation
- Branded Types in TypeScript: From Structural to Nominal Typing
- Building a View Counter for Static Sites with Supabase and Astro
- Learning with the Strangler Fig Pattern: Replace Your Skills Gradually
- The End of 'Sorry, I Didn't Understand': How AI Agents Are Replacing Old Chatbots
- Unveiling the Shadow Play: Simplifying Complex Data with Vector Projection
- Operational Semantics: Adding Variables, Functions and Conditionals
- Operational Semantics: A Formal Approach to Arithmetic Expressions
- Strengthening Connections: A Hebbians Lens on Love and Relationships
- A Beginner's Guide to Functional Programming with OCaml
- Algorithms: What are they?
- Filtering Sensitive Data in Ruby on Rails with ActiveSupport::ParameterFilter
- How I became a Software Engineer/Programmer
Projects
- L-Language · A minimal functional language in Haskell with a React visualizer for evaluation and operational semantics.
- Rtpl · A low-latency market data pipeline for trading workloads, designed for sub-5ms message processing.
- Sqll · An open-source Python SQL client built around SQLite for embedded workflows.
- Pricc · A C project generator written in Rust for faster systems development setup.
- rcv · A Rust resume generator that converts declarative .rcv files into PDF output.
- cathtml · A type-safe, composable DSL for building HTML pages in OCaml.
- gurl · A CLI wrapper around curl for faster and more ergonomic terminal usage.
- raptur · An Express-inspired router for TypeScript backend services.
- cashapp · A peer-to-peer payments service prototype.