Pilar 02 · Data Blog

Data contracts: o jeito menos doloroso de não quebrar produção

A história que se repete em toda empresa que opera dado: pipeline funcionando há meses, dashboard executivo confiável, time de produto tomando decisão em cima do número. Numa segunda-feira, engenheiro de backend renomeia um campo no Postgres porque "ninguém usa esse nome direito mesmo". Na quarta às 17h, dashboard quebra. Diretoria liga, time de dados corre, e a culpa cai em quem não tem ferramenta pra defender — geralmente o time de dados, que descobriu a mudança quando o pipeline já estava quebrado.

Data contracts existem pra encerrar esse loop. São acordos versionados entre quem produz dado (sistema fonte) e quem consome (warehouse, dashboard, agente, ML). Saíram do mundo de blog post de 2022 e viraram ferramenta concreta em 2025. Esse texto é sobre o que mudou, quando vale adotar e como não transformar em mais um overhead burocrático.

O problema que data contract resolve

Em arquitetura tradicional, dado flui de sistema fonte (CRM, app, ERP) pro warehouse sem nenhum acordo formal sobre estrutura. Engenheiro de backend assume que pode mudar schema livremente — "é só o banco da aplicação". Time de dados descobre quando algo quebra. A relação fica em modo reativo crônico.

Data contract inverte essa dinâmica. O time de dados (consumidor) declara explicitamente quais campos depende, com qual tipo, com qual semântica. O time de backend (produtor) compromete-se a versionar mudanças, dar aviso prévio, e quebrar contrato é uma decisão consciente — não acidente.

Na prática, o contract vive em código: arquivo YAML/JSON num repositório compartilhado, checado em CI, com versionamento semântico. Mudança breaking exige major version + deprecation period. Mudança aditiva é trivial. Quem tenta mudar sem incrementar versão tem PR bloqueado.

Data contract não é tecnologia nova. É a velha disciplina de API contract aplicada ao dado — onde sempre devia ter estado, e nunca esteve por inércia organizacional.

O que mudou de 2022 pra 2026

Em 2022, data contracts eram conceito de palestra. Implementar exigia construir tudo do zero. Em 2026, três coisas mudaram:

  • Ferramentas maduraram. Schema registry (Confluent, AWS Glue), contract validators (Great Expectations, dbt source freshness), event streaming com schema evolution (Avro, Protobuf). Stack está disponível.
  • dbt source contracts. dbt 1.5+ tem contract: true nativo — define schema de modelo, valida em CI. dbt vira o ponto de implementação natural, conectando contract com modelagem.
  • Cultura do "produtor de dado". Engenheiros de backend começaram a aceitar responsabilidade por dado downstream, especialmente em empresas grandes onde data team subiu na hierarquia.

Esse trio é o que muda a discussão de "vamos implementar data contracts?" pra "qual escopo?". A ferramenta não é mais o bloqueio. A organização é.

Onde data contracts realmente valem

A tentação de aplicar contracts a tudo é o erro que mata o projeto. Tudo é overhead pesado, e ninguém mantém. A regra que funciona: aplicar em 3–5 entidades críticas, não nos 200 modelos do warehouse.

Critérios pra escolher as entidades:

  1. Quebra causa dashboard executivo errado. Entidade central como customer, order, subscription. Quando muda silenciosamente, número visto pela diretoria sai errado. Contract aqui é seguro contra catástrofe.
  2. Múltiplos consumidores downstream. Entidade que alimenta 5+ dashboards, 2+ modelos de ML, 1+ integração externa. Custo da quebra escala com número de consumidores.
  3. Cruzamento entre times com baixa comunicação. Quando produtor e consumidor moram em times diferentes que falam pouco, contract substitui conversa. Quando moram no mesmo squad, contract pode ser overhead.

Aplicar em entidades fora desses três critérios é sobre-engenharia. Aplicar dentro deles e ignorar é gerar incidente recorrente que ninguém entende a causa.

