DT3: Building reliable pipelines

Lesson 4 of 5 · reading 15–25 minutes; practice and project time is on the module page

Scheduling and orchestration

🎯You'll be able to

Schedule a pipeline with cron or GitHub Actions, explain what an orchestrator such as Airflow or Prefect adds, and set retries, timeouts and limits on running at the same time.

🏠The everyday picture

A railway timetable says when each train leaves; the station master also makes sure two trains don't use one platform at once, and holds a train if the one before it is late.

📘What it really is

📝A worked example

Input: the solution's .github/workflows/refresh.yml.

Expected output: a daily schedule (30 0 * * *), concurrency: group: refresh with cancel-in-progress: false, read-only permissions, a 20-minute timeout, and steps in the order load → dbt build → freshness → dashboard. Project 1 test 10 checks these rules; it doesn't run the workflow on GitHub (not verified).

🌍Where it's used

📝Case scenario

An e-commerce company's dashboard refresh and its nightly load were scheduled independently. On a slow night, the dashboard refreshed before the load finished and showed half a day's sales to the morning meeting. Making the dashboard a step after the load, which runs only if the load and tests pass, fixed it.

🖱️Try it

Write the cron expression for "07:15 every Monday in Pune" in UTC. Then read the starter's refresh.yml and list four things wrong with it. Success: 45 1 * * 1, and your list includes the trigger, the permissions, concurrency and the step order.

⚠️Common mistakes

🛠️For your project

Project 1 test 10 reads your refresh.yml and checks the schedule, concurrency, permissions and step order.

✅Quick check

What does cancel-in-progress: false protect?

Show the answer

A running load isn't killed half-way by the next one; the next one waits.

When should a pipeline retry?

Show the answer

On brief errors such as a network timeout, not on bad data.

← PreviousIncremental loads, backfills and late data
ProLearners Assist