Pular para o conteudo principal

Fallback, degradação e modo parcial

Como responder quando integração cai ou dado atrasa com fallback claro e modo parcial confiável.

Andrews Ribeiro

Andrews Ribeiro

Founder & Engineer

O problema

Quando uma dependência falha, muitos sistemas só parecem conhecer dois modos:

  • tudo funciona
  • tudo quebra

Só que bastante coisa no meio ainda pode continuar útil.

Exemplos:

  • página carrega sem recomendação
  • pedido segue sem email imediato
  • dashboard mostra dado parcial com marcação clara
  • consulta continua com subset seguro de informação

O problema é que fallback improvisado costuma nascer tarde e sujo.

Aí vira:

  • try/catch com valor padrão jogado
  • resposta silenciosamente incompleta
  • comportamento que operação nem sabe que existe

Modelo mental

Fallback, degradação e modo parcial não são a mesma coisa.

Mas os três tentam responder:

o que ainda pode funcionar com segurança quando uma parte falha?

Fallback costuma ser:

  • caminho alternativo
  • dado alternativo
  • comportamento alternativo

Degradação costuma ser:

  • reduzir escopo
  • reduzir qualidade
  • abrir mão de parte não essencial

Modo parcial costuma ser:

  • continuar disponível com subconjunto explícito de capacidade

O que precisa ser decidido antes

Antes de pôr fallback no código, vale separar:

  • o que é essencial
  • o que é opcional
  • o que é perigoso responder errado

Essa terceira categoria é a mais importante.

Porque, às vezes, o pior fallback é devolver algo aparentemente válido, mas errado.

Exemplo:

  • saldo velho tratado como saldo atual
  • regra de risco desativada sem proteção
  • preço incompleto tratado como preço final

Nem todo fluxo aguenta degradação segura.

Exemplo simples

Imagine um endpoint de checkout com:

  • cálculo de frete
  • cupom
  • recomendação de itens

Se recomendação falhar, provavelmente dá para seguir sem ela.

Se cupom falhar, talvez você ainda deixe o usuário continuar, mas com mensagem e sem aplicar desconto naquele momento.

Se cálculo de preço final falhar, talvez o mais seguro seja não concluir.

Os três casos são “dependências do fluxo”.

Mas o tratamento correto é diferente porque o risco é diferente.

O erro comum

O erro comum é usar fallback como fita isolante.

Algo quebra, alguém coloca:

  • valor default
  • timeout curto
  • return []

e chama isso de resiliência.

Mas resiliência sem semântica só mascara problema.

Fallback bom precisa ser compreensível para:

  • produto
  • operação
  • time de engenharia

Onde isso costuma morar

Em geral, a decisão de degradar faz mais sentido perto da orquestração do fluxo:

  • use case
  • camada de aplicação
  • política central de chamada externa

Não deveria ficar espalhada como reação aleatória em cada helper.

O sistema precisa ter uma ideia consistente do que significa:

  • seguir sem X
  • marcar parcial
  • falhar fechado

Como um senior pensa

Quem tem mais julgamento costuma perguntar:

  • o que ainda entrega valor se essa parte cair?
  • o que eu posso omitir sem mentir?
  • o que eu não posso degradar sem comprometer integridade?
  • quem precisa saber que estamos em modo parcial?

Essas perguntas produzem fallback melhor do que só adicionar circuit breaker e esperar.

Ângulo de entrevista

Esse tema aparece em system design, reliability e integração com terceiros.

O entrevistador quer ver se você sabe:

  • distinguir erro tolerável de erro crítico
  • degradar sem mentir para o sistema ou para o usuário
  • explicar o contrato do modo parcial

Resposta forte costuma soar assim:

“Eu não trataria fallback como default genérico. Primeiro separaria o que é essencial do que é opcional. O que puder degradar sem comprometer integridade entra em modo parcial explícito; o que puder gerar resposta enganosa eu prefiro falhar de forma clara.”

Takeaway direto

Sistema resiliente não é o que sempre responde alguma coisa.

É o que continua útil sem fingir certeza quando ela não existe.

Resumo rápido

O que vale manter na cabeça

Checklist de pratica

Use isto ao responder

Você concluiu este artigo

Próximo artigo Fan-in interno e agregação de resultados sem coordenador frágil Artigo anterior Escrita dupla interna com verificação

Continue explorando

Artigos relacionados