☕ Um Café no Bellacosa Mainframe
Gostou do conteúdo? Ajude a manter o café quente, o COBOL compilando e o mainframe acordado. 😄
☕ Pague um café ao Bellacosa

Translate

Mostrar mensagens com a etiqueta Post-mortem. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Post-mortem. Mostrar todas as mensagens

sábado, 13 de março de 2010

Hindsight Bias: Doctor Who, COBOL e o Dia em que Todo Mundo Sabia Depois que Aconteceu

Bellacosa Mainframe e o hindisight bias

☕ Um Café no Bellacosa Mainframe

Hindsight Bias: Doctor Who, COBOL e o Dia em que Todo Mundo Sabia Depois que Aconteceu

Uma viagem pela TARDIS dos incidentes para entender por que o passado parece tão óbvio quando já conhecemos o final

14:32.

Produção parada.

Chamados chegando.

Gerente perguntando por previsão.

Operador olhando o console.

Programador olhando o operador.

DBA olhando o programador.

Todo mundo olhando o relógio.

E, como ocorre em qualquer incidente de respeitável pedigree corporativo, surge alguém que não participou das decisões anteriores e pronuncia a frase:

— Mas isso era óbvio.

Silêncio.

Uma frase simples.

Elegante.

Perigosa.

O programador COBOL iniciante olha para o colega.

— Era mesmo?

O colega dá de ombros.

— Agora parece.

VWORP.

VWORP.

VWORP.

A TARDIS surge discretamente no corredor.

A porta abre.

O Doctor sai, observa os gráficos, vê a linha vermelha atravessando a tela e pergunta:

— Quando vocês perceberam que isso iria acontecer?

Um gerente responde:

— Estava claro desde o começo.

O Doctor ergue uma sobrancelha.

— Interessante.

Olha para o relatório da manhã.

— Porque às oito horas ninguém parecia achar tão claro assim.

Eis nosso monstro da semana.


Hindsight Bias

Ou:

Viés Retrospectivo

O estranho fenômeno pelo qual o passado parece inevitável depois que já sabemos como ele terminou.


🌀 Antes de viajar, precisamos rever os dois episódios anteriores

Nossa TARDIS dos incidentes já passou por dois lugares importantes.

No primeiro episódio conhecemos o Swiss Cheese Model.

Aprendemos que sistemas complexos possuem várias barreiras.

Cada barreira possui falhas.

O desastre aparece quando os buracos se alinham.

Depois estudamos a Normalization of Deviance.

Descobrimos que organizações podem se acostumar a pequenos desvios.

Uma anomalia aparece.

Nada acontece.

Repete.

Nada acontece novamente.

Então o desvio deixa de parecer perigoso.

Agora chegamos a um terceiro problema.

Depois que o acidente acontece, nós olhamos para trás e pensamos:

“Como ninguém percebeu?”

Essa pergunta parece inteligente.

Às vezes é.

Mas frequentemente carrega uma armadilha cognitiva gigantesca.

Porque agora conhecemos o final.

As pessoas de antes não conheciam.


🧠 O que é Hindsight Bias?

Hindsight Bias é o viés cognitivo pelo qual, depois de conhecer um resultado, tendemos a acreditar que aquele resultado era mais previsível do que realmente era antes de acontecer.

Em português podemos encontrar expressões como:

  • viés retrospectivo;

  • viés de retrospectiva;

  • efeito “eu já sabia”;

  • fenômeno do “sabia que isso ia acontecer”.

A essência é:

ANTES:
“Existem várias possibilidades.”

DEPOIS:
“Era óbvio que terminaria assim.”

O conhecimento do resultado altera nossa memória sobre o que parecia provável anteriormente.

Isso é profundamente importante em investigação de incidentes.

Porque uma análise contaminada por hindsight bias pode transformar decisões razoáveis, tomadas com informação incompleta, em erros aparentemente absurdos.


🕰️ A TARDIS possui uma vantagem injusta

Imagine que o Doctor viaje para ontem.

Ele sabe que às 14:32 o sistema cairá.

Então, às 09:17, vê:

WARNING XYZ456

Para ele aquilo é imediatamente importante.

Por quê?

Porque ele conhece o futuro.

Mas o operador de ontem não conhece.

Para o operador, aquele warning pode estar entre outros cinquenta.

Talvez já tenha aparecido antes.

Talvez outros indicadores estejam normais.

Talvez haja um chamado prioritário em andamento.

Talvez não exista nenhuma ligação aparente entre aquele aviso e o incidente futuro.

Quem investiga depois possui uma vantagem extraordinária:

sabe quais pistas eram importantes.

Quem estava vivendo o evento não sabia.

Essa diferença muda tudo.


🔍 O famoso “era óbvio”

Vamos construir um incidente fictício.

09:10 — tempo de resposta aumenta 5%.

09:40 — uma fila cresce discretamente.

10:05 — operador recebe warning.

10:30 — job termina RC=04.

11:15 — volume volta ao normal.

12:20 — nova degradação.

13:50 — transações começam a falhar.

14:32 — indisponibilidade geral.

Depois do incidente, montamos a timeline.

Tudo fica maravilhoso.

A sequência parece quase cinematográfica.

09:10
   ↓
09:40
   ↓
10:05
   ↓
10:30
   ↓
12:20
   ↓
13:50
   ↓
14:32

E alguém diz:

— Está vendo? Os sinais estavam todos lá.

Sim.

Estavam.

Mas existe uma pergunta crucial:

Eles pareciam ligados naquele momento?

Talvez não.


🎯 O problema da seta vermelha

Existe uma ferramenta extremamente perigosa em post-mortems.

A seta.

Depois do evento fazemos:

WARNING
   ↓
FILA CRESCEU
   ↓
JOB LENTO
   ↓
ERRO
   ↓
INCIDENTE

Perfeito.

Só existe um problema.

Na vida real talvez houvesse cinquenta eventos simultâneos:

WARNING A
WARNING B
CPU NORMAL
REDE NORMAL
JOB X LENTO
JOB Y NORMAL
USUÁRIO RECLAMOU
USUÁRIO PAROU DE RECLAMAR
FILA CRESCEU
FILA DIMINUIU
RC=04
RC=00
ALERTA DE STORAGE
CHAMADO DE SENHA
DEPLOY EM OUTRO SISTEMA
...

Depois que sabemos o final, escolhemos os cinco eventos certos.

Criamos uma narrativa elegante.

Mas o operador real estava olhando para o caos completo.


☕ Bellacosa Mainframe e o poder enganoso do RC=04

