learn-data-pipelines-with-phoebe / Session 5 of 6
Learn Data Pipelines with Phoebe · Session 5 of 6

When pipelines break: stale, wrong, and how you find out

Remember 6:05am - the moment Daybreak's dashboard refreshes? This session is about the mornings the truck never arrived. Pipelines break routinely, and the dashboard almost never admits it. Today you learn the two faces of a broken pipeline, the four failures behind most incidents, and the two safeguards that turn "the CFO found it on Thursday" into "we caught it before breakfast". Then you get to break Daybreak's pipeline yourself.

🟢 Easiest No code, no jargon The session that saves careers 45 min + self-study depth
0-3 · Welcome 3-20 · Concepts 20-40 · Break the floor 40-45 · Q&A
Part 0

Why this session exists

Here is the uncomfortable truth the first four sessions saved for now: everything you built a mental model of - the pickup, the shelf, the cleanup, the counting - fails regularly, at every company, forever. A 2022 Monte Carlo/Wakefield survey of 300 data professionals found teams spend roughly 40% of their day on data quality issues and suffer about 61 incidents a month. The mark of a good data team is not zero failures. It is how fast a failure is noticed. This session makes you the person in the meeting who asks the noticing questions.

Live - covered in session Self-study - read after ✦ Try it on the floor ☕ The Daybreak case
★ What you walk out with today The stale-versus-wrong distinction (the most useful two words in this course), the four failure causes behind most incidents, what freshness checks and data tests each catch - and each miss - and a week on Daybreak's pipeline floor where you break every stage yourself and watch what the dashboard admits.
Part 1 · covers the two failure faces

The two ways a dashboard lies 7 min live

Every pipeline failure, whatever caused it, reaches the dashboard wearing one of two faces. Learn to name them and you can triage any data incident in one sentence - which is genuinely more than many managers can do.

😴 STALE - the number is old Today's data never arrived. The screen still shows the last good day and looks completely normal doing it. The tell: a "last updated" stamp that quietly stopped moving. If nobody looks at it, nobody knows. Visible - IF anyone checks the timestamp 🎭 WRONG - the number is fresh and false Today's data arrived - damaged. Half the orders dropped, or a bad calculation ran. The timestamp says 6:05am. It is lying. The tell: there is none on the dashboard. Only a data test upstream, or a human who smells the number. Invisible - freshness checks cannot see it Stale is embarrassing. Wrong is dangerous - decisions get made on it. Different safeguards catch each.
🔍 Click to zoom - stale versus wrong, the two faces every failure wears
LiveWhy "wrong" is the one that hurts3 min▶

A stale dashboard eventually confesses - someone notices Tuesday's number never changed, and the damage is usually a day of mild confusion. A wrong dashboard testifies. It carries a fresh timestamp, it sits in the Monday deck, it gets quoted in the board meeting, and every downstream decision inherits the error.

  • Stale Daybreak: the 2am sync credential expired; the screen shows yesterday's $17,980 looking perfectly normal. Awkward, recoverable.
  • Wrong Daybreak: a promo-code update starts writing prices as text; half the orders silently drop out of the total and the screen shows $9,120 - fresh stamp, wrong by half. Marketing kills the promo that was actually working.

One sentence to keep: freshness tells you the data arrived; it says nothing about whether the data is right. Two different questions, two different safeguards - that is part 3.

Real worldIndustry post-mortems add a third, crueler variant: the pipeline that reports SUCCESS and delivers zero rows. Every stage ran green; there was simply nothing on the truck. It lands as "stale" on screen but as "all systems normal" in the engineering channel - which is why the timestamp, not the status light, is the check that matters.
Self-studyTriage in one sentence2 min▶

