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.
| Airflow | Dagster | Prefect | |
|---|---|---|---|
| Mental model | Tasks → DAG | Assets → graph emerges | Functions → flows |
| Deployment cost | High (DB + scheduler + workers + webserver) | Low (single process to start) | Lowest (single process; Cloud option) |
| Ecosystem of operators | Largest (1,500+) | Medium | Medium |
| Best for teams that… | Already have ops; need many integrations | Think in data assets and want lineage front-and-center | Want orchestration that feels like a Python library |
| Async / concurrency story | Fine | Good | Best (native async) |
| UI maturity | Mature, dense | Modern, lineage-first | Modern, flow-first |
| Learning curve | Steep | Medium | Gentle |
The defaults I actually recommend
- Small/new team, starting from zero: Dagster. The asset model maps to how data teams already think, and the deployment story is the gentlest of the three.
- 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.
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.