Voltemos ao nosso velho amigo:

JOB04217 ENDED - RC=0004

Depois que descobrimos que o incidente estava ligado àquela condição, parece natural dizer:

— Era só investigar o RC=04.

Mas lembre-se do episódio anterior.

Talvez aquele RC=04 aparecesse havia meses.

Talvez centenas de vezes sem consequência.

Então o raciocínio do operador era:

RC=04 conhecido
+
nenhum efeito anterior
=
provavelmente baixo risco

Depois do incidente, nosso raciocínio muda:

RC=04
+
incidente conhecido
=
obviamente perigoso

Veja como o resultado altera a interpretação.


🧩 O quebra-cabeça depois de montado

Hindsight bias é parecido com olhar para um quebra-cabeça pronto e dizer:

— Era evidente onde cada peça deveria ficar.

Claro.

Você está olhando para a imagem completa.

Experimente receber 2.000 peças sem caixa.

Essa é a realidade operacional.


👨‍💻 Um exemplo COBOL

Imagine este código:

IF WS-STATUS = 'A'
    PERFORM PROCESSA-CONTA
ELSE
    PERFORM TRATA-EXCECAO
END-IF.

Meses depois ocorre um incidente porque apareceu:

WS-STATUS = SPACE

Após investigar, alguém comenta:

— Era óbvio que deveriam testar SPACE.

Agora parece.

Mas quando o programa foi desenvolvido talvez os requisitos dissessem:

STATUS:
A = ativo
I = inativo

Nenhum documento mencionava SPACE.

Nenhum arquivo de teste possuía SPACE.

Nenhuma interface deveria produzir SPACE.

Então precisamos perguntar:

com o conhecimento disponível naquele momento, era realmente óbvio?

Talvez sim.

Talvez não.

Essa distinção importa.


⚖️ Hindsight Bias não é desculpa para qualquer coisa

Aqui precisamos ser cuidadosos.

Evitar hindsight bias não significa dizer:

“Ninguém poderia saber de nada.”

Existem situações previsíveis.

Existem alertas claros.

Existem controles ignorados conscientemente.

Existem negligência e violação.

A ideia é outra:

julgar decisões usando as informações disponíveis quando foram tomadas, e não apenas o conhecimento adquirido depois do desastre.

Essa é uma das bases de uma investigação justa.


🧠 Outcome Bias: o primo perigoso

Existe um viés relacionado chamado outcome bias.

Ele acontece quando avaliamos a qualidade de uma decisão principalmente pelo resultado.

Imagine dois operadores.

Operador A toma uma decisão arriscada.

Nada acontece.

Resultado:

— Excelente.

Operador B toma exatamente a mesma decisão uma semana depois.

Sistema cai.

Resultado:

— Irresponsável.

Mas a decisão foi a mesma.

O resultado diferente não deveria alterar completamente nossa avaliação do processo decisório.

Isso conecta perfeitamente com a Normalization of Deviance.

Uma decisão arriscada que “funciona” repetidamente pode ganhar reputação de boa prática.

Até falhar.


🎲 Sorte mascarada de competência

Imagine:

deploy sem rollback testado.

Primeira vez funciona.

Segunda também.

Décima também.

Equipe conclui:

nosso processo funciona.

Talvez funcione.

Ou talvez tenhamos tido sorte dez vezes.

Na décima primeira ocorre problema.

Depois:

— Era irresponsável fazer deploy sem rollback.

Sim.

Mas então por que os dez deploys anteriores foram comemorados?

Esse contraste revela outcome bias.


🚀 Challenger novamente entra na TARDIS

Eventos como Challenger são frequentemente estudados justamente porque mostram como é fácil, depois do desastre, olhar sinais anteriores e julgá-los como obviamente precursores.

Mas quem estava tomando decisões naquele momento trabalhava dentro de uma estrutura de informação, pressões, experiências anteriores, modelos mentais e expectativas específicas.

Isso não absolve decisões ruins.

Mas melhora a qualidade da investigação.

Uma pergunta poderosa é:

O que fazia sentido para essas pessoas naquele momento?

Se compreendermos isso, conseguimos alterar o sistema.

Se apenas dissermos:

“Eles deveriam ter percebido.”

aprendemos muito pouco.


🧀 Swiss Cheese + Normalization + Hindsight

Agora nossos três episódios começam a se encaixar.

Episódio 1 — Swiss Cheese

Existem várias barreiras imperfeitas.

Episódio 2 — Normalization of Deviance

Alguns buracos passam a ser tolerados porque nunca produziram desastre.

Episódio 3 — Hindsight Bias

Depois que os buracos finalmente se alinham, parece óbvio que o acidente aconteceria.

Temos então uma ironia extraordinária:

ANTES DO INCIDENTE:
“Isso sempre acontece. Está tudo bem.”

DEPOIS DO INCIDENTE:
“Era óbvio que isso era perigoso.”

A mesma organização pode dizer as duas frases.

Com poucas horas de diferença.


👻 Easter Egg nº 1 — Spoilers

Em Doctor Who existe uma palavra perfeita para explicar hindsight bias:

Spoilers.

Imagine River Song analisando um incidente.

Ela possui o diário.

Sabe o que acontecerá.

Naturalmente tudo parecerá muito mais previsível.

Mas o operador não possuía o diário.

Essa talvez seja a melhor metáfora da nossa série.

Um investigador pós-incidente possui spoilers.

Quem estava na operação não.


🔎 Como investigar sem cair no Hindsight Bias

Agora vamos transformar tudo isso em prática.

Passo 1 — Congele o conhecimento no tempo

Durante a reconstrução, pergunte:

O que essa pessoa sabia exatamente às 09:17?

Não use informações descobertas às 15:00.

Se a causa raiz só foi conhecida depois, ela não pode ser usada para julgar uma decisão anterior como se já estivesse disponível.

Isso parece simples.

Na prática é difícil.


🕰️ Passo 2 — Construa uma timeline cognitiva

Não registre apenas eventos técnicos.

Registre conhecimento.

Exemplo:

09:10
CPU sobe 5%.

Informação conhecida:
ainda dentro do baseline.
09:40
Fila aumenta.

Informação conhecida:
picos semelhantes ocorreram anteriormente.
10:05
Warning XYZ.

Informação conhecida:
warning havia ocorrido 47 vezes sem impacto.
13:50
Primeiras falhas.

Informação conhecida:
agora existe correlação clara.

Isso é muito mais rico que uma simples linha do tempo.


🧠 Passo 3 — Pergunte pelas hipóteses concorrentes

