learn-data-heuristics-with-phoebe / Session 5 of 9
Learn Data Heuristics with Phoebe · Session 5 of 9

Operating the promise

Session 4 gave the platform its architecture. Tonight it gets an operating discipline on top: the practices that turn "the pipeline usually works" into "the pipeline has a promise, and we know the moment it breaks it." This is the layer that finally explains why nobody noticed Tideline's dashboard was stale one Sunday a month - not because the platform failed silently, but because nothing was ever promised in the first place, so nothing could technically be late.

🔴 Advanced Data and analytics leads Anyone on call for a pipeline 45 min
0-3 · Welcome 3-23 · The operating principles 23-40 · Build-along: Tideline's freshness promise 40-45 · Q&A
Part 0

Where we are

Session 3 wrote the contract; session 4 gave the platform underneath it a name and a set of tradeoffs. Tonight closes the loop with the discipline of actually running the thing day to day: the DataOps practices, the signals worth watching, and the promise that makes "late" a measurable fact rather than a Monday-meeting argument. This session owns three of Tideline's twenty planted defects, and it is worth being honest about exactly how much new ground they cover.

Live = presented in the 45 minutes Self-study = the full depth, after class 🔍 Every diagram zooms

★ What you walk out with tonight. The two DataOps principles that change behaviour more than the other sixteen combined. The four golden signals translated line by line onto a pipeline. And a written freshness SLO with a real error budget, which is the single artifact most data teams have never produced for the dashboard everyone depends on most.

LiveThree defects, but an honest count of what is genuinely new3 min▶

This session owns D1 (no freshness stamp anywhere), D19 (no freshness promise, so the pipeline cannot be late) and D20 (no evidence the data was tested before it landed). Session 1's measured bench shows adding the DataOps and SRE lens moves the cumulative catch count from 17 to 19 - a gain of exactly two. D1 was already caught earlier, by the usability lens: a missing timestamp is a visible interface property, so Nielsen's heuristic 1, visibility of system status, flags it on its own.

The honest version: this lens contributes two genuinely new findings, D19 and D20, and its third finding, D1, was already covered by a lens that came before it. That overlap is not a flaw in the operating lens - it is the same lesson session 1 taught with IBCS and PAIR. What the operating lens adds that nothing else can is the reason D1 exists at all: without a stated promise, freshness has no target to be measured against, and a missing stamp is a symptom of that absence rather than an independent problem.

Real world

Tideline's data was silently partial one Sunday night this quarter. Nobody found out from the pipeline. A customer success manager found out on Monday because a churn number looked wrong, opened a ticket, and it took four hours to trace the number back to a load that had finished but only half-populated a table. There was no test that would have caught it before it landed, and no promise it broke, because none existed.

Self-studyWhy the operating lens sits after the platform lens3 min▶

Sequencing matters here. A promise about freshness only means something once you know what the platform underneath is actually capable of - session 4's PACELC tradeoff for the normal case sets the ceiling on what latency an SLO can honestly target. Promising a five-minute freshness window on top of a platform that was built to favour consistency over latency is not an operating problem, it is a platform problem wearing an operating costume. Tonight assumes the platform choice is already known and asks what discipline sits on top of it.

Part 1 · covers the eighteen DataOps principles and the two that matter most

Eighteen principles, and the two that change behaviour

7 min live

The DataOps Manifesto reads like a wall of text if you take it in one pass, so it helps to read it in the four clusters it actually falls into: how the team relates to its customer and to itself, how the work is engineered, how quality is enforced, and how the whole thing keeps improving.

Team and customer Satisfy the customer · value working analytics · embrace change · team sport daily interactions · self-organize Engineering practice Reduce heroism · reflect · analytics is code · orchestrate · reproducible builds · disposable environments Quality Simplicity · analytics is manufacturing quality is paramount · monitor quality and performance Continuous improvement Reuse · improve cycle times plus the later addition: start with data testing The two that change behaviour most Reduce heroism removes the reward for a save. Manufacturing treats each run as a repeatable process. Rose clusters hold the two principles that change behaviour most; cyan sets the culture beneath them.
🔍 Click to zoom - eighteen principles in four readable clusters, plus the later addition
LiveAll eighteen, by name, plus the later addition5 min▶

Primary-verified at dataopsmanifesto.org. The eighteen, grouped for readability rather than as a wall of eighteen bullets:

Team and customer. Continually satisfy your customer. Value working analytics. Embrace change. It's a team sport. Daily interactions. Self-organize.

Engineering practice. Reduce heroism. Reflect. Analytics is code. Orchestrate. Make it reproducible. Disposable environments.

