The problem contracts solve
Producer team ships a schema change. Consumer team's pipeline breaks at 6 AM. Consumer team is angry. Producer team didn't know anyone was reading their table. This is the most common cross-team data outage in any company that has at least two data-producing teams. The fix is a data contract.
What a contract has
- Schema — column names, types, nullability, allowed values.
- Freshness — "available by 9 AM, 99.5% of days."
- Ownership — name and on-call channel of the producing team.
- Breaking-change policy — how much notice before a column is removed; how column-rename migrations are handled.
- Versioning — additive vs breaking changes; whether downstream consumers must opt in.
What a contract is not
A contract is not a wiki page that nobody reads. It's an artifact enforced by code: schema validation at the producer's write step, automated freshness checks, CI tests that compare current schema to the declared contract on every PR. A contract in a doc is wishful thinking; a contract in CI is a load-bearing wall.