Hoje sabemos:

storage causou o incidente.

Mas às 11:00 talvez existissem cinco hipóteses:

rede;

aplicação;

Db2;

storage;

volume inesperado.

Investigar hindsight bias significa preservar essas possibilidades.

Não finja que existia apenas uma.


📊 Passo 4 — Reconstrua o dashboard original

Excelente exercício.

Não mostre ao investigador apenas o gráfico onde a causa aparece.

Mostre exatamente o que o operador via.

Se havia 20 painéis, mostre 20.

Se existiam 300 alertas, considere isso.

Talvez a verdadeira causa seja:

sinal importante enterrado em ruído.

Isso é uma descoberta operacional valiosa.


👥 Passo 5 — Entrevistas sem acusação

Evite perguntas como:

“Por que você ignorou esse alerta?”

A palavra “ignorou” já contém julgamento.

Prefira:

“O que esse alerta significava para você naquele momento?”

Outra:

“Que outras informações você estava considerando?”

Outra:

“O que você esperava que acontecesse?”

Essas perguntas revelam modelo mental.

E modelos mentais são ouro em investigação de incidentes.


🧩 Passo 6 — Pergunte o que parecia normal

Isso conecta com nossa Normalization of Deviance.

Esse comportamento já havia acontecido?

Qual era a consequência histórica?

A equipe tinha motivos para considerá-lo benigno?

Talvez você descubra que o operador não negligenciou um warning.

Ele reagiu exatamente como a organização o treinou informalmente a reagir.

Essa diferença é gigantesca.


🚨 Passo 7 — Procure os sinais que eram realmente discriminantes

Nem todo sinal anterior era útil.

Depois do incidente conseguimos encontrar dezenas de anomalias.

Mas quais poderiam realisticamente indicar aquele problema?

Isso evita criar controles para qualquer variação imaginável.

Caso contrário, o resultado será:

mais alertas.

Mais ruído.

Mais alarm fatigue.

E, ironicamente, menos segurança.


🛠️ Passo 8 — Melhore o sistema, não apenas a memória das pessoas

Depois de um incidente ouvimos:

“Da próxima vez todos saberão.”

Talvez.

Por seis meses.

Depois as pessoas mudam.

Documentação envelhece.

Novos funcionários chegam.

Se o aprendizado depende exclusivamente de memória humana, não é robusto.

Transforme aprendizado em:

alertas melhores;

limites claros;

automação;

validação;

runbooks;

testes;

guardrails;

observabilidade;

design.


🔁 Passo 9 — Teste a correção contra o próximo incidente, não o anterior

Esse ponto é fantástico.

Depois de um desastre, organizações podem construir uma defesa extremamente específica contra exatamente o que aconteceu.

Exemplo:

incidente ocorreu porque arquivo veio com data 00000000.

Correção:

IF WS-DATA = ZERO
    ...
END-IF.

Ótimo.

Mas amanhã chega:

99999999

Ou:

20261345

A lição deveria ser:

validar datas.

Não apenas:

bloquear zeros.

Aprenda o padrão, não somente o caso.


🧪 Passo 10 — Faça pre-mortem

Existe uma técnica extraordinariamente útil chamada pre-mortem.

Antes de uma mudança importante, imagine:

“Estamos seis horas no futuro. O deploy falhou de forma espetacular. Por quê?”

Agora peça para a equipe listar possibilidades.

Isso reduz parte do efeito de excesso de confiança.

Exemplo:

Deploy falhou porque:
- volume real era maior;
- rollback não funcionou;
- dependência externa mudou;
- dataset encheu;
- certificado expirou;
- parâmetro errado foi promovido;
- tabela ficou bloqueada.

Você está usando imaginação preventiva.

Quase uma TARDIS sem TARDIS.


🕵️ O iniciante COBOL pode ser extremamente valioso

Existe uma vantagem curiosa em ser iniciante.

Você ainda faz perguntas.

Veterano:

— Sempre termina RC=04.

Iniciante:

— Por quê?

Veterano:

— Porque sempre termina.

Iniciante:

— Sim, mas por quê?

Essa segunda pergunta pode salvar produção.

Não confunda experiência com infalibilidade.

E não confunda ingenuidade com inutilidade.

Às vezes quem chegou ontem consegue enxergar uma suposição invisível para quem está há vinte anos no ambiente.


☕ A pergunta Bellacosa

Quando alguém disser:

“Era óbvio.”

Pergunte:

“Era óbvio antes ou ficou óbvio depois?”

Essa pergunta deveria entrar em todo post-mortem.

Porque obriga o grupo a separar:

previsibilidade real;

conhecimento retrospectivo.


📚 Curiosidade: nossos cérebros reescrevem narrativas

Seres humanos gostam de histórias coerentes.

Depois de saber o resultado, reorganizamos eventos anteriores em uma narrativa que faça sentido.

O problema é que sistemas complexos não acontecem como romances policiais.

A realidade possui:

ruído;

informação incompleta;

dados contraditórios;

decisões simultâneas;

prioridades conflitantes.

O post-mortem, entretanto, tende a transformar tudo em uma linha elegante.

Cuidado com narrativas elegantes demais.

A realidade costuma ser mais bagunçada.


🕸️ Sistemas complexos possuem muitos futuros possíveis

Às 09:00 talvez existissem vários futuros:

A → sistema normaliza sozinho
B → operador corrige
C → alerta desaparece
D → degradação continua
E → incidente grave

Depois que E acontece, nossa mente tende a apagar A, B, C e D.

Parece que E sempre foi destino.

Não era.

Era uma possibilidade.

Essa distinção é fundamental para entender risco.


🎯 Previsão não é retrospectiva

Existe uma diferença enorme entre dizer:

“Eu teria previsto.”

e realmente possuir uma previsão registrada antes.

Quer testar?

Antes de uma mudança, escreva riscos.

Depois compare.

Você descobrirá algo humilhante e maravilhoso:

somos muito menos profetas do que imaginamos.


📝 Diário de previsões

Uma técnica interessante para equipes maduras:

antes de grandes mudanças, registre:

  • riscos esperados;

  • sinais esperados;

  • probabilidades;

  • pontos de rollback;

  • critérios de abortar.

Depois do evento, compare.

Isso reduz a ilusão:

“Nós sabíamos.”

Se sabíamos, deveria existir algum registro.


👽 Easter Egg nº 2 — O Dalek pós-mortem

Imagine um Dalek participando do post-mortem.

Provavelmente sua análise seria:

EXTERMINATE!
EXTERMINATE!
OPERATOR ERROR!
EXTERMINATE!