When a number looks off, ask in this order: "Is it stale or is it wrong?" - then: stale means look at the truck (ingestion, credentials, the source system's night); wrong means look at the cleanup room and the definitions (a change shipped recently, upstream or in the transform). You will be right about where the problem lives most of the time, and your data team will quietly upgrade their opinion of you.

Part 2 · covers the failure taxonomy

The four failures behind most incidents 6 min live

Post-mortems across the industry keep converging on the same short list. None of them is exotic, none needs code to understand, and you have probably lived through at least two.

LiveThe taxonomy, with Daybreak's version of each4 min▶
FailureWhat happensFace on the dashboard
Upstream schema change (the most common)The source app changes shape without warning - a column renamed, a price field switched to text. The truck arrives; the cargo no longer fits the shelf.Usually WRONG
Late or missing dataThe source had a slow night; the 2am pickup ran on time and found nothing. Data arrives at 10am into a pipeline that stopped waiting at 2.STALE (or partial)
Expired credentialsThe password or key the pipeline uses to log into a source rotates or expires. The least glamorous failure in data, and a regular one.STALE
Bad deployA human ships a change to the cleanup logic that runs green and computes nonsense - divides by the wrong column, drops a filter.WRONG

Notice the pattern: the STALE causes are mostly operational (credentials, timing) and the WRONG causes are mostly change - someone, somewhere, changed something. That is why data teams get nervous on release days and why "what changed yesterday?" is the first question in every incident.

Real worldThe same 2022 survey: the average incident took 4+ hours just to detect and about 9 more to resolve. Detection is the bottleneck - which tells you exactly where the smart money goes, and it is not "prevent all failures".
Self-studyWhy prevention alone cannot win3 min▶

Two of the four causes - schema changes and late data - originate in systems the data team does not control. The checkout app belongs to the product team; the ad data belongs to Google. You cannot code-review another company's release schedule. Since the causes cannot all be prevented, mature teams shift the goal: minimize time-to-notice, not incident count. That reframing is the entire logic of part 3, and it mirrors how site-reliability teams think about servers - uptime through fast detection and recovery, not through the fantasy of nothing ever breaking.

The average incident, start to finish Time to detect 4 hours Time to resolve 9 hours Detection took 4+ hours on average, then about 9 more to resolve - detection is the bottleneck.
🔍 Click to zoom - detection takes 4 hours, resolution takes 9 more
Part 3 · covers the safeguards

Two safeguards, and what each one misses 7 min live

The industry's two standard safeguards map one-to-one onto the two faces. Neither replaces the other - and knowing which catches what is the most practical thing this course teaches.

LiveFreshness checks - the timestamp with an alarm3 min▶

A freshness check is a promise with a deadline: "orders data should never be more than 12 hours old - warn at 12, alarm at 24." The transform tool dbt ships this as a built-in feature (source freshness), and every monitoring product has an equivalent. It is cheap, it is one line of configuration, and it turns the silent STALE face into a loud one.

  • Catches: expired credentials, dead syncs, late data, the success-with-zero-rows trap - anything that stops new data arriving.
  • Misses: everything that arrives on time and damaged. The $9,120 morning sails straight past a freshness check, timestamp gleaming.

The dashboard-reader's version of this safeguard costs nothing: look at the "last updated" stamp before you trust a number. If your dashboard does not show one, that is a feature request worth making this week.

LiveData tests - tasting the batch before it ships4 min▶

A data test is an automatic check on the data's content, run inside the pipeline before results are published. The standard tool (dbt) ships exactly four built-in ones, and they are beautifully mundane:

FRESHNESS CHECKS expired creds dead syncs late data DATA TESTS price becomes text duplicate rows not_null failures NEITHER CATCHES $21,890 - refunds counted as revenue Freshness confirms arrival; data tests confirm shape. Neither checks whether a definition is right.
🔍 Click to zoom - two safeguards, and the gap between them that neither covers
TestPlain EnglishDaybreak example
not_nullthis field must never be emptyevery order has a price
uniqueno duplicates allowed hereorder #8412 appears exactly once
accepted_valuesonly these values are legalorder status is placed, shipped, or refunded - nothing else
relationshipsthis must point at something realevery order belongs to a customer that exists

When a test fails, the pipeline can block publishing - the dashboard keeps yesterday's honest number instead of today's damaged one, and the on-call engineer gets paged. Trading "wrong" for "stale, loudly" is a wonderful trade.

  • Catches: the text-price schema change (price fails not_null when parsing dies), duplicate-counting bugs, refund statuses nobody expected.
  • Misses: whatever nobody thought to test - and definition drift. If two teams count "revenue" differently, every test passes and the numbers still disagree. Tests check data against rules; they cannot invent the rules.
Real worlddbt's own documentation recommends a floor so standard it is almost ritual: every table's ID column gets unique + not_null. Two tests, one line each. Ask your data team "do our core tables have test coverage?" and watch the conversation get real.
Self-studyThe third safeguard: someone actually on call2 min▶

Checks that fire alerts nobody owns are decoration. The unglamorous third safeguard is a routing rule: a named person sees pipeline alerts the same morning. On the floor below, the on-call lever changes nothing about detection - it changes recovery, roughly "fixed in 3 hours" versus "found by the CFO on Thursday". In the 2022 survey numbers, that is the difference between the 4-hour detection average and the multi-day tail. When you ask your data team about safeguards, the third question after freshness and tests is simply: "who gets woken up?"

Everyone breaks things

The pipeline floor 🔧 ★ 20 min · everyone breaks a pipeline

This is Daybreak's pipeline, and you are allowed - encouraged - to break it. Every failure from part 2 is wired into a stage. Break one, run the day, and read the dashboard the way an executive would. Then score a full scripted week and watch what each safeguard is worth. The numbers are scripted from real incident patterns; the lesson is not.

Run a healthy day first. No breaks, no safeguards. The dashboard shows $18,240, fresh at 6:05am. This is what "normal" looks like - remember its face.

Break Ingest (the expired credential), run the day. The dashboard shows $17,980 and looks utterly normal. That is the STALE face: yesterday's number wearing today's suit. Now switch the freshness badge ON and rerun - same number, but now it confesses.

Repair Ingest, break Checkout (prices-as-text), run the day. $9,120 - about half of reality, timestamp fresh. Turn the freshness badge on. Rerun. It sails straight through: freshness cannot see wrong. Feel free to be slightly horrified.

Turn data tests ON, rerun the same break. Publish blocked - the dashboard refuses to show the damaged number, and the story panel tells you what fired. Try the other WRONG breaks too (Transform's bad SQL: $3,648; Metrics' definition drift: $21,890 - note that one counts refunds as revenue, which no test catches).

Switch to "Score a full week." Three scripted incidents. With no safeguards: 0 of 3 caught, 6 days trusting a bad number. Freshness on: 2 of 3, 2 blind days. Both on: 3 of 3 caught same-day, 0 blind days. That ladder - 0, 2, 3 - is the business case for data quality tooling in one widget.

Last: toggle the on-call alert on any broken day. Watch the recovery line change from "the CFO, on Thursday" to "fixed before the 9am meeting". Detection plus ownership - that is the whole playbook.

✦ The one to show a colleague The Metrics break ($21,890 - refunds counted as revenue) passes the freshness check AND every data test, because the data is clean and the definition is the problem. Sessions 4 and 6 both told you definitions are human work; here is the proof, inflated by exactly the refunds.
Before next session

Homework 📝 ◐ 20 minutes

Check yourself

Three questions before you go 🎯 ◐ 90 seconds

1 · Daybreak's dashboard shows $9,120 with a fresh 6:05am timestamp on a day that really earned $18,240. Which safeguard can catch this?

The data ARRIVED on time - freshness sees a gleaming timestamp and waves it through. Only a test on the content (not_null on price, a row-count check) sees the damage and blocks publish.

2 · The most common cause of pipeline failures in industry post-mortems is...

Schema changes top the lists - the source app renames a field or changes a type, no malice involved, and the cargo no longer fits the shelf. It is also the cause the data team can least prevent, since the source belongs to another team.

3 · Mature data teams aim primarily to...

Two of the four causes live in systems the data team does not control. Since prevention cannot be total, the winning metric is detection speed - the week-mode ladder (0 caught, then 2, then 3 of 3) is exactly this idea made visible.

Coverage, honestly

What this session covered from the official universe

✓dbt Fundamentals - Tests + source freshnessthe four built-in tests and freshness SLAs, taught in plain English; writing them stays with dbt's course
✓Industry failure taxonomy (Hevo, Integrate.io post-mortem literature)schema change, late data, credentials, bad deploys - with the stale/wrong lens on top
◐Monte Carlo data-observability materialsthe 2022 survey numbers quoted; the observability product category itself is named, not taught

Certificates, videos, and graded assessments stay with the official providers - this course teaches the working core in plain English.

Session 5 cheat sheet

The two facesSTALE = today never arrived, old number looks normal. WRONG = arrived damaged, fresh stamp, false number.
Which hurts moreWrong. Stale confesses eventually; wrong gets quoted to the board with a gleaming timestamp.
The four causesUpstream schema change (top of every list), late data, expired credentials, bad deploy.
Freshness checksCatch everything that stops data arriving. See nothing that arrives damaged. Cheap - demand the stamp.
Data testsdbt's four: not_null, unique, accepted_values, relationships. Can block publish - wrong becomes stale-loudly.
What both missDefinition drift ($21,890 counting refunds). Clean data, passing tests, wrong meaning - human work.
The ladderWeek of 3 incidents: no safeguards 0 caught / 6 blind days → freshness 2 / 2 → both 3 of 3 / 0.
Three questions to askIs there a freshness stamp? Do core tables have tests? Who gets woken up?