Pular para o conteúdo
Contentin
ContentinCadastre-se

Post-mortem

Um verificador de linkback bloqueou nosso lançamento: um post-mortem hipotético

Equipe inventada, incidente inventado, mecânica real. Contamos na ordem em que um engenheiro de plantão escreveria.

Um braço mecânico vermelho para uma esteira transportadora carregando um pacote em um cenário de fábrica em miniatura
Este é um exemplo

A equipe, o produto e os cronogramas abaixo são fictícios para mostrar como uma falha se desenrola. Nenhuma empresa, cliente ou medição real é descrita.

O incidente, em ordem

  1. 1

    09:10, uma página de lançamento entra no CMS

    Uma equipe de produto de seis pessoas executa um site de marketing em um CMS headless e uma construção estática. Um editor prepara um anúncio de parceiro que faz link para um domínio de parceiro registrado na semana anterior.

  2. 2

    09:14, o editor clica em publicar

    O webhook de publicação chama uma função. A função executa uma chamada de verificador de linkback contra o domínio do parceiro e foi escrita para bloquear o lançamento em qualquer resposta que não seja de sucesso.

  3. 3

    09:14, a construção nunca começa

    Duas coisas falham ao mesmo tempo. O domínio é novo, então nosso índice pode não conhecê-lo ainda. Separadamente, o saldo pré-pago na chave da equipe estava vazio, então a chamada de acompanhamento paga retornou HTTP 402.

  4. 4

    09:40, a equipe descobre

    O editor relata um erro vago. Um engenheiro lê o log da função, vê o 402 e o resultado vazio, e gasta vinte minutos descobrindo qual dos dois causou o bloqueio.

  5. 5

    10:05, o lançamento é feito manualmente

    Alguém contorna o hook com uma implantação manual. O lançamento tem 55 minutos de atraso, e o contorno não deixa registro de quais verificações foram puladas.

Um jardineiro cuida de três tipos diferentes de plantas em uma canteiro de jardim em miniatura

O que a equipe verificou antes do lançamento

Muito pouco, como acabou se revelando. A lista de testes continha apenas domínios bem conhecidos, é por isso que a lacuna permaneceu oculta até um link de parceiro chegar. Um teste em um site famoso prova que o encanamento funciona, e não diz nada sobre um domínio que o índice ainda não viu.

Listas de teste melhores contêm três tipos de domínio: um estabelecido, um de nicho pequeno e um domínio registrado recentemente. Execute todos os três através do hook antes que alguém confie nele.

Quais domínios o teste cobriu?

Apenas os fáceis. Cada domínio na lista tinha anos de histórico por trás, então cada resposta voltou completa, e ninguém viu o que uma resposta vazia faz para uma publicação.

Adicione um domínio que seja genuinamente novo e leia seu resultado manualmente. Se a nota disser ruim onde deveria dizer desconhecido, a regra precisa ser reescrita antes do lançamento.

O que a execução de staging deixou de fora?

A execução de staging usou uma chave com saldo saudável, então o caminho de saldo vazio nunca foi executado. Ninguém havia escrito um teste que gasta o crédito de propósito.

Mantenha esse caminho sob teste. Force um 402 uma vez por trimestre e leia o que o editor vê depois, porque um caminho de falha que ninguém executa é um caminho que ninguém pode confiar.

Por que aconteceu

O portão tratou cada não-sucesso como um veredito. Essa foi a causa raiz. Um problema de saldo e um domínio desconhecido são fatos sobre as ferramentas e o índice, e nenhum deles diz nada sobre a página.

Nosso gráfico é reconstruído cerca de uma vez por mês. Um domínio registrado após a última atualização pode parecer vazio, e um novo parceiro é o caso normal para uma página de lançamento. Ninguém havia verificado. A equipe havia testado o hook apenas com domínios antigos e bem conhecidos como nytimes.com.

A segunda falha foi o silêncio. A função registrou o erro, mas não enviou nenhum alerta, e o editor viu uma mensagem de falha genérica sem nenhuma dica de que o crédito havia acabado.

O custo nunca foi o problema. A 2 créditos por chamada, o mês inteiro de verificações para este site inventado custou cerca de $0.60, o mesmo valor da linha de 3.000 publicações na tabela de custos. O portão era barato e ainda custou a eles uma hora em 2026.

O 402 merece sua própria linha. Um saldo pré-pago é um estado que você pode monitorar, então um alarme simples em 10.000 créditos, que é $1, teria disparado dias antes.

Itens de ação que a equipe escreveu

Os responsáveis são funções, não pessoas. Todos os itens fazem parte do exemplo.
MudançaResponsávelPor que
Tratar 402 como um skip mais um alerta para o canal da plataformaPlataformaCrédito é um estado de faturamento, não um estado de página
Tratar um resultado vazio para um domínio novo como desconhecido, não ruimPlataformaO índice atrasa cerca de um mês
Mostrar ao editor o motivo em palavras clarasFerramentas editoriais20 minutos perdidos lendo logs
Registrar verificações puladas na entradaPlataformaImplantações manuais não deixaram rastro
Testar o hook com um domínio registrado esta semanaQADomínios antigos escondem a lacuna