Muito eficiente.

Pouquíssimo aprendizado.

Infelizmente, algumas organizações fazem algo semelhante.

Apenas com PowerPoint.


⚖️ Blameless Post-Mortem novamente

Nossa série está construindo uma filosofia.

Blameless não significa:

ninguém erra.

Significa:

queremos compreender por que a decisão parecia razoável naquele contexto.

Se encontramos dolo ou negligência grave, tratamos.

Mas se encontramos uma pessoa agindo de acordo com incentivos, ferramentas e conhecimento disponíveis, precisamos melhorar o sistema.

Caso contrário trocamos a pessoa.

E preservamos o incidente.


🧯 A diferença entre causa e gatilho

Muitos post-mortems confundem essas coisas.

Exemplo:

Comando errado
   ↓
incidente

Comando errado foi o gatilho.

Mas talvez existissem:

permissão excessiva;

interface confusa;

ausência de dupla confirmação;

pressão;

procedimento incompleto;

falta de rollback;

ambiente parecido com homologação.

A pergunta útil não é apenas:

Quem puxou o gatilho?

É:

Por que havia uma arma carregada apontada para produção?


🧠 Hindsight Bias na gestão

Imagine um projeto.

Equipe alerta:

Existe 20% de risco de atraso.

Projeto atrasa.

Diretor:

— Eu sabia que atrasaria.

Talvez.

Mas se terminasse no prazo, provavelmente ninguém diria:

— Eu sabia que havia 20% de risco.

Probabilidade desaparece depois do resultado.

Isso acontece em:

projetos;

segurança;

finanças;

medicina;

engenharia;

operações.

Nosso cérebro prefere certezas retrospectivas.


🔍 Como detectar Hindsight Bias numa reunião

Escute estas frases:

“Era óbvio.”

“Qualquer um perceberia.”

“Isso inevitavelmente aconteceria.”

“Como ninguém viu?”

“Eu sempre disse.”

“Bastava olhar.”

Pare.

Pergunte:

Qual informação estava disponível antes?

Depois:

Quem realmente identificou isso antes?

Depois:

Essa preocupação estava registrada?

Agora começamos a separar percepção real de memória reconstruída.


🧬 Regeneração organizacional

No final de cada episódio nossa organização precisa regenerar.

No caso do Hindsight Bias, regeneração significa mudar a pergunta.

Em vez de:

“Quem deveria ter sabido?”

pergunte:

“Como podemos tornar esse risco mais perceptível no futuro?”

Em vez de:

“Por que ele não viu?”

pergunte:

“Como a informação estava apresentada?”

Em vez de:

“Era óbvio.”

pergunte:

“O que tornaria isso óbvio antes?”

Essa última pergunta é maravilhosa.

Porque transforma julgamento em engenharia.


📓 Diário do Doctor

Se você lembrar apenas algumas coisas desta viagem, guarde estas:

Hindsight Bias faz o passado parecer mais previsível depois que conhecemos o resultado.

Investigadores possuem spoilers; operadores não.

Uma timeline pós-incidente pode criar uma narrativa muito mais clara do que a realidade original.

Decisões precisam ser avaliadas usando informações disponíveis naquele momento.

Resultado ruim não significa automaticamente decisão ruim.

Resultado bom não significa automaticamente decisão boa.

Pergunte quais hipóteses concorrentes existiam.

Reconstrua o que a pessoa realmente via.

Evite transformar “erro humano” em ponto final.

Transforme conhecimento retrospectivo em melhores mecanismos futuros.

E, principalmente:

Nunca confunda “agora eu entendo” com “antes era óbvio”.


🕰️ De volta às 08:17

O Doctor entra na TARDIS.

Nosso programador COBOL o acompanha.

— Podemos voltar para antes do incidente?

— Claro.

VWORP.

VWORP.

VWORP.

08:17.

Console normal.

Produção funcionando.

Na tela:

WARNING XYZ456

O programador aponta.

— Está ali!

— Sim.

— Então era óbvio!

O Doctor aponta para outra tela.

WARNING ABC122
WARNING TYU991
RC=04
QUEUE +3%
CPU +2%
STORAGE NORMAL
NETWORK NORMAL

Depois outra.

Mais dezenas de mensagens.

Chamados.

Emails.

Mudanças.

Processamentos.

O jovem fica quieto.

O Doctor pergunta:

— Ainda parece óbvio?

— Menos.

— Excelente.

— Então ninguém poderia perceber?

— Não foi isso que eu disse.

O Doctor sorri.

— Nossa tarefa é descobrir o que teria tornado aquela pista distinguível das outras.

Eles voltam para a TARDIS.

Antes de fechar a porta, o Doctor olha novamente para o console.

— Ah, e mais uma coisa.

— O quê?

— Cuidado com qualquer post-mortem em que tudo pareça fazer sentido demais.

A porta fecha.

VWORP.

VWORP.

VWORP.


🥚 Easter Egg final

Horas depois, nosso programador abre um dataset antigo chamado:

BELLACOSA.INCIDENTS.TIMELORD

Dentro existe apenas:

IF YOU ALREADY KNOW THE END
    EVERYTHING LOOKS OBVIOUS
END-IF.

Ele procura quem criou o membro.

O RACF mostra:

USERID: RSONG

Estranho.

A conta não existe há anos.

No comentário final existe apenas:

* SPOILERS.

O telefone toca.

É produção.

Outro alerta apareceu.

Nosso jovem programador olha para ele.

Dessa vez não pergunta:

“Isso vai causar incidente?”

Pergunta algo muito melhor:

“O que sabemos agora, sem usar o futuro para completar a história?”

E talvez seja assim que profissionais começam realmente a aprender com falhas.

Não tentando provar que poderiam prever o passado.

Mas construindo sistemas capazes de perceber melhor o futuro.

☕🌀

Next stop: Confirmation Bias — quando começamos a investigação procurando evidências de que nossa primeira teoria estava certa… e ignoramos educadamente todo o resto.


sábado, 2 de janeiro de 2010

O Incidente do Queijo Suíço: Doctor Who, COBOL e o Dia em que Todos os Buracos se Alinharam

Bellacosa Mainframe e o incidente do queijo suico

☕ Um Café no Bellacosa Mainframe

O Incidente do Queijo Suíço: Doctor Who, COBOL e o Dia em que Todos os Buracos se Alinharam

Uma viagem pela TARDIS dos incidentes para entender por que sistemas seguros também falham

Imagine a seguinte manhã.

08:02.

