← Gestão de Problemas: investigar e prevenir
08 / 12 · 60 MIN

Hipóteses, regressão e fecho

Constrói uma cadeia de evidência entre hipótese, alteração e eficácia, usando um modelo limitado de fuga de recursos.

Separar recuperação e atribuição causal

O fixture muda três variáveis ao mesmo tempo: versão v1 para v2, carga de 1000 para 200 pedidos por minuto e cache quente para vazia. As falhas observadas passam de 20 para zero. É correto comunicar a melhoria, mas não atribuí-la exclusivamente à versão. A carga reduzida pode deixar de atingir o limite; a cache reiniciada pode adiar o sintoma. Regista todas as alterações e escreve hipóteses que produzam previsões diferentes. Num ambiente autorizado, compara condições suficientemente semelhantes e observa o mecanismo esperado. Um canário também precisa de populações caracterizadas: encaminhar só operações simples para a versão nova não cria por si uma comparação útil com operações complexas no controlo.

Ler a acumulação antes de aparecer a falha

O modelo Python representa um contador de recursos com capacidade dez. A variante defeituosa retém um recurso a cada dez operações bem-sucedidas. Depois de cinquenta operações, existem cinquenta sucessos e cinco recursos retidos: o teste verde esconde a aproximação ao limite. Numa execução de 500 tentativas, a variante completa 100 e recusa 400, terminando com dez recursos retidos. A variante corrigida liberta cada recurso, completa 500, termina com zero e tem pico de um. Estes resultados seguem as regras explícitas do modelo sequencial. Não medem uma JVM, um pool JDBC ou WebSphere, não exercitam concorrência e não definem um tamanho recomendado para pools reais.

Desenhar uma regressão que distinga versões

Uma regressão útil falha pelo mecanismo relevante na versão anterior e passa pela razão esperada na alteração proposta, quando essa comparação for segura e viável. No modelo, cinquenta operações sem medir retenção passam nas duas versões e não distinguem o defeito. A execução prolongada e o contador tornam a diferença visível. Para um produto real, identifica o caminho de aquisição e libertação, cancelamentos, exceções e condições de carga que precisam de ensaio. Define critérios de paragem e recuperação antes de executar. Não transportes o número 500 como padrão universal. Guarda versão, configuração, entradas e resultados, incluindo contraexemplos; se não reproduzires o defeito, declara o limite e investiga as condições em falta.

Medir o custo e o alcance do workaround

Repor o contador a zero após cada cinquenta sucessos evita atingir o limite do modelo, mas a retenção reaparece entre reposições. Esta medida altera a exposição ao esgotamento e não a regra de libertação. Num serviço fictício de APS, um restart periódico pode reduzir incidentes enquanto aumenta intervenções manuais e risco de erro durante a janela de fecho. Relata disponibilidade, esforço recorrente e efeitos da intervenção separadamente. Define condições de utilização, sinais de falha e responsável pela revisão do workaround. A eliminação da causa precisa de evidência própria. Se a correção atrasar, a decisão de continuar com mitigação deve tornar visíveis os custos e o risco residual para quem tem autoridade para os aceitar.

Ligar cada ação ao resultado verificável

Um commit aprovado prova a existência de uma alteração revista; uma mudança instalada prova outra etapa. Nenhuma destas referências, isoladamente, demonstra que o mecanismo deixou de ocorrer. Para cada ação, regista proprietário, artefacto, condições de verificação, resultado esperado e evidência obtida. Se a equipa ainda não reproduziu a fuga nem mediu retenção, escreve eficácia pendente e identifica o próximo ensaio. No postmortem, separa factos observados, hipóteses e decisões. Esta estrutura permite corrigir uma explicação sem apagar os acontecimentos. Quando outra aplicação usa a mesma biblioteca, verifica versão e caminho de cancelamento antes de generalizar a correção. Partilhar um documento é uma ação de aprendizagem; não confirma eficácia em todos os consumidores.

Definir a observação que permite decidir

Zero falhas em zero execuções não tem taxa definida; zero em cem execuções produz uma taxa observada de zero, limitada às condições exercitadas. A aceitação deve incluir a exposição relevante, o resultado de negócio e integridade, além dos códigos HTTP. Um canário pode responder 200 e duplicar movimentos, pelo que transporte e efeito precisam de critérios distintos. Antes da passagem ao RUN, acorda que sinais serão acompanhados, quem reconcilia desconhecidos e quando a eficácia será revista. Se a janela terminar antes de exposição suficiente, apresenta o que foi observado e a lacuna remanescente. Recuperação operacional, encerramento administrativo e causa eliminada são afirmações com evidências diferentes; não as fundas para cumprir uma data de comité.

python3 content/labs/problem-evidence/run.py
# broken, 50 attempts: 50 success, 0 failed, 5 retained
# broken, 500 attempts: 100 success, 400 failed, 10 retained
# repaired, 500 attempts: 500 success, 0 failed, 0 retained
# Scope: sequential counter model; no vendor runtime executed.
NA PRÁTICA

O fornecedor entrega uma correção de cliente antes de um batch prolongado. A equipa prepara uma comparação autorizada dos caminhos de erro, observa recursos retidos e separa entrega do patch de eficácia demonstrada.

Armadilhas comuns

Aceitar um ensaio que também passa no código defeituoso, chamar correção a um reset, confundir commit com eficácia ou apresentar um modelo sequencial como validação do middleware real.

Tópicos relacionados: Change Management · Middleware · Application Production Support

Leva esta ideia contigo

A cadeia de verificação liga condições, mecanismo, alteração e resultado. Um serviço recuperado pode continuar a exigir investigação e uma decisão explícita sobre risco residual.

Criar conta

Referência: Conduct post-incident analysis · Problem management practices 2026-09; ServiceNow Brazil examples with scoped plugins and properties