Layered Data Platform Diagram

Sources landing into progressively refined zones, with the contract each zone offers written down rather than assumed.

flowchart LR
  subgraph src["Sources"]
    direction TB
    oltp[("Operational DBs<br/><i>CDC</i>")]
    saas["SaaS APIs<br/><i>batch pull</i>"]
    events[["Event Stream<br/><i>Kafka</i>"]]
    files["Partner Files<br/><i>SFTP drop</i>"]
  end

  subgraph raw["Raw Zone"]
    direction TB
    r1[("append-only<br/>source schema<br/>no transforms")]
    r2["<i>guarantee:</i><br/>replayable history"]
  end

  subgraph clean["Cleansed Zone"]
    direction TB
    c1[("deduplicated<br/>typed, conformed<br/>quality-tested")]
    c2["<i>guarantee:</i><br/>schema + quality SLA"]
  end

  subgraph curated["Curated Zone"]
    direction TB
    g1[("business entities<br/>modelled, aggregated")]
    g2["<i>guarantee:</i><br/>agreed definitions"]
  end

  subgraph serve["Consumers"]
    direction TB
    bi["BI & Reporting"]
    ml["Feature Store<br/>& Model Training"]
    api["Data API<br/>& Reverse ETL"]
  end

  oltp --> raw
  saas --> raw
  events --> raw
  files --> raw
  raw --> clean
  clean --> curated
  curated --> serve
  clean -.->|"exploration only"| ml

What it is

The analytical estate drawn as a left-to-right refinement chain. Every zone gets a stated guarantee: raw promises only that it is a faithful replayable copy; cleansed promises a schema and a quality standard; curated promises agreed business definitions. Consumers attach at the zone whose guarantee they need.

The guarantees are what make it an architecture rather than a folder structure.

When you produce it

At the start of any data platform build, and again whenever an analyst has started querying raw because cleansed was too slow to change — which is the usual reason numbers stop reconciling.

Who reads it

Data engineers, who own the transitions. Analysts and data scientists, who need to know which zone they are allowed to build on. Governance, who attach classification and retention rules per zone. Executives, who mostly want to see that there is one path rather than nine.

What good looks like

  • Each zone states its guarantee, not just its name.
  • Ingestion mechanism is on each source — CDC, batch pull, stream, file drop — because it determines latency and failure mode.
  • Any dotted line that bypasses a zone is drawn and justified, because those are where the inconsistencies come from.
  • Retention and format are noted per zone.

Common mistakes

  • Naming the zones and stopping. Bronze, silver and gold with no stated contract is decoration.
  • Hiding the bypass paths. They exist. Undrawn, they become the reason two dashboards disagree.
  • One diagram for both batch and streaming with no distinction. They have different failure modes and different freshness, and the reader needs to know which path a given table came down.