Você chega ao trabalho.

Café na mesa.

TSO aberto.

ISPF funcionando.

Nenhum chamado desesperado.

Nenhum gerente perguntando por que a produção está parada.

Nenhum telefone tocando com aquela frase que todo analista veterano aprendeu a temer:

— Você mexeu em alguma coisa ontem?

Uma manhã perfeita.

Naturalmente, isso significa que alguma coisa terrível está prestes a acontecer.

Às 08:17, um pequeno alerta aparece no monitoramento.

Nada grave.

Às 08:22, outro.

Também aparentemente irrelevante.

Às 08:41, um job termina com RC=04.

Alguém olha.

— RC=04 não é erro.

Tecnicamente, a pessoa está correta.

O que, em informática, às vezes é uma maneira particularmente eficiente de estar completamente errada.

Às 09:06, uma fila começa a crescer.

Às 09:35, um batch demora sete minutos a mais que o normal.

Às 10:12, um operador executa um procedimento alternativo que já havia sido usado outras vezes.

Às 10:46, uma aplicação recebe dados incompletos.

Às 11:03, a primeira reclamação chega.

Às 11:11, cinquenta reclamações.

Às 11:27, alguém pronuncia a palavra que transforma adultos perfeitamente civilizados em personagens de filme-catástrofe:

produção.

E então, em algum lugar do universo, ouvimos o som característico da TARDIS.

VWORP.

VWORP.

VWORP.

Aquela velha cabine policial azul pousa discretamente ao lado de um IBM Z.

A porta se abre.

O Doctor olha para os consoles.

Olha para os operadores.

Olha novamente para os consoles.

E provavelmente diz:

— Fascinante.

Pausa.

— Vocês têm café?

Porque hoje não estamos procurando simplesmente quem errou.

Estamos procurando algo muito mais interessante:

como diversas pequenas falhas conseguiram se alinhar e atravessar todas as defesas do sistema.

Bem-vindo ao Swiss Cheese Model.



🧀 Afinal, o que queijo suíço tem a ver com incidentes?

O chamado Swiss Cheese Model, ou Modelo do Queijo Suíço, foi desenvolvido e popularizado pelo psicólogo britânico James Reason no estudo de erros humanos, acidentes e segurança de sistemas complexos.

A ideia central é brilhantemente simples.

Imagine que uma organização possua várias barreiras destinadas a impedir que alguma coisa ruim aconteça.

Por exemplo:

  • procedimentos;

  • treinamento;

  • validações;

  • testes;

  • segregação de funções;

  • revisão de código;

  • monitoramento;

  • autorização;

  • redundância;

  • backups;

  • controles automáticos.

Cada uma dessas barreiras seria uma fatia de queijo suíço.

O problema?

Nenhuma fatia é perfeita.

Cada uma possui buracos.

Esses buracos representam fragilidades.

Uma pessoa pode estar cansada.

Um procedimento pode estar desatualizado.

Um teste pode não cobrir determinado cenário.

Um alerta pode ter sido configurado incorretamente.

Uma documentação pode ser ambígua.

Um sistema pode permitir determinada operação sem confirmação.

Uma decisão gerencial tomada seis meses atrás pode ter reduzido redundâncias.

Normalmente isso não produz um desastre.

Por quê?

Porque existe outra fatia depois.

E outra.

E outra.

Um operador erra, mas o sistema detecta.

O sistema não detecta, mas a revisão humana percebe.

A revisão não percebe, mas uma validação posterior bloqueia.

A validação falha, mas o monitoramento dispara.

E assim por diante.

O acidente aparece quando, temporariamente, os buracos das diferentes fatias ficam alinhados.

A ameaça atravessa todas as barreiras.

É como se alguém pudesse olhar através de cinco pedaços de queijo e enxergar perfeitamente o outro lado.

Nesse momento:

Houston, nós temos um problema.

Ou, para manter nossa viagem britânica:

Doctor, I think we have a problem.


🌀 A TARDIS pousa antes do incidente

Existe algo especialmente interessante no Swiss Cheese Model.

Ele nos obriga a viajar no tempo.

Quando investigamos um incidente da maneira tradicional, existe uma tendência natural de começar pelo último acontecimento.

O programa apagou o arquivo.

Quem executou?

João.

Caso encerrado.

João apagou o arquivo.

Treinamos João.

Mandamos um memorando dizendo:

“Tenham mais atenção ao apagar arquivos.”

Pronto.

Problema resolvido.

Até o próximo João.

O Swiss Cheese Model pergunta:

Por que João tinha capacidade de apagar aquele arquivo?

Outra pergunta:

Por que não havia confirmação?

Outra:

Por que não havia backup imediatamente recuperável?

Outra:

Por que o procedimento permitia aquela operação?

Outra:

Por que ninguém percebeu durante os testes que esse cenário era possível?

Outra:

Por que João estava realizando aquela atividade sob pressão às duas horas da manhã?

Outra:

Por que aquele trabalho precisava acontecer às duas horas da manhã?

Outra:

Quem decidiu isso?

Outra:

Quando essa decisão foi tomada?

Agora entramos na TARDIS.

Porque descobrimos que o incidente das 02:17 começou talvez seis meses antes.


🧀 Fatia número 1 — O programador COBOL

Vamos construir um exemplo.

Você é um programador COBOL iniciante.

Recebe uma alteração:

“Excluir registros temporários com mais de 90 dias.”

Programa simples.

Algo conceitualmente parecido com:

IF WS-DIAS > 90
    DELETE ARQUIVO
END-IF.

Você desenvolve.

Compila.

Testa.

Funciona.

Primeira fatia de queijo.

Mas existe um buraco.

A variável que calcula os dias eventualmente recebe uma data inválida.

Seu teste não cobre essa situação.

Ainda não aconteceu nada.


🧀 Fatia número 2 — Code Review

Outro desenvolvedor revisa seu código.

Ele verifica:

  • sintaxe;

  • nomes;

  • padrões;

  • fluxo;

  • chamadas;

  • tratamento de erros.

Tudo parece razoável.

A alteração é aprovada.

Segunda fatia.

Mas existe outro buraco.

O revisor também não percebe a condição envolvendo datas inválidas.

Dois buracos.

Ainda não estão alinhados necessariamente.


🧀 Fatia número 3 — Homologação

O programa vai para homologação.

Testam:

  • registro com 30 dias;

  • registro com 89;

  • registro com 90;

  • registro com 91;

  • registro com 180.

Perfeito.

Só que ninguém testa uma data zerada.

Ninguém testa 31 de fevereiro.

