Work

Where the systems were built.

4 companies, and the writing that came out of each.

Data Engineersince2023

145 merged pull requests to the open-source dlt framework: documentation across dozens of sources and destinations, benchmark studies, and Fivetran/Stitch-to-dlt migration engineering.

Data work at dltHub: documentation, migrations and benchmarks

Data Engineeringsince2023

Pipelines from Postgres, HubSpot and Freshdesk into BigQuery through bronze, silver and gold dlt layers, orchestrated on dltHub, served in Metabase dashboards.

Navit's data stack: three years in production, then its move to dltHub

Data Architect & BI2023 – 2025

Schema design for the in-house app, data quality checks on its database, incremental pipelines into BigQuery, and property and customer scores, shown in Looker.

Data work at RentLondonFlat.com: from app schema to dashboards

Scientific Officer2014 – 2023

Nine years in capital projects: cost models and rate analysis, tender evaluation, and billing reconciliation across budgets of $50M+.

For nine years, my data had to be good enough for a judge

Published at dltHub

32 posts for the dlt blog.

dlthub.com/blog

Reverse ETL to Attio

In March 2024, we published “dlt adds Reverse ETL”. This piece walks through an example GTM workflow: turning a hiring signal into enriched, sales-ready company and people records, then reverse-ETL them to Attio.

Step by step: Hubspot connector from Fivetran to dltHub

In this article, I walk through moving a HubSpot connector and its dbt models from Fivetran to dlt. I keep the old stack running as the reference, build against its schema, and diff until every mismatch has an explanation.

Schema evolution in data pipelines: the engineer's guide

Schema evolution is a decision every data pipeline makes — most tools make it silently. This post discusses the five common failure modes every data pipeline sees, how dlt handles them, and how you can decide runtime policies for schema evolution with data contracts.

From compute hours to data moved: a benchmark series

You pay for compute hours; what you actually want is data moved. This post measures the exchange rate across the five bottlenecks that dominate real pipelines: SQL copy, REST APIs, JSON files, Parquet, and MongoDB.

Exploring schema evolution with ontology-driven propagation

Write your access policy as a plain-English ontology. Schema evolves; the LLM reads the rules and decides.

Operational Health: Schema update detection with dlt

dlt handles schema evolution efficiently but silently. Here's how to read dlt's metadata and be informed of what's shifting in your pipeline.

Operational Health: Auditing data freshness with dlt metadata

A "Success" exit code only tells you the pipeline ran. Use load_id to join _dlt_loads with your source table and check if the data is actually fresh.

How to protect PII with dlt and Pydantic

Stop PII leaks before they hit your warehouse. By using dlt and Pydantic to enforce data contracts, you can sanitize or quarantine sensitive fields the moment they’re ingested.

3.7x Faster EL Pipelines: Arrow + ADBC vs. SQLAlchemy

Moved 5M rows from DuckDB to MySQL 3.7x faster, reducing time from 344s to 92s by switching from SQLAlchemy’s row-by-row path to Arrow + ADBC’s columnar pipeline.

11 Pythonic Data Quality Recipes for every day

11 practical, copy-paste data quality recipes for dlt. From schema freezes to alerts, learn how to keep pipelines clean, safe, and production-ready.

DuckLake to MotherDuck: Validate locally, deploy to cloud in minutes

Start local with DuckLake, validate your data, then deploy to MotherDuck in minutes. Same pipeline, same code, just switch the destination.

SCD2 Deep Dive with dlt: How nested data affects queries and costs

Learn how dlt automates SCD2 for nested JSON data without complex SQL headaches. Real BigQuery benchmarks show incremental loading cuts costs by 25-35%.

Emmanuel's production-ready Kafka framework: extending dlt the right way

Emmanuel built a slim framework on top of dlt that levels up the vanilla Kafka source into a production-ready setup.

Sling vs dlt SQL connector Benchmark: Spend 3x Less, Load Faster with dlt

We compared dlt and Sling for data ingestion performance, cost, and flexibility. See how they stack up and which might suit your data needs best.

Why a simple task speaks volumes

Ajay Moorjani turned a deceptively simple JSON to Snowflake task into a rock solid pipeline using dlt, dbt, and Airflow, built in less than a coffee break.

The REST API Integration costs: How AI + dlt is finally making it bearable

REST API integrations come with hidden costs: pagination, schema drift, rate limits. With dlt + Cursor, you skip the boilerplate and build pipelines in minutes, not days.

What’s new in dlt for Databricks: built-in staging, zero-config notebooks, no headaches

Ingesting to Databricks should be simple. With dlt, it finally is. No config files, no staging, just Python and go.

Are you moving the right data? Write. Audit. Publish. (WAP)

The Write. Audit. Publish. framework brings discipline from software engineering: write in isolation, audit for correctness, publish with confidence. But can data engineering really follow suit?

Query your API’s data with SQL, no data warehouse needed

Want to run SELECT * on your API data without setting up a database? dlt datasets let you query API data using SQL, following the Write-Audit-Publish pattern.

Stop writing SQL models and let your data pipeline do it automatically

The sqlmesh init -t dlt command integrates dlt’s metadata with SQLMesh’s modeling, generating SQL models that handle incremental processing and schema changes without writing SQL.

2024 dlt Recap: Moments, Mentions, and Milestones

2024 was a remarkable year for dltHub. Together with our users and partners, we streamlined workflows, introduced powerful capabilities, and laid a stronger foundation for the future.

Self hosted tools Benchmarking

SQL is key in data analysis, especially where production databases are used. We benchmarked Meltano, Airbyte, dlt, and Sling.

SQL Benchmarking: comparing data pipeline tools

Moving data from SQL databases into BigQuery, Redshift, and Snowflake is core to modern data work. We benchmarked Fivetran, Stitch, Airbyte, and dlt to answer which tool fits which need.

A guide on how to migrate your Hubspot data pipeline from Fivetran to dlt

A step-by-step migration of HubSpot pipelines from Fivetran to the open-source dlt, with strategies for unifying sources and keeping reporting intact through the switch.

Migrate your SQL data pipeline from Airbyte to dlt

How to migrate your SQL data pipeline from Airbyte to dlt, an open-source solution that offers greater control, speed, and cost-efficiency.

Migrate your SQL data pipeline from Stitch data to dlt

How to migrate your SQL data pipeline from Stitch to dlt, an open-source solution that offers greater control, speed, and cost-efficiency.

Migrate your SQL data pipeline from Fivetran to dlt

How to migrate your SQL data pipeline from Fivetran to dlt, an open-source solution that offers greater control, speed, and cost-efficiency.

Syncing Google Forms data with Notion using dlt

The Operations team needed to gather information through Google Forms and land it in a Notion database. The Zapier connector did not work as expected, so we built the sync with dlt.

Slowly Changing Dimension Type2: Explanation and code

How I contributed my first data pipeline to the open source

Comparison running dbt-core and dlt-dbt runner on Google Cloud Functions

Deploy Google Cloud Functions as webhooks to capture event-based data from GitHub, Slack, or Hubspot