O Que é Backward Compatibility? Não Quebrar o Que Já Funciona
Backward compatibility significa que uma nova versão de um componente ainda funciona com os clientes, dados e callers construídos para a versão antiga.
Backward compatibility é a propriedade silenciosa que torna rollouts incrementais possíveis. Se uma nova versão ainda honra o contrato antigo, você pode fazer o deploy dela enquanto clientes antigos continuam funcionando, sem dia da virada, sem release coordenado de uma só vez. Perca-a, e cada mudança vira uma correria sincronizada entre todos os consumers ao mesmo tempo.
O que realmente significa
Código novo aceita as entradas que callers antigos enviam e produz saídas que callers antigos entendem. Dados antigos ainda carregam. Um cliente antigo falando com a nova versão não percebe nenhuma quebra. A compatibilidade é julgada da perspectiva do que já existe.
Por que sustenta deploys seguros
- Durante um rolling deploy, versões antigas e novas rodam ao mesmo tempo.
- Deploys independentes de serviços só funcionam se os contratos continuarem compatíveis.
- Viabiliza rollback: a versão antiga ainda consegue ler dados novos.
- Evita coordenar todos os consumers para uma única mudança.
Compatível por construção
Mudanças seguras adicionam em vez de remover: um novo campo opcional, um novo endpoint, um novo valor de enum tratado com elegância. O padrão expand-then-contract, adicionar o novo caminho, migrar os callers, só então remover o antigo, mantém todo estado intermediário compatível.
A janela de versões mistas
Durante qualquer rolling deploy há um período em que ambas as versões estão vivas. Backward e forward compatibility são o que tornam essa janela segura; sem elas, requisições que atingem a versão errada falham de forma intermitente e imprevisível.
Aplicando no CI
Pipelines podem fazer diff de specs de API e schemas de banco de dados para sinalizar breaking changes automaticamente, e rodar testes de cliente antigo contra a nova versão. Isso transforma a compatibilidade de um julgamento do revisor em um build gate.
Por que o rollback depende disso
Um rollback só funciona se a versão anterior ainda consegue operar sobre dados que a nova versão escreveu. Pipelines que testam o caminho de rollback, não apenas o de upgrade, confirmam que a compatibilidade se mantém nas duas direções.
Principais conclusões
- Backward compatibility significa que novas versões ainda funcionam com clientes e dados existentes.
- É a precondição para rolling deploys, deploys independentes e rollback seguro.
- Mudanças expand-then-contract mantêm todo estado intermediário compatível.