Ninguém testa um registro antigo migrado de outro sistema cujo campo possui um formato historicamente diferente.

Terceira fatia.

Terceiro buraco.

A ameaça continua avançando.


🧀 Fatia número 4 — Controle operacional

O programa entra em produção.

Existe uma previsão:

antes da exclusão definitiva, deveria ser produzido um relatório para conferência.

Excelente defesa.

Só existe um pequeno detalhe.

O volume cresceu muito nos últimos anos.

O relatório agora possui centenas de milhares de linhas.

Ninguém realmente o lê.

Ele existe.

É produzido.

É arquivado.

A auditoria pode verificar que o controle existe.

Todo mundo fica feliz.

Exceto o queijo.

Porque temos outro buraco.

Essa situação possui inclusive um nome extremamente importante no estudo de incidentes:

controle ritualístico.

Um mecanismo continua existindo formalmente, mas perdeu sua função prática.

O relatório nasceu para ser conferido.

Com o tempo virou:

“o relatório que precisamos gerar porque o procedimento manda.”

Isso acontece assustadoramente em ambientes corporativos.


🧀 Fatia número 5 — Backup

Mas tudo bem.

Temos backup.

A palavra mais reconfortante da informática.

Até alguém perguntar:

— Já testamos o restore?

Silêncio.

Um silêncio tão profundo que quase podemos ouvir a TARDIS estacionando.

Ter backup não significa necessariamente possuir capacidade de recuperação.

Existe uma diferença gigantesca entre:

backup realizado

e

restauração comprovadamente funcional dentro do tempo necessário.

Mais um buraco.


💥 Agora os buracos se alinham

Chega o dia.

Um conjunto de registros antigos possui datas inconsistentes.

O programa interpreta incorretamente.

A homologação nunca testou.

O code review não percebeu.

O relatório operacional é grande demais e ninguém verifica.

O job executa.

Os registros são apagados.

O backup existe.

Mas a restauração é lenta e nunca havia sido ensaiada adequadamente.

Pronto.

Incidente.

E agora surge a pergunta tradicional:

Quem escreveu o programa?

Nosso Doctor provavelmente levantaria uma sobrancelha.

Porque essa é uma pergunta extremamente conveniente.

Mas muito pobre.

O programador participou do incidente?

Sim.

Foi a causa?

Não exatamente.

Ele foi uma das fatias.


👨‍⚕️ James Reason e os dois tipos de falha

Aqui aparece uma das partes mais importantes dessa teoria.

Reason diferencia especialmente dois grupos de condições:

Falhas ativas

São erros próximos do evento.

Exemplos:

  • operador pressionou botão errado;

  • desenvolvedor criou condição incorreta;

  • administrador executou comando errado;

  • piloto selecionou opção equivocada;

  • enfermeiro administrou medicamento incorreto.

São extremamente visíveis.

Por isso recebem atenção.


🕰️ Condições latentes

Agora começam as coisas interessantes.

Condições latentes são fraquezas que podem permanecer escondidas durante semanas, meses ou anos.

Por exemplo:

  • treinamento insuficiente;

  • equipe reduzida;

  • documentação ruim;

  • arquitetura frágil;

  • alertas excessivos;

  • procedimento inadequado;

  • pressão por prazo;

  • interface confusa;

  • ausência de segregação;

  • manutenção atrasada;

  • testes incompletos;

  • metas conflitantes.

Essas condições ficam esperando.

Como Cybermen adormecidos em uma instalação esquecida.

Até surgir a combinação adequada.


🧠 O erro humano frequentemente é consequência, não origem

Essa ideia merece ser colocada em letras garrafais.

“Erro humano” não deveria encerrar uma investigação.

Deveria iniciá-la.

Quando alguém diz:

“O incidente aconteceu por erro humano.”

Nossa próxima pergunta deveria ser:

“Excelente. Agora podemos começar a investigação?”

Porque dizer que um humano errou explica aproximadamente tanto quanto dizer que um avião caiu porque deixou de voar.

Precisamos descobrir por quê.

A pessoa estava cansada?

A interface induzia ao erro?

Havia duas opções visualmente idênticas?

O procedimento estava errado?

Existia pressão para terminar rapidamente?

Era normal ignorar aquele alarme?

A pessoa havia sido treinada?

O sistema permitia desfazer?

A ação exigia dupla autorização?

Quanto mais investigamos, mais descobrimos que aquilo que chamamos de “erro humano” frequentemente é a manifestação visível de problemas sistêmicos.


🚨 Os pequenos sinais antes da invasão

Uma das missões de nossa série será procurar weak signals, os sinais fracos.

Antes do grande incidente, normalmente existem pequenas pistas.

Imagine:

segunda-feira:

RC=04.

terça:

job demorou dez minutos a mais.

quarta:

um operador precisou reiniciar manualmente.

quinta:

duas reclamações.

sexta:

um arquivo ficou próximo de 90% de utilização.

Individualmente, parecem pequenas coisas.

Em conjunto podem formar uma narrativa.

É aqui que observabilidade e cultura operacional tornam-se fundamentais.

Não basta perguntar:

“O sistema está funcionando?”

Precisamos perguntar:

“O sistema está se comportando como normalmente se comporta?”

São perguntas muito diferentes.


📊 Baseline: conheça o normal antes de procurar o anormal

Imagine um batch que normalmente processa dez milhões de registros em 45 minutos.

Hoje levou 47.

Normal.

Amanhã 48.

Normal.

Depois 51.

Hmm.

Depois 56.

Ainda funciona.

Depois 63.

Continua RC=00.

Depois 81.

RC=00 novamente.

Tudo verde.

Mas existe uma tendência.

Um iniciante frequentemente procura ABEND.

Um profissional experiente procura mudança de comportamento.

Esse é um conhecimento importantíssimo para quem entra no mainframe.

RC=00 significa apenas que determinado programa terminou segundo critérios que foram definidos como sucesso.

Não significa:

“Todo o universo está em perfeita harmonia.”


🧀 Não existe queijo perfeito

Talvez você pense:

“Então precisamos eliminar todos os buracos.”

Seria ótimo.

Também seria ótimo possuir uma TARDIS.

Na engenharia real, sistemas possuem limitações.

Pessoas possuem limitações.

Processos possuem limitações.

Recursos são finitos.

Não existe segurança absoluta.

A estratégia é criar defesa em profundidade.

Se uma barreira falhar, outra deverá impedir a propagação.