Um ensaio para a semana de lançamento

Execute isso antes do próximo lançamento, não após a próxima falha.

  1. 1

    Escolha um domínio que ninguém verificou

    Escolha um domínio registrado recentemente e chame a ação de visão geral gratuita nele. Confirme que uma resposta fina é registrada como desconhecida em vez de como um bloqueio.

  2. 2

    Drenar um saldo de teste

    Use uma chave de teste com um saldo pequeno e deixe-a chegar a zero de propósito. Observe o 402 chegar, o alarme disparar e a publicação continuar para a construção.

  3. 3

    Leia a mensagem do editor em voz alta

    Peça a um colega que não viu o hook para ler o texto do erro. Se ele não conseguir dizer o que fazer a seguir, reescreva a mensagem antes do lançamento.

  4. 4

    Escreva o skip na entrada

    Confirme que uma verificação pulada deixa uma nota datada na entrada, com o motivo. Uma implantação manual então nunca deixa uma lacuna que ninguém pode explicar.

Três caixas de ferramentas coloridas distintas estão sentadas em uma bancada de oficina em uma cena em miniatura

Como a correção foi escrita

A equipe dividiu uma falha genérica em três, porque cada resposta tem um responsável diferente. Um 401 é um problema de chave, um 402 é um estado de faturamento e um resultado vazio para um domínio novo é simplesmente desconhecido. Cada um recebe seu próprio branch e sua própria mensagem. Essa é a mudança inteira.

Ninguém precisava ler um stack trace para saber qual aconteceu. Os nomes dos alertas nomeiam o estado, e o editor vê uma frase que diz o que fazer a seguir.

Por que um alarme de saldo é definido bem acima de zero?

Dez mil créditos são $1 no preço publicado, uma pequena quantidade que ainda dá muito aviso quando chega cedo. Defina o alarme onde um humano vai ver, não em um log que ninguém abre na sexta-feira.

Uma verificação que falha alto uma vez por dia supera uma silenciosa que falha durante um lançamento.

Concordar com o número com a equipe e escrevê-lo no mesmo lugar que a regra para rotacionar chaves, para que os dois sejam revisados juntos.

Um domínio novo deve contar como uma falha?

Não. Um domínio que o índice ainda não viu é um fato sobre o índice, não sobre a página. Armazene-o como desconhecido com a data e deixe um editor decidir se deve esperar pela próxima atualização.

A mesma regra se aplica a qualquer resposta fina. Trate-a como dados ausentes e nunca como um veredito sobre o parceiro.

Registre as respostas desconhecidas em sua própria lista, para que um padrão delas seja visível na próxima revisão em vez de enterrado no log geral.

O que copiar

Falha aberta em dados de link, falhe alto no alerta

Uma verificação de link nunca deve ser a única coisa entre um editor e um lançamento. Deixe a página passar, marque a entrada e torne a falha impossível de perder para a pessoa que é responsável pela chave.

  • Diferencie 401, 402 e um resultado vazio no código
  • Mantenha um alarme de saldo bem acima de zero (veja a tabela de custos)
  • Ensaie a falha no staging antes do dia do lançamento

Perguntas que a equipe fez depois

A reunião de revisão levantou o mesmo punhado de perguntas em cada versão desta história. Aqui está como a equipe inventada respondeu a elas, e por que essas respostas difeririam de uma organização para outra.

Nenhuma dessas respostas é universal, e cada uma depende do propósito da página. O ponto é ter uma resposta no papel antes do próximo lançamento.

O portão deveria ter falhado fechado?

Para esta equipe inventada, não. Uma verificação de link é um sinal construído em um índice mensal, e não deve ser a única coisa entre um editor e um lançamento.

Escreva a política como uma frase, para que o próximo engenheiro possa distinguir um bloqueio intencional de um bug.

Um saldo maior teria evitado?

Teria atrasado o problema em vez de corrigir o design. Um saldo maior ainda pode acabar, e um portão que trata cada não-sucesso como um veredito ainda bloqueará no primeiro domínio desconhecido.

A correção é a divisão em três respostas, mais um alarme que dispara cedo. O saldo é apenas uma parte da história.

Faça a mesma pergunta para qualquer portão que você construir: qual falha seria silenciosa, e quem notaria primeiro?

Uma nota sobre o hipotético

Equipes reais diferirão. A sua pode falhar fechado por bons motivos, como um site regulado onde cada link de saída é revisado por uma pessoa. Tudo bem. Apenas faça dessa uma escolha.

O manual de execução do webhook lista as mesmas decisões como uma lista de verificação, e a lista de mitos cobre as crenças que levaram esta equipe inventada à armadilha.