Quatro elementos que um contrato útil tem

Não é checklist de ferramenta — é o mínimo de conteúdo do acordo. Sem esses quatro, "contract" é só nome bonito.

Schema explícito. Lista de campos, tipos, nullability, valores aceitos quando enum. Igual a contrato de API REST. Sem isso, "contract" é texto livre que ninguém aplica.

Semântica documentada. Não basta saber que status é string. Precisa saber que valores tem (active, paused, cancelled), o que cada valor significa, quando muda. Sem semântica, schema é vazio.

SLO de freshness e disponibilidade. "Dado atualizado em 1h", "uptime 99.5%". Compromisso operacional do produtor. Sem isso, contract cobre estrutura mas não confiabilidade.

Política de mudança versionada. Como mudanças breaking se comunicam, qual período de deprecation, quem aprova. Sem isso, contract congela em vez de evoluir.

Esses quatro cabem em um arquivo de 30–80 linhas. Não é projeto de seis meses — é disciplina de duas semanas pra escrever, depois rotina contínua de manter.

Como começar sem virar burocracia

Quem implementa data contracts certo segue uma sequência específica:

Semana 1–2: escolher 3 entidades críticas. Não 10. Não 30. Três. As que mais quebram, ou que mais doeria quebrar. Discussão fica clara em uma reunião com produto, dados e backend.

Semana 3–4: escrever os contratos. Em código, num repo compartilhado. Schema, semântica, SLO, política de mudança. Revisão cruzada entre produtor e consumidor. Sai contract aprovado por escrito.

Semana 5–8: CI bloqueando mudança breaking. PR que muda schema de entidade contracted falha no CI se não bumpou versão. Producer team aprende rápido o novo workflow.

Semana 9–12: dashboard de freshness e violations. Visibilidade pra ambos os times. Producer vê quando seu sistema atrasou; consumer vê o que está em risco.

A partir daí, expansão pra mais entidades vira incremental — uma a uma, conforme dor aparecer. Quem tenta fazer 50 entidades de uma vez vai falhar; quem faz 3 bem e cresce do que dói atinge cobertura útil em 6 meses.

O argumento contra (e por que costuma estar errado)

A objeção previsível: "vai engessar o time de backend". Vale endereçar.

Não engessa em mudança aditiva — nova coluna, novo enum, novo campo. Esses são triviais. Engessa em mudança breaking — renomear, remover, mudar tipo. E engessa propositalmente, porque essas são exatamente as mudanças que precisam de aviso prévio.

Quem reclama de contract sem ter sentido o impacto da quebra geralmente nunca foi o time chamado às 18h pra explicar dashboard errado. A discomforto de mudar com versionamento é menor que a discomforto de explicar incidente pro CFO.

Como já argumentei sobre dado limpo, a régua certa não é "perfeição absoluta". É "bom o suficiente pro caso de uso". Data contract aplicado aos 3 casos onde dói paga ROI de seis meses no primeiro incidente evitado.

A decisão pra 2026

Se sua empresa tem time de dados que apaga incêndio com frequência, e a causa raiz aparece em "mudança no schema fonte", data contracts são o caminho. Não como projeto de 12 meses; como adoção incremental sobre 3 entidades críticas, com ferramenta que dbt já oferece nativamente.

Se sua empresa não tem time de dados maduro ainda, contract é pré-maturo. Outras disciplinas precisam vir antes — observabilidade de dados, ownership claro de modelo, eval set de qualidade. Implementar contract em cima de caos só formaliza o caos.

Contract não cria cultura de qualidade — só cristaliza a que já existe ou começou a existir. Esse é o teste real antes de adotar.

Continuar a conversa

Quer discutir esse tema com um sócio?

Diagnóstico inicial sem compromisso. Levamos uma primeira leitura do seu cenário em uma semana e devolvemos um relatório.

Conversar com um sócio