Essa filosofia aparece em:

  • segurança cibernética;

  • aviação;

  • medicina;

  • energia nuclear;

  • sistemas financeiros;

  • engenharia industrial;

  • mainframes.

Nunca confie exclusivamente em uma única proteção.


🏦 Exemplo Bellacosa Mainframe: transferência bancária

Imagine uma transferência de R$ 10 milhões.

Seria pouco prudente possuir apenas:

EXEC CICS
     TRANSFER MONEY
END-EXEC

e torcer pelo melhor.

Em um sistema sério existirão diversas barreiras:

autenticação;

autorização;

limite transacional;

validação da conta;

saldo;

controle antifraude;

segregação de funções;

confirmação;

log;

monitoramento;

reconciliação;

auditoria.

Cada uma é uma fatia do queijo.

Uma pode falhar.

Talvez duas.

O objetivo é impedir que todas falhem simultaneamente.


🛠️ Como aplicar o Swiss Cheese Model em um incidente

Agora vamos transformar teoria em método.

Imagine que ocorreu um incidente ontem.

Não comece procurando culpados.

Pegue café.

Abra um quadro.

E faça o seguinte.

Passo 1 — Defina o evento

Escreva claramente o que aconteceu.

Evite:

“O sistema deu problema.”

Prefira:

“Entre 14:03 e 14:47, transações do canal X foram processadas duas vezes.”

Precisão importa.


Passo 2 — Construa uma timeline

14:00 — deploy.

14:03 — primeiro erro.

14:04 — alerta.

14:09 — operador reconhece alerta.

14:16 — chamados aparecem.

14:22 — equipe de aplicação acionada.

14:31 — processamento interrompido.

14:47 — serviço estabilizado.

Timeline frequentemente revela coisas que narrativas escondem.


Passo 3 — Identifique as defesas esperadas

Pergunte:

O que deveria impedir isso?

Talvez:

  • teste automatizado;

  • revisão;

  • autorização;

  • monitoramento;

  • reconciliação;

  • rollback.

Cada mecanismo vira uma fatia.


Passo 4 — Descubra o buraco de cada fatia

Por que o teste não detectou?

Por que a revisão não detectou?

Por que o alerta não funcionou?

Por que o operador não percebeu?

Por que não houve rollback?

Não aceite:

“porque fulano esqueceu.”

Pergunte por que era possível esquecer.


🔍 Passo 5 — Procure condições latentes

Agora viaje meses para trás.

Houve corte de equipe?

Mudança organizacional?

Migração?

Novo fornecedor?

Pressão por entrega?

Acúmulo de dívida técnica?

Procedimento antigo?

Alertas demais?

Sistema sem manutenção?

Você ficará surpreso com quantos acidentes possuem raízes muito anteriores ao evento.


🧹 Passo 6 — Não corrija apenas o último buraco

Depois de um incidente causado por um comando incorreto, uma organização pode decidir:

“Treinaremos novamente os operadores.”

Ótimo.

Mas talvez também fosse necessário:

  • alterar a interface;

  • exigir confirmação;

  • restringir permissão;

  • registrar comando;

  • automatizar operação;

  • criar rollback;

  • melhorar documentação.

Treinamento sozinho frequentemente é a correção favorita porque é barata e transfere responsabilidade para pessoas.

Mas pessoas continuam sendo pessoas.

E continuarão errando.

Projetar sistemas seguros significa considerar essa realidade.


🔁 Passo 7 — Feche o loop

Aqui entramos no verdadeiro objetivo da nossa série:

melhoria contínua.

Incidente sem aprendizado é apenas sofrimento administrativo.

Depois do post-mortem, crie ações.

Cada ação precisa de:

responsável;

prazo;

prioridade;

evidência de conclusão;

validação posterior.

Caso contrário teremos um documento lindíssimo armazenado em algum SharePoint que ninguém jamais abrirá novamente.

Possivelmente ao lado de outros 847 post-mortems.

Todos chamados:

INCIDENT_FINAL_V2_FINAL_AGORA_VAI.docx


🪤 A grande armadilha: hindsight bias

Depois que sabemos o resultado, tudo parece óbvio.

“Como ninguém percebeu?”

Essa frase aparece depois de praticamente todos os grandes acidentes.

Mas existe um fenômeno chamado hindsight bias, o viés retrospectivo.

Nós conhecemos o final.

As pessoas naquele momento não conheciam.

Elas estavam tomando decisões com informações incompletas.

Por isso uma investigação justa pergunta:

“Com as informações disponíveis naquele instante, essa decisão parecia razoável?”

Essa pergunta muda tudo.


⚖️ Blameless não significa ausência de responsabilidade

Outra confusão comum.

Um post-mortem sem caça às bruxas não significa:

“ninguém é responsável por nada.”

Existem negligência, violações deliberadas e comportamentos imprudentes.

Eles precisam ser tratados.

Mas um ambiente que pune automaticamente qualquer erro cria outro problema:

as pessoas começam a esconder erros.

E sistemas complexos onde ninguém relata pequenos problemas são maravilhosos.

Até explodirem.


🛸 Doctor Who e o paradoxo da prevenção

Existe uma injustiça curiosa na segurança.

Quando você evita um incidente, aparentemente nada aconteceu.

Você detectou um problema.

Corrigiu.

Produção continuou.

No relatório executivo:

0 incidentes.

Alguém então pergunta:

— Por que gastamos tanto com essa equipe se nunca acontece nada?

Essa talvez seja uma das grandes ironias corporativas.

O sucesso da prevenção frequentemente parece evidência de que prevenção não era necessária.

O Doctor conhece bem esse problema.

Salva o universo.

Volta para a TARDIS.

E provavelmente ninguém aprovou sequer uma hora extra.


🧀 O queijo suíço aplicado à sua primeira semana como COBOL

Se você está começando agora, crie este hábito.

Ao escrever um programa, pergunte:

Se meu código estiver errado, o que impedirá o desastre?

Depois:

E se essa proteção também falhar?

Depois:

Existe outra?

Exemplo:

Programa gera arquivo.

Fatia 1: validação no programa.

Fatia 2: contagem de registros.

Fatia 3: totalizadores financeiros.

Fatia 4: comparação com histórico.

Fatia 5: validação antes da aplicação.

Fatia 6: possibilidade de rollback.

Agora você não está apenas programando.

Está pensando como engenheiro de confiabilidade.


🧪 Teste também o impossível

Uma das melhores lições para iniciantes:

testar apenas o caminho feliz é fácil.

