Uma configuração de senha com 150.000 passou nas verificações de build e de tipos, mas falhou ao vivo
O primeiro cliente real a se cadastrar quebrou um recurso de login que tinha passado em todas as verificações que fizemos. A página disse que a solicitação tinha falhado, e nada foi salvo.
O que estávamos substituindo
Tínhamos um protótipo em que qualquer senha funcionava, e a tela de login dizia isso abertamente. O trabalho era transformar aquilo em algo de verdade: uma senha real, a rejeição de uma senha errada e solicitações que ficassem guardadas, em vez de sumir assim que a página fosse atualizada.
O desenho era comum e sólido. Uma senha é embaralhada por um método bem conhecido antes de ser armazenada, com uma configuração que controla quantas vezes esse embaralhamento se repete. Mais repetições significam mais segurança, ao custo de um pouco mais de tempo para conferir uma senha. O número que escolhemos para essa configuração foi 150.000, confortavelmente acima dos 100.000 que lembrávamos de orientações mais antigas. Ninguém verificou se a plataforma em que isso ia rodar aceitava mesmo um número tão alto.
Por que as verificações antes do lançamento não pegaram o problema
Essa configuração só importa no momento em que uma conta real é criada no sistema real. Uma verificação de build não cria conta. Uma verificação de tipos também não. As duas passaram limpas, porque nenhuma delas chega à única linha que depende do limite real da plataforma.
O primeiro cadastro real chegou nela, e falhou. O limite real da plataforma para essa configuração era 100.000 (Ler em inglês), e não 150.000. Ela não limitou o número e seguiu em frente. Ela recusou a solicitação por completo.
A correção, e o teste que importou mais
A correção foi um único número: 150.000 corrigido para 100.000, com um comentário ao lado explicando por que não pode subir mais.
Depois veio a parte que importou mais: uma execução completa no sistema real, não em um simulado. Criar uma conta nova. Tentar a senha errada. Tentar a certa. Salvar uma solicitação e conferir que ela continua lá depois de recarregar a página. As quatro verificações rodaram contra o sistema de verdade, não contra um substituto, e as quatro passaram.
O que verificaríamos da próxima vez
O limite de uma plataforma é um fato sobre aquela plataforma. Conferir isso teria levado um minuto.
Um teste que nunca chega ao passo que pode realmente falhar não provou nada sobre esse passo, não importa quanto mais ele tenha provado. As verificações de build e de tipos passaram e não nos disseram nada sobre uma linha que elas nunca tocaram.
Antes de um recurso de login entrar no ar, descubra qual limite a plataforma real impõe a cada configuração e peça para alguém confirmar. Depois, rode pelo menos um teste de ponta a ponta no sistema ao vivo: crie uma conta, tente uma senha errada, tente a certa e recarregue a página. O número que importa agora é 100.000, e o teste que importa agora é o que usa uma conta real, uma senha real e um recarregamento real.