March 13, 2025
April 14, 2025
🔹 This article is part of the ongoing series: How Pub/Sub for Tables Fixes What Data Pipelines Broke.
Data failures come in many forms: broken pipelines, poor quality data, inconsistent semantics, and misaligned expectations across teams. These failures can stem from outdated systems, siloed domains, lack of engineering capacity, or even unclear business objectives.
But the underlying cause in most cases is the same. There is no clear, enforceable agreement between those who produce data and those who rely on it.
That’s why formalizing expectations between producers and consumers in a machine-verifiable way is so powerful. When done right, it helps prevent breakages, reduce rework, and restore trust in data across the organization.
This is the basis for data contracts.
Most breakdowns in data integration come from mismatched expectations. Producers share what they think is useful. Consumers interpret what they receive. The assumptions live in code, Slack threads, and institutional memory. They’re rarely in one place, and almost never enforced. A data contract replaces assumptions with actionable intent.
A data contract is a formal agreement between data producers and consumers that defines what data will be shared, how it will behave, and what guarantees it carries. A good contract isn’t just a schema. It encodes structure, behavior, and quality expectations — the things that make data usable and trustworthy.
Structure is the starting point. This includes field names, types, required columns, and relationships. It makes the shape of the data predictable and understandable. But structure alone doesn’t ensure usability.
Quality expectations complete the picture. They include both surface-level checks — like required fields and accepted values — and deeper assertions about meaning and business logic. If status is closed, then closed_at must be populated. If a region_code is provided, it must match one of the approved values. These kinds of rules define what the data is supposed to represent, not just how it’s formatted.
Contracts also define how the data is delivered and evolves. They clarify when updates arrive, how changes are introduced, and how consumers can depend on what they’re receiving. These guarantees are what separate data that is simply available from data that is actually dependable.
Ownership and enforcement are what make it real. Contracts are not just agreements between teams — they are embedded in the platform. Producers are responsible for publishing conformant tables. The system verifies whether those tables meet the declared contract. If they don’t, the data doesn’t move.
When enforced by the system, a contract becomes more than a promise. It becomes a reliable interface — stable, intentional, and testable. It’s the mechanism by which trust is established and maintained across the data platform.
In traditional data systems, data contracts are treated as optional metadata or downstream checks. Raw data is ingested and processed to recreate a snapshot of domain systems. Quality rules are then applied after the fact, often relying on inferred meaning rather than clearly declared intent.
This model is fragile. Small changes in source systems can quietly break assumptions. Semantics drift over time. Consumers are left trying to reverse-engineer what the data was supposed to mean, and hoping that their understanding remains valid.
Pub/Sub for Tables takes a different approach. There is no raw data. Domain teams publish purpose-built tables that are structured, versioned, and ready for sharing. These tables reflect exactly what the producer intends to share. Identity transformer functions act as data quality gates, validating that each update meets structural, functional, and semantic expectations before it reaches any consumer.
Governance is not an afterthought. Access controls are applied directly to the tables and to the collections they belong to. Only authorized consumers can access a dataset. Built-in audit and provenance tracking also show who is using what data and when. This visibility helps organizations identify unused or redundant assets and reduce data sprawl.
This model turns the idea of a contract into something operational. It makes quality, intent, and access enforceable at the point of publication, rather than through layers of tooling or reactive monitoring. With the right foundation in place, enforcement becomes straightforward.
Most validation stops at structure. Field types are checked, required columns enforced, and simple constraints applied. But this leaves out the more subtle and often more costly class of issues: semantic failures. A column might be technically correct but semantically wrong — values that don’t reflect business meaning, or logic that has drifted from its original intent. When meaning isn’t declared, it can’t be verified. And in most systems, there’s no mechanism to catch that drift before it spreads.
Pub/Sub for Tables makes semantics enforceable. Tables are published with intent. Producers define not only the structure but the expected behavior of the data. Identity transformer functions act as validation gates, allowing producers to assert business rules before the data is made available to consumers. These assertions go beyond schema — they capture the logic that gives the data its meaning. If status is set to closed, then closed_at must not be null. If a region_code is present, it must match a known value. If account_type is enterprise, the monthly_spend should reflect that classification.
These checks are not advisory. They are embedded into the publishing flow. If the data violates the expectations, it doesn’t move forward. This keeps consumers insulated from silent failures and gives producers a way to declare not just what their data looks like, but what it means.
Shared validators enforce consistency across publishers. Identity transformers can be reused to apply standard definitions of fields, values, and rules — effectively forming an enterprise-wide data dictionary. This ensures that data remains consistent, regardless of which team produces it, and eliminates the need for manual coordination.
With semantics declared and enforced at the source, quality becomes the default. It no longer depends on cleanup jobs or after-the-fact audits. The system guarantees that what was promised is what gets delivered.
This is what makes data contracts more than documentation — they become a reliable foundation you can build on.
Most data strategies stall because teams don’t trust the data they’re working with. Contracts, when treated as metadata or policy, don’t fix that. They document expectations, but they don’t enforce them. The result is a growing gap between what teams think they’re getting and what actually arrives.
Pub/Sub for Tables closes that gap. It turns contracts into the delivery mechanism. Producers publish tables with clearly defined structure, meaning, and guarantees. Consumers subscribe to them through a shared interface, with confidence that what they receive is complete, intentional, and correct.
Quality, governance, and accountability are built in. They aren’t layered on with tooling or process. They emerge naturally from the model. Tables are validated before they move. Access is controlled by design. Lineage is available without extra instrumentation. Every part of the system reinforces trust.
This is how you scale. Not by adding more layers or more people to manage the chaos, but by starting with a foundation that makes correctness the default. When producers can declare intent and the system can enforce it, teams move faster. When consumers don’t have to second-guess what data means, outcomes improve.
This is the role data contracts were meant to play — not as documentation, but as the connective tissue of modern data platforms.
Next up: Data products.
In Part 3, we’ll explore how governed tables form the basis of composable data products that emerge naturally when contracts are made operational.