Six Sources, One Platform

A medium Pipeline Design interview practice problem on DataDriven. Design the pipeline on the canvas: sources, transforms, storage and checks, then get feedback on it.

Domain
Pipeline Design
Difficulty
medium
Seniority
L5

Problem

Six source systems feed a new analytics platform: two emit events continuously, peaking at 5,000 per second combined, while four export nightly or weekly. About 40 finance analysts read the results through one BI tool. Design the end-to-end pipeline from the six sources to those finance dashboards.

ADF orchestrates. Unity Catalog governs. Nothing leaks.

Business requirements

Worked solution and explanation

Why this problem exists in real interviews

This problem has six source systems with very different cadences. Finance needs the data without customer identifiers, and lineage has to answer for a number when it gets challenged. Each of these is easy in isolation. Together they defeat the obvious design: one nightly orchestration that loads everything into one warehouse and handles permissions in the BI tool.

The first instinct is one nightly DAG that hits all six sources, normalises the data into a warehouse, and applies security in each dashboard. Three things go wrong. The fast sources go stale because the slowest source set the schedule. Customer email leaks because the seventh dashboard forgets its config. And when an audit asks where a number came from, someone reconstructs it from memory. None of these failures are exotic. They are the default outcome of putting schedule, access and lineage in the wrong layers.


Walk the requirements

Step 1: Run each source on its own cadence

When a continuous source and a weekly export share a schedule, one wastes compute and the other is silently stale. Give the continuous feeds a streaming path with a real-time SLA. Give the nightly extracts and weekly drops a daily batch path. Both paths converge on the same masking stage and warehouse, but each arrives on its own clock.

Step 2: Strip customer identifiers on the way in, not in each dashboard

Finance needs the dataset without customer email, phone or names. Put one masking stage on every path into the governed warehouse, so the tables finance reads never hold those columns in the clear. Then point every dashboard at that warehouse, and it no longer matters which dashboard finance opens. The wrong place for this is the BI tool. There, the boundary depends on someone configuring every new dashboard correctly, and the next leak comes from the one they miss.

Step 3: Index lineage off the warehouse

When finance points at a number and asks where it came from, the answer should be a lookup. That means lineage is captured as part of the load and fed from the warehouse into a lineage index such as OpenLineage, not written on a wiki page after the fact. The test is simple: can you take any dashboard figure and walk back to the source records without reading any code?


The shape that fits

Two ingest clocks converge on one masking stage. One governed warehouse feeds both the finance dashboard and the lineage index.
  • fast_sources (source, Kafka); freshness: real-time
  • slow_sources (source, API); freshness: < 24h
  • pii_masking (transform)
  • governed_warehouse (storage, warehouse)
  • finance_dashboard (consumer, dashboard)
  • lineage_index (consumer, OpenLineage)
  • fast_sources -> pii_masking
  • slow_sources -> pii_masking
  • pii_masking -> governed_warehouse
  • governed_warehouse -> finance_dashboard
  • governed_warehouse -> lineage_index

Common follow-up questions