Data Engineering
Pipelines, orchestration, Spark, SQL, and the data platforms that carry production workloads.
How to read the Spark UI
2026-09-05The Spark UI is the most underused tool in Spark. Most engineers learn to write DataFrame code long before they learn to read what Spark did with it. This is the walkthrough I give people joining my team: the five screens that matter — Jobs, the DAG, SQL, Stages, Storage — what each one is telling you, and the order I check them in when a job misbehaves. Every screenshot comes from a small retail join you can reproduce on a laptop.
sparkpysparkdata-engineeringperformanceHow granular should a pipeline task be?
2026-09-04A pipeline with one 300-line task is undebuggable; a pipeline with a task per pandas call is unreadable. The rule I use to cut between them: put a task boundary where you would stop and inspect the data, or where you would want a restart to begin — and nowhere else.
airfloworchestrationpandasdata-engineeringanti-patternsTRY…CATCH, ROLLBACK, THROW: the case for explicit error handling in T-SQL
2026-08-30Plenty of warehouse procs rely on SET XACT_ABORT ON to clean up after failures — a one-liner most of the team has cargo-culted without knowing what it does. My position: make the error path explicit. TRY…CATCH, a visible ROLLBACK, and a THROW form a contract any reviewer can read — with XACT_ABORT kept underneath as the safety net it actually is.
sql-servert-sqlerror-handlingdata-engineeringMetadata-driven ETL: how far should configuration go?
2026-08-30Spec-driven pipelines are the right instinct — until the spec language grows conditionals and becomes a worse programming language. Where the line sits between metadata and code, why load patterns should be a closed set, and the smells that say your platform has crossed it.
airfloworchestrationetldata-platformanti-patternsOne DAG, every environment: the environment-aware DAG factory
2026-08-24How a small decorator around Airflow's @dag plus a tiered config object lets the same DAG definition run in dev, sit, uat, and prod — with no per-environment copies, no config drift, and promotion as a one-line gate.
airfloworchestrationconfig-managementdata-platformThe scheduler inside the scheduler: an Airflow anti-pattern and its paved-road fix
2026-08-23Why the controller-DAG-plus-generic-executor pattern hurts more than it helps, and how spec-driven DAG factories keep jobs as config without giving up per-job scheduling, backfills, and observability.
airfloworchestrationanti-patternsdata-platformMigrating from enterprise schedulers to Apache Airflow: patterns that hold up
2026-08-22A pattern guide for moving batch workloads off Control-M or Autosys onto Airflow: inventory first, standardize the DAG template, and reconcile before every cutover.
airflowmigrationdata-platform