Quality. Simplicity. Analytics is manufacturing. Quality is paramount. Monitor quality and performance.

Continuous improvement. Reuse. Improve cycle times.

A later addition, not in the original eighteen: start with data testing. It is usually cited alongside the eighteen because it directly addresses D20 - data landing untested is exactly the gap this addition was written to close.

LiveReduce heroism and analytics is manufacturing4 min▶

Reduce heroism names something most teams reward by accident: the engineer who fixes the pipeline at 11pm gets praised, and the praise teaches everyone that the correct response to a fragile system is a hero, not a fix. A team that reduces heroism treats a midnight save as a process failure to investigate, not a story to tell in standup.

Analytics is manufacturing reframes a pipeline run as a repeatable, monitored production process rather than a one-off craft output. A manufacturing line has statistical process control, defined tolerances and a stop-the-line rule. A pipeline treated as manufacturing gets the same: known-good ranges for row counts, an owner for out-of-tolerance runs, and a rule for when a bad batch should never reach the warehouse at all.

Real world

Tideline's Sunday-night partial load was quietly fixed by whichever engineer noticed it first, three separate times over the past year, by three different people, none of whom filed anything. Each fix was a small act of heroism. None of them changed the process that keeps causing the same failure.

Part 2 · covers the four signals worth watching on any pipeline

Four golden signals, translated for a pipeline

6 min live

Google SRE's four golden signals were written for services, but each one has a direct, specific meaning on a data pipeline - close enough that a team that already monitors latency, traffic, errors and saturation on their APIs can extend the same habit to their data without inventing a new vocabulary.

Source -> pipeline -> warehouse -> screen Latency freshness lag: time from event to visible on screen Traffic row volume: is today's batch the expected size? Errors failed loads, and the quieter silently-partial ones Saturation warehouse slot or queue pressure near its ceiling Errors is the signal Tideline never measured A load can finish with zero errors logged, yet still be silently partial - and look green on every dashboard. All four signals are cheap to instrument once, and expensive to reconstruct after an incident.
🔍 Click to zoom - the four golden signals, translated onto a data pipeline end to end
LiveLatency, traffic, errors, saturation - the pipeline reading5 min▶

Rob Ewaschuk's chapter in Site Reliability Engineering, O'Reilly 2017, names the four signals for monitoring distributed services. The translation to a pipeline is close enough to be almost literal.

Golden signalOn a data pipeline
LatencyFreshness lag - the time between an event happening and it being visible on the screen.
TrafficRow volume - whether the batch that just landed is close to the size a normal day produces.
ErrorsFailed loads, and the more dangerous case: loads that finish with no error but only partially wrote their data.
SaturationWarehouse compute slots or queue depth approaching the ceiling the platform can actually serve.

Errors is the signal worth instrumenting first if a team has none of the four today. A dashboard that only checks whether the job exited successfully will never catch a job that exited successfully having done half its job.

Self-studyThe Agile Manifesto as the DataOps ancestor3 min▶

The DataOps Manifesto is explicitly descended from the Agile Manifesto's twelve principles, published in 2001 and primary-verified at agilemanifesto.org. This session does not re-teach all twelve; the one worth citing directly is delivery cadence - Agile's principle of delivering working software frequently, in preference to a long release cycle, maps onto DataOps as shipping small, tested pipeline changes rather than a quarterly overhaul. The lineage matters more than the full list: DataOps is what happens when the Agile Manifesto's cadence and team principles are applied to a pipeline instead of an application.

Part 3 · covers turning a promise into a measurable fact

A promise with an error budget is what makes lateness real

7 min live

"The dashboard should be fresh" is not a promise, it is a wish. A promise has a target, a measurement window, and an explicit tolerance for missing it. Once that exists, a late dashboard is a fact you can point to, not an opinion someone can argue away in the Monday meeting.

SLO: 99% of loads land within 30 minutes, per 30-day window Budget 0 One breach: day 22 Sunday load, silent partial Day 1 Day 15 Day 30 A breach does not need to zero the budget. It needs a date, a cause, and a number remaining.
🔍 Click to zoom - a freshness error budget burning down across a month, with one breach
LiveThe three parts of a promise that can be checked5 min▶

An SLO turns a hope into an instrument. It needs three parts, and a promise missing any one of them is not actually operable:

  • A target - a specific number, such as 99 percent of loads landing within 30 minutes of the source event.
  • A measurement window - the period the target is evaluated over, commonly a rolling 30 days, so one bad night does not sink the whole quarter's reputation on its own.
  • An error budget - the amount of missing the target that is tolerated before it becomes an incident. If the target is 99 percent over 30 days, the budget is the 1 percent of loads allowed to miss - and once that 1 percent is spent, the next miss is treated as a real failure, not background noise.

