Why the heavyweight version fails
A contract programme requiring a working group, a template with forty fields and a review board produces a handful of beautifully documented contracts and no behaviour change. Producers experience it as bureaucracy, route around it, and the pipeline breaks on Monday exactly as before.
The four fields that matter
Schema with types and nullability. Freshness SLA. A named owner who can be paged. Semantic definition of anything ambiguous. That is enough to prevent the majority of breakages, and it fits in a YAML file next to the model.
Enforcement is the whole point
A contract that is not machine-checked is documentation. Ours run as CI assertions: schema drift fails the producer's build, freshness violations page the owner, and consumers get a deprecation window rather than a surprise. The contract only changes behaviour when breaking it is inconvenient for the person who broke it.
Start with the pipeline that breaks most
Do not contract everything. Take the three sources that cause the most incidents, contract those, and let the reduced firefighting make the case for expansion. Adoption driven by relief works; adoption driven by policy does not.