The Last Mile of Data: Serving Analytics and ML, Reading Fundamentals of Data Engineering, Ch. 9

· tech

#data-engineering#book-notes#data-serving

📑 Contents

The previous chapters walked through the source, storage, ingestion, modeling — but all that work only pays off the moment someone actually uses it. This chapter is the last stop of the lifecycle: serving. And its first principle is one word.

The highest principle: trust

The book puts it bluntly: nobody uses data they don’t trust. A dashboard whose numbers don’t add up, or that broke yesterday without anyone noticing, only sends people quietly back to “gut feel” or their own Excel — and then the whole pipeline before it was for nothing. So at the serving stop, data quality and trust aren’t bonus points, they’re the pass mark. In practice that means: set SLAs / SLOs for critical data (how fresh, how accurate, how quickly fixed when broken), and put quality monitoring as close to the consumer as possible.

Trust is the foundation of serving; every form below is built on it.

Serving fans out to many mouths

“Serving data” isn’t a single action; it’s the same modeled data fed to consumers of completely different shapes:

modeled data Warehouse · Lakehouse business analytics BI · dashboards embedded analytics in-product, for customers machine learning features · training data Reverse ETL back into CRM · ad platforms
Serving is the last stop of the lifecycle, and the only one that produces value; the same data fans out to four consumers of completely different shapes

Three kinds of analytics — don’t mix them up

The first two in the diagram are both called “analytics”, but the requirements are worlds apart. The book distinguishes three:

KindFor whom, for whatNeed for real time
Business analyticsInternal decisions: reports, dashboards, explorationLow (batch is mostly enough)
Operational analyticsAct right now: real-time monitoring, live operationsHigh (needs real time, see streaming)
Embedded analyticsFor external customers: data pages inside the productMedium to high, and zero tolerance for wrong numbers

The easiest trap is building embedded analytics like an internal report — it’s for customers, so one wrong number is a product incident, not “we’ll fix it internally”.

Serving ML: where the DE’s responsibility ends

The other big consumer is machine learning. Here you have to be clear how far the DE is responsible: the DE typically owns turning data into clean, trustworthy, reproducible features and training data (often managed centrally through a feature store), so that model training and online inference get the same features; the modelling and tuning beyond that belong to the ML engineer. The book flags a key point: the features used for training and the features served online must be consistent, or you get the infamous training-serving skew. The DE’s value on that line is the same old story — make the data trustworthy and reproducible.

Reverse ETL: data that isn’t just “looked at”

Traditional serving takes data somewhere to be looked at (dashboards). Reverse ETL goes the other way, pushing results computed in the warehouse back into operational systems — loading a “high churn-risk customers” list back into the CRM, pushing an audience segment to an ad platform. Data thereby stops being just reports and directly drives action. It closes the lifecycle loop: data comes from operational systems, goes round, and returns to operational systems.

One number, one definition: the semantic layer

Back to “trust”. The most common killer of trust is the same “revenue” producing three numbers in three tools — one in BI, one in a notebook, one in the product, and nobody believes anybody. The semantic layer (metrics layer) exists to solve this: centralise metric definitions, define each once, and have every tool fetch from there:

BI · dashboards Notebook product app Semantic layer · Metrics layer revenue, active users… defined once Warehouse
Without a semantic layer every tool computes its own, and one "revenue" comes out in three versions; with it, the definition is centralised once and consistent site-wide — the technical guarantee of trust

Reflections

Without trust, the whole pipeline before it was for nothing

This chapter woke me up to something engineers routinely overlook: the value of data isn’t in “being computed”, it’s in “someone believes it and uses it”. I’ve seen beautifully built pipelines that nobody ended up using — because one day the numbers didn’t match, or it broke for three days with no alert, and everyone quietly went back to their own Excel and gut feel. From then on that dashboard was a tombstone nobody opened. The lesson is hard: the quality and trust of the serving stop deserve as much effort as any stage before it — because it’s the only place all that earlier effort is cashed in. Putting monitoring and SLAs closest to the consumer isn’t fussiness; it’s protecting the investment in the whole pipeline.

”Why do these two reports disagree” — the semantic layer is the thing I most wish I’d introduced earlier

I’ve been asked that question until I dread it. The same “active users”: one number in BI, one the boss pulled themselves, another from the product — every meeting spent reconciling numbers instead of making decisions. That’s how trust gets worn away, one time after another. The root cause is almost always the same: metric definitions scattered across tools, each computing its own. A semantic layer (dbt metrics, or a BI tool’s semantic model) centralises the definition into one single source of truth, and I consider it the most underrated, highest-return step there is. What it sells isn’t technology, it’s “everyone finally arguing about the right thing on the same number”.

Reverse ETL made me rethink what “serving” means

I used to imagine “serving data” as dashboards — dishing data out for people to look at. Reverse ETL opened the other half: data can go straight back to drive operations — load “high-risk customers” into the CRM so sales call them today, push an audience back to the ad platform. It turns data from “something to admire” into “something that acts”, and truly closes the lifecycle loop. What it taught me: don’t think of a data team’s output as reports; think of it as a “product” — something consumed, accountable, and able to drive action. Which echoes this whole chapter: serving is the face of data engineering that actually meets the user.