The error budget is the part most teams skip, and it is the part that actually changes behaviour. Without it, every miss is treated the same, whether it is the first of the month or the fortieth, and nobody can say when "still fine" becomes "actually broken".

LiveTesting before the data lands, not after4 min▶

"Start with data testing" is the DataOps Manifesto's later addition, and it targets D20 directly: evidence the data was checked before a reader ever saw it, not after a reader complained. The cheapest version of this is a small set of assertions that run between the pipeline finishing and the data becoming visible - row counts within an expected range, no unexpected nulls in a key column, referential checks against a known dimension.

The distinction that matters is timing. A test that runs after the dashboard has already been read by three people is a post-mortem input, not a safeguard. A test that blocks the data from landing until it passes is the only version that actually prevents D20 from happening again.

Real world

The Sunday-night partial load would have been caught by one test: a row-count check against the trailing four-week average, with the load held back if it fell more than 30 percent short. That single assertion, run before the table became visible, would have turned a four-hour customer-facing mystery into a page nobody outside the data team ever saw.

Build-along

Write Tideline's freshness promise

★ 17 min · everyone builds

Three things to produce, in order, using Tideline's actual Sunday-night incident as the material. Nothing here needs a tool - a promise is a sentence, a test is a name, and a display requirement is a short list.

1. Write the SLO. Fill in all three parts: a target (a percentage and a time window, such as "99% of loads land within 30 minutes"), a measurement window (such as "measured on a rolling 30 days"), and an error budget stated as a count or a percentage of tolerated misses. Write it as one sentence a non-technical stakeholder could read and understand what "late" means.

2. Name the one data test that would have caught the silent Sunday-night partial load. Be specific: what column or table, what check, and what threshold. "We should test the data more" does not count as an answer - "row count against the trailing four-week average, held back below 70 percent" does.

3. Decide what the screen must display so a reader can tell the promise was kept. At minimum this is a visible freshness stamp and a status against the SLO, not just a raw timestamp a reader has to interpret themselves. Write the exact words that should appear near the number.

Notice that step 3 retroactively fixes D1. A freshness stamp only becomes meaningful once there is a promise for it to be measured against - which is the honest reason this session's third defect was really session 1's usability lens borrowing a fix that only makes sense once the operating layer exists.

Homework

Before session 6

20 min
Check yourself

Three questions

Of the three defects this session owns - D1, D19, D20 - which one was already caught by an earlier lens in the course, and why?

D1 is a rendered, visible property of the screen, so a usability-only reviewer already catches it. D19 and D20 are the genuinely new findings this lens contributes, which is why the measured catch count only rises by two, from 17 to 19, not by three.

Why does an SLO need an error budget in addition to a target and a measurement window?

The error budget is what turns a target into an operable promise. It defines exactly how much missing is acceptable before a miss stops being background noise and starts being a real failure worth acting on.

Which golden signal did Tideline's Sunday-night incident reveal was never actually being measured?

The job exited successfully, so a monitor watching only for failed jobs saw nothing wrong. The gap was in errors: a silently-partial load is exactly the case that pure job-success monitoring cannot see.

Sources covered

What this session teaches, and where it came from

✓The DataOps Manifesto, 18 principles plus the later additionPrimary-verified at dataopsmanifesto.org; all 18 named tonight, clustered for readability
✓Google SRE, four golden signals (Ewaschuk, Site Reliability Engineering ch. 6, O'Reilly 2017)Primary-verified; each signal translated onto a pipeline tonight
◐The Agile Manifesto's 12 principles (2001)Primary-verified as the DataOps ancestor; cited for delivery cadence only, not re-taught in full
✓SLOs and error budgets applied to data freshnessThe three-part promise structure built live on Tideline tonight

Every fact on this page, and its verification tier, is recorded in the course's source map.

Session 5 cheat sheet · pin this

The honest gainThis lens adds D19 and D20 new; D1 was already caught by usability. Catch count moves 17 to 19, not 17 to 20.
Two behaviour-changing principlesReduce heroism removes the reward for a midnight save. Analytics is manufacturing treats a run as a monitored process.
Four golden signals on a pipelineLatency is freshness lag, traffic is row volume, errors are failed and silently-partial loads, saturation is queue pressure.
A promise has three partsTarget, measurement window, error budget. Missing any one means the promise cannot actually be checked.
Test before it landsA test that runs after the dashboard was already read is a post-mortem input, not a safeguard.
Freshness needs a promise firstA timestamp alone is not visibility. It only becomes meaningful once there is an SLO for a reader to check it against.