Teste:

  • arquivo vazio;

  • arquivo duplicado;

  • número negativo;

  • campo inválido;

  • data impossível;

  • registro maior;

  • registro menor;

  • sequência incorreta;

  • arquivo inexistente;

  • disco cheio;

  • timeout;

  • retorno inesperado.

Pergunte constantemente:

“O que aconteceria se...?”

Essa pergunta talvez seja uma das ferramentas mais poderosas da engenharia.


👻 Easter Egg nº 1

Em Doctor Who existe uma regra quase universal:

se existe um corredor escuro onde claramente ninguém deveria entrar, alguém inevitavelmente entra.

Em TI existe uma versão semelhante:

se existe um parâmetro chamado:

BYPASS-VALIDATION=YES

alguém eventualmente usará.

Provavelmente numa sexta-feira.

Às 17:43.


🧯 Near Miss: quando o Dalek erra o tiro

Nem todo alinhamento de buracos termina em desastre.

Às vezes alguma defesa final salva o sistema.

Isso é um near miss.

Quase acidente.

E near misses são ouro.

Uma organização madura não comemora simplesmente:

“Ufa, não aconteceu nada.”

Ela pergunta:

“Por que quase aconteceu?”

Porque o universo acabou de oferecer uma investigação gratuita.

Sem clientes prejudicados.

Sem manchetes.

Sem diretor telefonando.

Estude seus near misses.

Eles são trailers dos incidentes futuros.


📚 Curiosidade: acidentes são bibliotecas

Existe um hábito poderoso para profissionais de tecnologia:

estudar acidentes de outras áreas.

Leia sobre:

aviação;

energia nuclear;

medicina;

ferrovias;

exploração espacial;

indústria química.

Por quê?

Porque tecnologias mudam.

Comportamentos sistêmicos, nem tanto.

Você começa a reconhecer padrões.

Pressão por prazo.

Alertas ignorados.

Redundância removida.

Normalização de desvios.

Comunicação falha.

Treinamento insuficiente.

Confiança excessiva na automação.

É quase assustador.

Troque cockpit por data center e certos relatórios parecem familiares.


🔄 Regeneração

E chegamos à palavra perfeita para nossa série.

No universo de Doctor Who, o Doctor não simplesmente morre.

Ele regenera.

Muda.

Aprende.

Continua.

Uma organização madura deveria fazer algo parecido depois de cada incidente.

Não restaurar simplesmente o estado anterior.

Mas perguntar:

como voltaremos melhores?

Esse é o objetivo da melhoria contínua.

Incidente.

Análise.

Aprendizado.

Mudança.

Validação.

Monitoramento.

Novo aprendizado.

Um loop.


🌀 A verdadeira mensagem do Swiss Cheese Model

Talvez o maior ensinamento seja abandonar a fantasia confortável de que acidentes possuem uma causa única.

Encontramos frequentemente diagramas assim:

João executou comando errado
        ↓
Sistema caiu

Simples.

Elegante.

Provavelmente incompleto.

A realidade costuma parecer mais assim:

pressão por prazo
        ↓
procedimento abreviado
        ↓
treinamento incompleto
        ↓
interface ambígua
        ↓
permissão excessiva
        ↓
comando incorreto
        ↓
alerta ignorado
        ↓
rollback indisponível
        ↓
INCIDENTE

Agora temos algo que pode realmente ser melhorado.


☕ Diário do Doctor

Se você guardar apenas algumas ideias desta nossa primeira viagem pela TARDIS dos incidentes, guarde estas:

Um acidente raramente nasce de uma única falha.

Existem diversas camadas de proteção.

Todas possuem fragilidades.

Incidentes surgem quando essas fragilidades se alinham.

O erro visível geralmente está próximo do fim da cadeia.

Condições latentes podem existir durante meses ou anos.

Erro humano deve iniciar perguntas, não encerrá-las.

Near misses precisam ser investigados.

Monitorar comportamento é tão importante quanto monitorar falhas.

Defesa em profundidade é melhor que confiar numa única proteção.

Post-mortems precisam produzir mudança verificável.

E talvez a mais importante:

não procure apenas quem estava segurando a chave de fenda quando a máquina explodiu. Descubra por que havia uma máquina capaz de explodir quando alguém segurasse aquela chave de fenda daquele jeito.


🧀 O último pedaço de queijo

Nosso programador COBOL iniciante fecha o notebook.

Olha para o velho mainframe.

Agora entende algo que talvez nenhum manual de sintaxe tenha explicado.

Programar não é apenas escrever instruções corretas.

É imaginar o que acontece quando alguma coisa estiver errada.

Porque estará.

Algum dia.

Em algum lugar.

Um campo virá inválido.

Um arquivo ficará cheio.

Uma rede cairá.

Uma pessoa ficará cansada.

Um procedimento estará desatualizado.

Um teste esquecerá um cenário.

Uma mensagem será interpretada incorretamente.

Não podemos eliminar completamente esses buracos.

Mas podemos evitar que se alinhem.

Lá fora ouvimos novamente:

VWORP.

VWORP.

VWORP.

A TARDIS começa a desaparecer.

O Doctor coloca a cabeça para fora da porta.

— Ah, mais uma coisa.

Olha para nosso jovem programador COBOL.

— RC=00?

O programador sorri.

— Sucesso.

O Doctor faz aquela expressão de quem acabou de encontrar algo terrivelmente interessante.

— Não. Apenas significa que o programa acredita que terminou bem.

Fecha a porta.

A TARDIS desaparece.

Na console chega uma mensagem:

JOB12345 ENDED - RC=0000

Tudo parece perfeito.

E é justamente por isso que resolvemos dar uma olhada nos logs.

Porque esta série está apenas começando.

Next stop: Normalization of Deviance.

Ou, como provavelmente diria algum operador veterano:

“Sempre fizemos desse jeito e nunca deu problema.”

Até o dia em que deu.

☕🌀


Vagner Renato Bellacosa, IBM Champion e especialista em IBM Mainframe
IBM Z17 SYSTEM ONLINE
Sobre o autor

Vagner Renato Bellacosa

IBM Champion 2026 • Especialista em IBM Mainframe

Vagner Renato Bellacosa trabalha com IBM Mainframe desde 1988 , é IBM Champion e especialista em COBOL, CICS, Db2, z/OS e IBM Z. Compartilha experiências profissionais, conhecimento técnico, história da computação e práticas do universo mainframe para aproximar novas gerações das tecnologias que sustentam empresas, bancos e governos ao redor do mundo.

IBM Champion IBM Z COBOL CICS Db2 z/OS Mainframe desde 1988
GitHub LinkedIn
Inicializando conteúdo...