Data & architecture

Data orchestration: how data pipelines get scheduled, retried and rerun

A finance dashboard refreshes every morning at 6am, right on schedule. Except the currency conversion job that feeds it kicked off before the upstream extract had finished writing to the warehouse, so it pulled half of yesterday's data and half of nothing. Nobody touched a line of code. The job ran exactly when the cron entry said it should, which was precisely the problem: it ran on a clock, not on the data actually being there.

Data orchestration is the automated coordination of the steps in a data pipeline, ingestion, transformation and loading, so tasks run in the right order, wait on real dependencies rather than a fixed clock, retry on routine failures, and can be rerun over historical periods without someone doing it by hand.

What data orchestration actually coordinates

Data orchestration is the layer that decides when each step of a pipeline runs, what it waits on before it starts, and what happens if it fails. It sits above the individual jobs, extract scripts, transformation logic, load steps, and treats them as one connected process rather than a set of scripts that happen to run near each other in time.

The orchestrator itself rarely does any of the data work. It does not pull rows from a source system or write a transformation in SQL. Its job is sequencing: run the extract, confirm it finished cleanly, trigger the transformation that depends on it, then the load that depends on that, and hold everything else back until each link in the chain has actually succeeded.

Where a fixed schedule stops being enough

Most pipelines start on a calendar. A job runs at 2am, another at 6am, and for a while that is fine because there are only a handful of them and the timing rarely clashes. The trouble starts once one job depends on another finishing first, because a clock has no idea whether yesterday's extract actually completed, only that a certain number of minutes have passed.

That is the scenario the opening example describes: a downstream job firing on time but on top of an upstream job that ran late or failed silently. Add a few more sources and a couple more transformation steps, and a spreadsheet of start times stops being a schedule and starts being a guess about how long everything upstream usually takes.

Dependencies as a graph, not a list

The fix most orchestration tools reach for is a directed acyclic graph, or DAG: each task is a node, each dependency is an edge, and a task only starts once everything feeding into it has finished successfully. Airflow, Dagster and Prefect all use some version of this, usually defined in Python rather than drawn as a diagram, so the dependency structure is version-controlled and reviewable like any other code.

Writing the graph out explicitly also surfaces problems a schedule hides. If two teams have each built a job that depends on the same upstream table, that dependency now sits in one place instead of two people's private assumptions about run times, and a change to the upstream job shows up as a change to a shared graph rather than a surprise two steps downstream.

Retries and failure handling

Pipelines fail for mundane reasons: a source API times out, a network connection drops, a warehouse briefly hits a concurrency limit. None of that means the pipeline is broken, it means the next attempt will probably work. Orchestrators handle this with configurable retries, often with a backoff delay, so a transient fault gets a second and third attempt before anyone is paged.

Just as important is what happens when retries run out. A failed task should stop the specific branch of the graph that depends on it, not the whole run, and it should raise an alert with enough context, which task, which run, what error, that someone can act on it rather than starting from a wall of log output.

Backfills: rerunning history on purpose

Logic changes. A transformation gets a bug fix, a new column gets added, a source system's schema shifts, and suddenly the last three months of output need reprocessing with the corrected logic, not just tomorrow's run. That is a backfill, and it is one of the clearest reasons to use a real orchestrator rather than a folder of scripts.

A proper orchestration tool lets you rerun a pipeline across a date range as a first-class operation, respecting the same dependency graph and the same retry behaviour as a normal run, rather than someone manually looping a script over a list of dates and hoping the order does not matter.

Data-aware scheduling instead of a fixed clock

The more recent shift in orchestration tools is triggering work off the data itself rather than off the clock. Instead of running the transformation at 6am, the rule becomes running it once this morning's file has actually landed, using sensors or events that watch for a file, a table update or an upstream task's completion.

Dagster's software-defined assets and Airflow's dataset-aware scheduling both work this way: a downstream job is defined as depending on a dataset and fires when that dataset updates, whenever that happens to be, rather than at a time someone guessed would be safe. It removes an entire category of the stale-data problem the opening example describes.

Choosing between Airflow, Dagster and Prefect

Airflow is the incumbent: mature, widely deployed, task-oriented, with the largest ecosystem of integrations. It suits teams who already think in terms of scheduled tasks and want the tool with the most existing documentation and the most hires who already know it.

Dagster models pipelines around the data assets they produce rather than the tasks that produce them, which suits teams who want lineage and testing built into the same definition as the schedule. Prefect leans lighter and more Python-native, with less infrastructure to stand up, which suits smaller teams who want orchestration without running a cluster to get it.

None of the three is a universal answer. The choice comes down to what your team already thinks in, tasks or data assets, and how much operational overhead you are willing to own.

Getting the sequencing right before picking a tool

The tool matters less than what feeds it. An orchestrator only enforces the dependency graph you give it, so the exercise worth doing first is mapping which jobs actually depend on which, what a safe retry looks like for each, and which ones would need a backfill if the logic changed.

That mapping is where we tend to start, because a scheduler bolted onto pipelines nobody has fully traced just automates the same stale-data problem faster. We build a data foundation built for AI with that dependency structure explicit from the outset, so orchestration ends up coordinating a pipeline your team actually understands rather than papering over one it does not.

Frequently asked questions

What is data orchestration?

Data orchestration is the automated coordination of the individual steps in a data pipeline, ingestion, transformation and loading, so they run in the right order, wait on real dependencies rather than a fixed clock, and recover automatically from routine failures. Tools such as Airflow, Dagster and Prefect implement this as a dependency graph defined in code.

Data orchestration vs ETL: what's the difference?

ETL describes the actual work: extracting data, transforming it, loading it somewhere. Data orchestration is the layer that decides when each of those ETL steps runs and in what order, including what happens if one of them fails. An ETL job can exist without an orchestrator, but at any scale it needs one to run reliably alongside everything else.

Data orchestration vs data pipeline: what's the difference?

A data pipeline is the sequence of steps that moves and transforms data from source to destination. Data orchestration is the scheduling and coordination layer that runs that pipeline, and usually several others, enforcing dependencies, retries and backfills across all of them. The pipeline is the work; the orchestrator is what makes sure it runs when it should.

What is orchestration in Azure Data Factory?

In Azure Data Factory, orchestration means chaining activities and pipelines together with explicit dependencies, so a copy activity, a transformation and a downstream pipeline run in sequence and only proceed once the prior step succeeds. It covers scheduling triggers, conditional execution and retry policies within Data Factory's own pipeline designer, rather than a separate external tool.

What are the best data orchestration tools?

Apache Airflow, Dagster and Prefect are the three most commonly used, each open source with a managed cloud option. Airflow has the largest ecosystem and the most task-oriented model, Dagster is built around data assets and lineage, and Prefect is the lightest to stand up for smaller teams. The right one depends on your existing stack and whether your team thinks in tasks or in data assets.

Want a straight view of where AI can help your business first? Talk to us and start with a clear picture instead of a vendor demo.

Start at your core.

Tell us where your data is today and what you want AI to do. We will come back with a straight answer on what your foundation needs and where the quickest real win is.

Talk to us