A pipeline that works once is a script. A pipeline that works reliably every day, handles failures gracefully, and can be maintained by a team is engineering. Orchestration, idempotency, testing, and CI/CD are what separate prototypes from production.
A Directed Acyclic Graph defines the execution order of tasks in a pipeline. Each node is a task (extract, transform, load, test), and edges define dependencies (task B runs after task A). "Acyclic" means no circular dependencies: the graph always moves forward.
Select a tool to understand its philosophy and trade-offs.
Philosophy: DAGs-as-code in Python. Strengths: Massive community, 1000+ provider packages, battle-tested at scale, managed options (MWAA, Cloud Composer, Astronomer). Best for: Teams that need a proven orchestrator with extensive integrations. Trade-off: Configuration complexity, task-centric (not data-aware), UI can be overwhelming for beginners.
A pipeline is idempotent if running it multiple times with the same input produces the same result. No duplicates, no side effects, no corruption. This is critical because in production, pipelines will fail and need to be re-run. If re-running creates duplicates or double-counts, your data is wrong.
Late data arrives after its expected processing window. Backfills re-run historical pipeline runs to fix data, apply new logic, or onboard new sources. Both are routine in production, not exceptions.
| Test type | What it checks | Tool examples |
|---|---|---|
| Unit tests | Individual transform logic in isolation | pytest, dbt unit tests |
| Data quality tests | Completeness, uniqueness, validity of output | dbt tests, Great Expectations, Soda |
| Integration tests | End-to-end pipeline on sample data | CI pipeline with fixture data |
| Contract tests | Schema compatibility between producer and consumer | Schema Registry, dbt contracts |
| Performance tests | Query time, resource usage under load | Benchmarks, warehouse profiling |
1. What does it mean for a pipeline to be idempotent?
2. What is a DAG in the context of orchestration?
3. Which strategy ensures idempotent writes when processing daily data?
4. What is the primary advantage of Dagster over Airflow?
5. What should happen in CI when a developer opens a pull request for a dbt model change?