Measured in runtime

The engineering

Four years of production pipelines across insurance and finance. The ledger first, then the two that are worth explaining properly rather than listing.

  • Jun 2026 to Present

    AI Engineer, Global Analytics

    Chubb Insurance

    Building AI systems on top of the global data estate: applying language models and probabilistic methods to problems that were previously handled by rules, and putting the results somewhere underwriters can actually use them.

    • Python
    • SQL
    • Databricks
    • PySpark
    • Azure
    • Next.js
    • FastAPI
  • Aug 2025 to Present

    Data Engineer, Global Analytics

    Chubb Insurance

    Leading the design and build of Chubb's curated external company data asset across EMEA and Global, owning entity resolution, vendor data conflation, and data architecture across multiple commercial providers and millions of records. Built a probabilistic entity resolution pipeline with a 300× runtime improvement over the production system it replaced. Developed a full-stack automated pipeline dashboard using Next.js, FastAPI and Tailwind.

    • Python
    • SQL
    • Databricks
    • PySpark
    • Azure
    • Next.js
    • FastAPI
    300×faster than the system it replaced
  • Oct 2023 to Present

    Founder and Curator

    The Daily Canon

    Built and runs a literary calendar on iOS and the web: one carefully chosen work of literature a day, drawn from a growing canon. Everything from the editorial curation to the Next.js and Supabase behind it, the native SwiftUI app that replaced the web wrapper in 2026, and the subscriptions.

    App of the Day on the App Store

    • Next.js
    • TypeScript
    • Supabase
    • Swift
    • SwiftUI
    19,951+downloads
  • Jun 2025 to Aug 2025

    Data Engineer

    AXA Insurance · via Kubrick Group

    Built an automated deletion and retention framework ensuring GDPR compliance across every layer of a medallion architecture, tested to guarantee zero accidental deletions. Created architectural documentation for complex metadata-driven infrastructure, adopted by both the consultant and internal engineering teams.

    • Python
    • Databricks
    • Azure Data Factory
    • Azure DevOps
    0accidental deletions, by design
  • Nov 2024 to May 2025

    Data Engineer, EMEA Analytics

    Chubb Insurance · via Kubrick Group

    Refactored a 30,000-line legacy pipeline from monolithic notebooks into modular PySpark, reducing runtime from 270 minutes to 45. Delivered end-to-end data products supporting AI-driven risk modelling and virtual portfolio analysis. Shaped platform governance during the Azure migration, implementing Unity Catalog and automating critical pipelines with Kafka and Databricks Workflows.

    • Python
    • SQL
    • Databricks
    • PySpark
    • Azure
    • Unity Catalog
    • Kafka
    270 minpipeline runtime, down from 270
  • Oct 2022 to Nov 2024

    Junior Data Engineer

    Quilter Financial Planning · via Kubrick Group

    Designed a custom PySpark CDC solution on Databricks that reduced data volumes by 85% and cut file transfer times from over an hour to 15 minutes. Architected a JSON-driven contract system enabling dynamic toggling of data file production without code changes. Led sprint planning and backlog grooming across cross-functional squads.

    • Databricks
    • Azure Data Factory
    • Python
    • SQL
    • PySpark
    • Power BI
    85%reduction in data volume
  • May 2022 to Oct 2022

    Data Engineering Trainee

    Kubrick Group

    Six months of full-time training in distributed data engineering before the first placement: Spark, cloud architecture, testing and the parts of SQL that only matter at scale.

    • Python
    • SQL
    • PySpark
    • Azure
    • Git
  • Mar 2021 to Apr 2022

    Marketing Executive

    Twogether

    Owned analytics reporting across B2B marketing campaigns. Piloted and scaled an employee advocacy programme. Collaborated on diversity and inclusion initiatives while managing stakeholder relationships.

    • Analytics
    • Campaign Management
    • Stakeholder Engagement
  • Oct 2019 to May 2021

    Founder, Freelance Designer

    WallCache

    Founded a creative consultancy delivering photography, branding and design work. Managed client relationships and design roadmaps, creating visual identities for businesses ranging from startups to established brands.

    • Photography
    • Graphic Design
    • Creative Direction
    • Branding
Full CV (PDF)

Education and certifications

Imperial College London

BSc Physics with Theoretical Physics

2017 to 2020

