Skip to content
C.W.K.
Stream
Lesson 05 of 05 · published

Choosing — The Practical Decision Framework

~10 min · orchestration, decision

Level 0Curious Reader
0 XP0/47 lessons0/11 achievements
0/120 XP to next level120 XP to go0% complete

The honest comparison

None of the three is universally better. Pick based on team shape and constraints, not on Twitter discourse. Here's the working table.

AirflowDagsterPrefect
Mental modelTasks → DAG (assets too, since 3.0)Assets → graph emergesFunctions → flows
Deployment costHigh (DB + scheduler + DAG processor + API server + workers)Low (single process to start)Lowest (a flow is a Python file you run)
Ecosystem of operatorsLargest (80+ provider packages)MediumMedium
Best for teams that…Already have ops; need many integrationsThink in data assets and want lineage front-and-centerWant orchestration that feels like a Python library
Async / concurrency storyFineGoodBest (native async)
UI maturityMature, denseModern, lineage-firstModern, flow-first
Learning curveSteepMediumGentle

The defaults I actually recommend

  • Small/new team, starting from zero: Dagster. The asset model maps to how data teams already think, and dagster dev is one command to a working lineage-aware UI. Prefect is genuinely lighter to stand up — a flow is a Python file you run, with no server at all — but what you get is a flow view, not a lineage view. That is the trade, and for a data team the lineage is usually worth the one extra process.
  • Big team with existing infrastructure and many vendor integrations: Airflow. The ecosystem advantage is real.
  • Engineering team that wants orchestration to feel like a library, not a platform: Prefect. The hybrid execution model is a real advantage for regulated/security-sensitive shops.

One caveat about the first row

The mental-model row used to be the cleanest line in this table: Airflow does tasks, Dagster does assets, pick the noun that matches your team. Airflow 3 blurred it. Datasets became Assets, scheduling became event-driven, and a DAG can now wake because data changed rather than because the clock moved. The distinction has not vanished — Dagster still starts from the asset and derives the graph, while Airflow bolts assets onto a task graph that remains the primary object — but it is now a difference of emphasis rather than of kind. If you last compared these three before 2025, that is the row to re-read.

And one important non-answer: don't agonize over the choice. All three are good enough that you'll get most of the value from any of them. The discipline of writing pipelines as DAGs/assets/flows is what makes the work better — the specific tool is the smaller decision.

Code

Same pipeline, three frameworks — pick the one that matches your team·text
Airflow:   @dag → @task functions → DAG file in dags/
Dagster:   @asset functions → repository → dagster dev
Prefect:   @flow + @task functions → python flow.py

All three give you: scheduling, retries, UI, run history, alerting, backfills.
Pick based on team shape, not benchmarks. The decision will not haunt you.

External links

Exercise

Pick one of the three frameworks (Dagster if you want a lineage UI from one command; Prefect if you want the least to install). Build a working three-task pipeline that extracts, transforms, and loads any small dataset. Schedule it. Make it fail on purpose, watch the retry happen, then fix it. The goal is not to ship a production pipeline — it's to feel the loop.

Progress

Progress is local-only — sign in to sync across devices.
Spotted a bug or have feedback on this page?Report an Issue

Comments 0

🔔 Reply notifications (sign in)
Sign inPlease sign in to comment.

No comments yet — be the first.