What You'll Master Here
a producer’s explicit promise to consumers, and schema evolution is how you change that API without breaking callers.
Everything downstream — models, marts, features, dashboards — assumes upstream data keeps behaving the way it did yesterday. Nothing enforces that assumption. This chapter makes those dependencies explicit and safe to change: contracts, schema evolution, governance.
Start with the matrix below. Corvus Games ships one event stream to four consumers, and three things go wrong with it: a field is renamed, a field quietly changes meaning, and rows stop arriving. Four levels of defence, and no single one catches all three — which is exactly why this chapter has the topics it has.
A data contract is an API for data: a producer’s explicit promise to consumers, and schema evolution is how you change that API without breaking callers.
Undeclared data dependencies are the silent killer of data platforms: an upstream change breaks downstream with no warning. Contracts and disciplined evolution turn fragile implicit dependencies into explicit, safe ones.
- data contract
- A producer’s explicit promise about schema, semantics, quality, and ownership.
- schema evolution
- Changing a schema over time without breaking existing consumers.
- compatibility
- Whether a schema change still works for old/new readers (backward/forward/full).
- lineage
- The traced flow of data from sources through transformations to outputs.
| Change | Nothing | Warehouse tests | Registry compat check | Full contract |
|---|---|---|---|---|
| A field is renamed | missed | caught after ship | caught before ship | caught before ship |
| A field changes meaning | missed | missed | missed | caught before ship |
| Rows quietly stop arriving | missed | missed | missed | caught before ship |
Treating upstream tables as stable just because they exist. A silent upstream rename or type change breaks downstream models with no error at the boundary.
Make data dependencies explicit with contracts.
Evolve schemas in compatible ways, or version.
Enforce contracts and track lineage automatically.
Treat data like an API. A contract makes the producer accountable and the consumer safe; schema evolution is API versioning for data.
Predict before you click. In the matrix above, choose the cheapest defence you believe stops each change before it ships — the two you get wrong are the two topics to read most carefully.
Data contracts make producer-consumer dependencies explicit, and schema evolution lets data change without breaking consumers, treat data like a versioned API.