Three years of being taught to take a system apart until you can see what it is actually doing, which turns out to be most of data engineering in different notation. Every module carried real statistical analysis, experimental research or programming.

  • Final year thesis: a mathematical derivation of the Black-Scholes-Merton model from physical first principles, supervised by Professor Dimitri Vvedensky. An option price treated as a diffusion problem rather than a finance one
  • Year two computing project: object-oriented optical ray tracing, investigating lens performance
  • Statistical mechanics, quantum mechanics, electromagnetism, atomic and nuclear physics, optics
  • Mathematical methods, Fourier analysis, vector calculus and differential equations
  • Medical imaging and MRI

Imperial College Business School

Business Analytics: From Data to Decisions

Feb to Jun 2022

A deliberate bridge from the physics to the commercial side: the same maths, pointed at questions someone is paying to have answered.

  • Regression, nearest neighbours, decision trees, support vector machines and clustering
  • Summarising and visualising data so a decision can actually be made from it
  • Linear and integer programming applied to real business scenarios

DataCamp

Career Track: Data Science with Python

Feb to Apr 2022

Completed at 100%.

  • Statistical and machine learning techniques against real datasets, including decision trees and natural language processing
  • Importing, cleaning, manipulating and visualising data in Python
  • Pandas, NumPy and Matplotlib

Databricks

Lakehouse Fundamentals

2022

The platform most of the last four years has been built on, certified the year he started building on it in earnest.

Malvern College

A-Levels and iGCSEs

2012 to 2017

A-Levels in Physics, Mathematics and Further Mathematics, all at A*. Twelve iGCSEs, all at A*.

  • A-Levels 2017: Physics (A*), Mathematics (A*), Further Mathematics (A*)
  • iGCSEs 2015: English Language, English Literature, Mathematics, Additional Mathematics, Physics, Chemistry, Biology, French, Latin, Geography, History and Art, all at A*
  • Duke of Edinburgh Gold: two five-day, 100km expeditions across Dartmoor and Snowdonia, alongside charity work
  • Captain of the 1st XI hockey team, running training and match strategy

Case studies

Resolving one company from many records

300×

Chubb buys company data from several commercial providers. None of them agree on what a company is called, where it is registered, or whether two records are the same business. The curated external company data asset is the answer to that, and entity resolution is its hardest part.

The problem

Underwriting and risk decisions rest on knowing which records refer to the same company. Across multiple vendors and millions of records, the same business appears under different legal names, trading names, addresses and identifiers. Deterministic matching on any single field is either too strict, and splits one company into many, or too loose, and merges companies that are unrelated.

The constraint

The production system it replaced was correct enough to be trusted but slow enough that it could not be re-run freely. That is the worst combination: it makes the data asset something you inherit rather than something you interrogate. Any replacement had to be materially faster without being less defensible, because a probabilistic match that nobody can explain is not usable in an underwriting context.

The approach

A probabilistic entity resolution pipeline: blocking to reduce the candidate space to comparisons worth making, then scored comparison across name, address and identifier fields, with the scoring surfaced rather than buried so a human can see why two records were joined. Built on PySpark over Databricks so the comparison stage distributes rather than serialising.

The outcome

A 300× runtime improvement over the production system it replaced, which changes what the asset is for: it becomes something you can re-run against new vendor data and re-examine, rather than a monthly artefact. A full-stack pipeline dashboard in Next.js and FastAPI put the run state in front of the people who depend on it.

  • Python
  • PySpark
  • Databricks
  • Azure
  • Next.js
  • FastAPI

Thirty thousand lines, taken apart

270 → 45 min

A legacy EMEA analytics pipeline had grown to 30,000 lines of monolithic notebook code and a 270-minute runtime. Refactored into modular PySpark, it now runs in 45.

The problem

Notebooks are an excellent place to start a pipeline and a poor place to leave one. Thirty thousand lines of it meant no unit boundaries, no reuse, and a 270-minute runtime that put a hard ceiling on how often anything could be checked. A four-and-a-half hour feedback loop is not a feedback loop.

The constraint

It could not stop producing output while it was rewritten. The downstream risk models and virtual portfolio analysis depended on it, so the refactor had to proceed underneath a running system rather than replacing it in one move.

The approach

Decompose into modular PySpark with real boundaries, so units could be reasoned about and tested independently. In parallel, shape platform governance during the Azure migration: Unity Catalog for lineage and access, and Kafka with Databricks Workflows to automate the pipelines that were still being triggered by hand.

The outcome

270 minutes to 45, a six-fold reduction, which is the difference between a pipeline you run overnight and one you run when you have a question. The modular structure is the more durable half of the result: the runtime is what people notice, the boundaries are what let the next person change it.

  • PySpark
  • Databricks
  • Azure
  • Unity Catalog
  • Kafka