☕ 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 Erro Humano. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Erro Humano. Mostrar todas as mensagens

segunda-feira, 9 de julho de 2012

Actor-Observer Bias: Doctor Who, COBOL e o Dia em que o Meu Erro Tinha Contexto — Mas o Seu Era Incompetência

 

Bellacosa Mainframe e o actor observer bias

☕ Um Café no Bellacosa Mainframe

Actor-Observer Bias: Doctor Who, COBOL e o Dia em que o Meu Erro Tinha Contexto — Mas o Seu Era Incompetência

Uma viagem pela TARDIS dos incidentes para entender por que explicamos nossos próprios erros pelas circunstâncias, mas os erros dos outros por personalidade, descuido ou falta de competência

03:16.

Madrugada.

War Room.

Café número cinco.

Produção degradada.

Na tela:

SEV-1

TRANSACTION FAILURE RATE: 18%
QUEUE DEPTH: 84.000
CUSTOMER IMPACT: HIGH

O DBA olha para o desenvolvedor.

— Quem fez o deploy?

— Minha equipe.

— Então começou depois da mudança de vocês?

— Sim, mas havia um problema de infraestrutura também.

O DBA cruza os braços.

— Sempre tem uma desculpa.

Nosso jovem programador COBOL observa.

Dez minutos depois descobrem uma query cara.

O DBA havia alterado uma configuração no dia anterior.

O desenvolvedor pergunta:

— Quem mexeu no parâmetro?

— Eu.

— Então foi erro seu?

O DBA reage imediatamente.

— Não é tão simples.

— Como assim?

— O volume cresceu muito, o ambiente estava pressionado, o parâmetro fazia sentido com os dados que eu tinha e ninguém informou que aquela aplicação mudaria o padrão de acesso.

Nosso jovem fica em silêncio.

Interessante.

Quando o desenvolvedor errou:

“Sempre tem uma desculpa.”

Quando o DBA participou:

“Não é tão simples.”

VWORP.

VWORP.

VWORP.

A TARDIS materializa-se ao lado do monitor.

A porta abre.

O Doctor sai.

Olha para o DBA.

Depois para o desenvolvedor.

— Quando ele errou, qual foi a explicação?

— Falta de cuidado.

— E quando você errou?

— Contexto.

O Doctor sorri.

— Ah.

— O quê?

— Um dos recursos mais elegantes do cérebro humano.

Pausa.

— Para os outros, personalidade. Para nós, circunstâncias.

Bem-vindo ao:



Actor-Observer Bias

Ou:

Viés Ator-Observador

A tendência de explicar o nosso próprio comportamento principalmente pelas circunstâncias em que estávamos inseridos, enquanto explicamos o comportamento das outras pessoas principalmente por características pessoais.

Em linguagem Bellacosa:

“Eu fiz porque a situação estava complicada. Você fez porque é descuidado.”


🌀 O ponto exato onde essa viagem encontra o capítulo anterior

No Fundamental Attribution Error, vimos a tendência de olhar para outra pessoa e concluir:

“Ela fez isso porque é incompetente.”

Agora vamos um passo além.

Actor-Observer Bias acrescenta a assimetria:

quando somos nós:

“Você não entende o contexto.”

Quando são os outros:

“O problema é a pessoa.”

É o clássico:

MEU ATRASO
=
TRÂNSITO

SEU ATRASO
=
IRRESPONSABILIDADE

Em produção:

MEU RESTART ERRADO
=
PRESSÃO DA WAR ROOM

SEU RESTART ERRADO
=
FALTA DE EXPERIÊNCIA

A diferença parece engraçada.

Até começar a contaminar RCA, liderança, promoção, colaboração entre equipes e resposta a incidentes.


🧠 Ator e observador enxergam mundos diferentes

Existe uma razão intuitiva para isso.

Quando somos o ator, vemos:

pressão;

prazo;

mensagens;

alertas;

informação incompleta;

cansaço;

restrições.

Vivemos a situação por dentro.

Quando somos o observador, frequentemente vemos apenas:

a pessoa;

a ação;

o resultado.

O contexto desaparece.

Então o cérebro preenche o espaço vazio com:

personalidade.


☕ Bellacosa Mainframe: o operador que cancelou o job

Imagine.

Job aparentemente travado.

Operador cancela.

O cancelamento provoca reprocessamento de quatro horas.

No dia seguinte:

— Como ele pôde cancelar sem verificar?

Resposta fácil:

“Falta de experiência.”

Agora coloque você no console.

03:32.

Usuários ligando.

Gerente perguntando a cada dois minutos:

“Vai voltar quando?”

Job sem output há 40 minutos.

Runbook diz:

IF NO PROGRESS > 30 MIN
CANCEL AND RESTART

Você cancela.

Depois descobrem:

o job estava em uma fase longa de SORT que não escrevia mensagens.

De fora:

“Ele deveria saber.”

De dentro:

“Segui o runbook com a informação disponível.”

Actor-Observer Bias vive nessa diferença.


👻 Easter Egg nº 1 — Companion vs Doctor

Companion aperta um botão errado.

Doctor:

— Por que você fez isso?

— A nave estava explodindo!

— Ainda assim deveria ter pensado.

Cinco minutos depois o Doctor puxa uma alavanca errada.

Companion:

— Por que fez isso?

— Situação completamente diferente.

— Estávamos na mesma nave.

— Sim, mas eu tinha contexto.

Pausa.

— Você sempre tem contexto?

— Sou o Doctor.

Perfeito.


🧠 Actor-Observer Bias não significa que todas as explicações situacionais estejam corretas

Importante.

Às vezes a pessoa realmente:

não sabia;

não revisou;

agiu mal;

violou processo.

O viés não diz:

“personalidade nunca importa.”

Diz:

nossa forma de distribuir peso entre pessoa e contexto pode mudar dependendo de quem está sendo avaliado.

O problema é a assimetria.


🎯 A pergunta central

Em vez de:

“Por que ele fez isso?”

pergunte:

“Se eu estivesse nas mesmas condições, com a mesma informação, o que eu poderia ter feito?”

Essa pergunta é desconfortável.

E por isso útil.


🧠 Actor-Observer Bias + Fundamental Attribution Error

Os dois são parentes próximos.

Fundamental Attribution Error

Tendência geral de superestimar fatores pessoais ao explicar o comportamento dos outros.

Actor-Observer Bias

Tendência a explicar:

meu comportamento → contexto;

comportamento alheio → personalidade.

Ou seja:

Actor-Observer Bias enfatiza a diferença de perspectiva.


☕ Exemplo no COBOL

Seu colega esquece de inicializar uma variável.

Bug.

Você pensa:

“Como alguém esquece isso?”

Na semana seguinte você esquece.

Sua explicação:

“Eu estava mexendo em três copybooks, o requisito mudou e tive que resolver uma emergência.”

Verdade.

Mas talvez seu colega também tivesse uma história semelhante.


🧠 Self-Serving Bias entra pela porta lateral

No capítulo anterior vimos:

Self-Serving Bias:

sucesso → mérito interno;

fracasso → fatores externos.

Agora:

Actor-Observer Bias:

meu comportamento → contexto;

comportamento dos outros → pessoa.

Os dois juntos criam uma blindagem excelente.

Quando eu erro:

contexto.

Quando você erra:

você.

Quando eu acerto:

competência.

Quando você acerta:

teve boas condições.

A diplomacia corporativa agradece.


😄 Algoritmo universal da autoestima

IF PERSON = ME
   IF RESULT = GOOD
      MOVE 'COMPETENCE' TO CAUSE
   ELSE
      MOVE 'CONTEXT' TO CAUSE
   END-IF
ELSE
   IF RESULT = BAD
      MOVE 'PERSONALITY' TO CAUSE
   ELSE
      MOVE 'LUCK' TO CAUSE
   END-IF
END-IF

Compila perfeitamente na psicologia humana.


🧠 Narrative Bias cria a versão conveniente

O cérebro gosta de histórias.

Para mim:

“Eu estava sob pressão, recebi dados incompletos, o sistema estava instável e precisei decidir rápido.”

Narrativa rica.

Para o outro:

“Ele foi afoito.”

Narrativa compacta.

Percebe?

Nossa própria história possui:

capítulos.

A história do outro cabe em uma etiqueta.


☕ “Fulano é difícil”

Essa frase é perigosíssima.

Talvez Fulano tenha:

questionado requisito;

pedido evidência;

negado mudança arriscada.

O observador transforma:

comportamento contextual

em:

traço permanente.

Depois tudo que Fulano faz passa pelo filtro:

“Ele é difícil.”

Confirmation Bias aparece.


🔎 Confirmation Bias consolida o rótulo

Uma vez que alguém virou:

“descuidado”;

“difícil”;

“fraco”;

“afoito”,

começamos a notar eventos compatíveis.

Esquecemos os outros.

Agora Actor-Observer Bias virou reputação.


🧠 Recency Bias pode piorar

Pessoa errou ontem.

Hoje faz outra coisa.

O erro recente domina avaliação.

“Está vendo? Ele é assim.”

Talvez sejam dois eventos contextuais.

Mas Recency + Attribution transforma comportamento recente em identidade.


🧠 Representativeness Heuristic também

Pessoa se encaixa no protótipo:

“júnior inseguro.”

Então hesitou.

Conclusão:

“Falta confiança.”

Talvez hesitou porque percebeu risco.

A categoria engoliu o contexto.


🪜 Authority Gradient torna a assimetria ainda mais injusta

Chefe erra:

“A decisão era difícil.”

Júnior erra:

“Faltou maturidade.”

Mesmo tipo de erro.

Mesmo sistema.

Mas posições alteram interpretação.

Isso é muito comum.

Quanto maior o cargo:

mais contexto concedemos.

Quanto menor:

mais personalidade atribuímos.


☕ O executivo “tomou uma decisão difícil”

O operador:

“cometeu erro.”

Interessante diferença de vocabulário.

Framing Effect aparece.


🧠 Framing e Actor-Observer

Compare:

“O operador ignorou o alerta.”

versus:

“O operador recebeu 417 alertas durante o turno e priorizou incorretamente este.”

A primeira descreve pessoa.

A segunda descreve pessoa + contexto.

Mesmo fato.

Outra compreensão.


🔔 Alarm Fatigue

Esse é um exemplo perfeito.

Observador:

“Ele ignorou alerta crítico.”

Ator:

“Era o alerta número 286.”

Se você só vê o evento crítico retrospectivamente:

parece absurdo.

Se vê o fluxo inteiro:

talvez a decisão seja compreensível.

Não correta.

Compreensível.

Essa diferença é fundamental.


🧠 Hindsight Bias torna tudo pior

Depois do incidente sabemos:

aquele alerta era o importante.

Operador não sabia.

Nós olhamos para timeline e pensamos:

“Como não percebeu?”

Porque agora o alerta está destacado em vermelho num PowerPoint.

Naquele momento:

era um entre centenas.

Actor-Observer + Hindsight é uma dupla cruel.


🧠 Outcome Bias muda o julgamento

Dois operadores tomam mesma decisão.

Operador A:

restart.

Sistema volta.

Resultado:

“boa iniciativa.”

Operador B:

restart.

Sistema piora.

Resultado:

“impulsivo.”

Mesma ação.

Outro resultado.

Outcome Bias altera a personalidade que atribuiremos ao ator.


☕ Herói de um lado, irresponsável do outro

Às vezes separados apenas pela sorte.


🧠 Action Bias

Manager grita:

“Faça alguma coisa!”

Operador age.

Depois ação piora sistema.

Post-mortem:

“Operador deveria ter analisado mais.”

Mas a cultura premiou ação imediata.

Contexto importa.

Actor-Observer Bias deixa o observador esquecer a pressão que ajudou a criar.


🧠 Omission Bias

Outro caso:

operador não age.

Depois:

“Faltou iniciativa.”

Mas ele havia sido punido no incidente anterior por agir sem aprovação.

Agora a organização produz comportamento e depois atribui o comportamento à pessoa.


☕ Organização esquizofrênica operacional

Segunda:

“Não aja sem aprovação.”

Quarta:

“Por que não tomou iniciativa?”

Sexta:

“Precisamos de gente com senso de dono.”

Talvez primeiro precisemos de critérios claros.


🧠 Normalization of Deviance

Prática comum:

todo mundo pula etapa.

Uma pessoa pula.

Dá errado.

Observador:

“Fulano não segue processo.”

Mas todos faziam igual.

Resultado negativo transformou comportamento coletivo em defeito individual.


🌀 Drift Into Failure

Equipe inteira adaptou-se ao sistema degradado.

Um indivíduo finalmente encontra a condição errada.

Incidente.

Agora:

“Foi erro dele.”

Mas o contexto foi construído durante meses.

Actor-Observer Bias ajuda a esconder o drift.


🧀 Swiss Cheese Model como antídoto

Pergunte:

quais barreiras existiam?

Documentação.

Validação.

Peer review.

Automação.

Monitoramento.

Rollback.

Se cinco barreiras falharam:

a personalidade de uma pessoa explica pouco.


🎯 Pergunta Bellacosa nº 1

Quando ouvir:

“Ele é descuidado.”

Pergunte:

“Qual comportamento específico estamos descrevendo?”

Troque adjetivo por fato.

Não:

“descuidado.”

Mas:

“executou mudança sem validar parâmetro.”

Agora dá para investigar.


🎯 Pergunta Bellacosa nº 2

“Que condições existiam naquele momento?”

Pressão?

Fadiga?

Ambiguidade?


🎯 Pergunta Bellacosa nº 3

“Quando nós fizemos algo parecido, que explicação demos?”

Aqui o espelho aparece.


🎯 Pergunta Bellacosa nº 4

“Aplicaríamos o mesmo julgamento se o resultado tivesse sido diferente?”

Outcome Bias.


🎯 Pergunta Bellacosa nº 5

“Se outra pessoa competente estivesse nas mesmas condições, esse comportamento ainda seria plausível?”

O famoso substitution test.


🧠 O teste da substituição

Pegue Carlos.

Troque por Maria.

Depois João.

Depois você.

Mesma interface.

Mesmo runbook.

Mesma pressão.

Se vários poderiam errar:

o sistema precisa entrar na análise.


☕ Bellacosa Swap Test

CARLOS → MARIA → JOÃO → VOCÊ

Se o risco permanece:

não estamos discutindo apenas personalidade.


🧠 Context Reconstruction

Em post-mortem, tente reconstruir:

o que a pessoa via?

que alertas?

qual informação?

qual tela?

qual documentação?

qual relógio?

qual pressão?

Isso aproxima observador da perspectiva do ator.


🕰️ Timeline cognitiva

Não basta:

03:10 operador executa restart

Inclua:

03:03 incident commander pede ETA
03:05 usuários escalam impacto
03:06 dashboard mostra queue ↑
03:07 runbook sugere restart
03:08 alerta DB2 inconclusivo
03:10 restart executado

Agora ação ganha contexto.


🧠 Work-as-Imagined versus Work-as-Done

Gestão imagina:

operador lê runbook com calma.

Realidade:

quatro chats;

telefone;

alertas;

SDSF;

gerente;

usuario.

O observador costuma avaliar Work-as-Done usando Work-as-Imagined.

Isso cria julgamentos injustos.


☕ O runbook de laboratório

Passo 1:

“analise cuidadosamente.”

Claro.

Às 14h com café.

Às 03h com SEV-1, essa frase pode precisar de muito mais estrutura.


🧠 Cognitive Load

Memória de trabalho humana é limitada.

Quanto mais tarefas simultâneas:

maior chance de erro.

Se processo exige:

lembrar 17 passos;

comparar cinco telas;

responder chat

e não errar,

a causa não deveria ser resumida a:

“faltou atenção.”


🧠 Fatigue

Fadiga muda desempenho.

Plantão longo.

Noite.

Interrupções.

Ator sente isso.

Observador vê apenas:

ação errada.

Por isso staffing e descanso também são controles operacionais.


🧠 Time Pressure

Prazo muda comportamento.

Algo que parece:

“imprudência”

pode ser resposta adaptativa a:

“precisamos em 10 minutos.”

De novo:

entender não significa aprovar.

Significa desenhar solução real.


🧠 Incentives

Se bônus depende de:

zero atraso,

equipe pula testes.

Depois:

“faltou disciplina.”

Talvez incentivo produziu exatamente aquilo.

Actor-Observer Bias protege quem desenhou KPI e culpa quem respondeu a ele.


☕ KPI tem personalidade?

Não.

Mas cria comportamento.


🧠 Fundamental Attribution Error em times

Aplicação culpa infra.

Infra culpa aplicação.

Cada lado conhece profundamente seu contexto.

Conhece pouco do contexto alheio.

Então:

nosso problema = circunstância;

problema deles = incompetência.

Actor-Observer Bias em escala organizacional.


👥 Silo Bias

Silos aumentam porque cada equipe enxerga:

seu contexto completo

e:

o output da outra.

Quanto menor a transparência entre equipes:

mais fácil atribuir falha a caráter profissional.


🔗 Observabilidade compartilhada como antídoto social

Distributed tracing.

Logs comuns.

Timeline compartilhada.

Change records.

Quando todos veem o mesmo contexto:

menos espaço para:

“eles fizeram besteira.”


☕ Correlation ID como diplomata corporativo

Às vezes uma simples cadeia ponta a ponta resolve discussões que vinte reuniões não resolvem.


🧠 Actor-Observer Bias em code review

Você vê código de colega:

“Que solução estranha.”

Depois descobre:

requisito exigia compatibilidade com sistema de 1996.

Contexto muda percepção.

Antes de chamar código de ruim:

pergunte:

“Que restrição estou deixando de ver?”


💻 Legacy code e contexto perdido

Código de 1988 parece absurdo em 2026.

Mas talvez fosse excelente sob:

memória limitada;

CPU cara;

compilador antigo;

restrições de storage.

Julgar decisão histórica com contexto atual é uma forma temporal de erro de atribuição.

Hindsight também entra.


☕ O GO TO ancestral

Você olha:

GO TO 9000-EXIT.

— Bárbaros!

Talvez em 1978 houvesse outra convenção, outra ferramenta, outra pressão.

Contexto histórico importa.


🧠 Actor-Observer Bias e carreira

Você perde prazo:

“Dependências.”

Colega perde:

“Má organização.”

Você muda de emprego:

“Buscando crescimento.”

Colega muda:

“Sem compromisso.”

O cérebro gosta de autobiografias generosas.


🧠 Performance Review

Gestores precisam cuidado especial.

Avalie padrão de comportamento ao longo do tempo.

Não converta:

um incidente

em:

identidade.

“Ele é ruim sob pressão” pode nascer de uma única madrugada desastrosa.


🧠 Recency + Attribution = rótulo

Último erro fica fresco.

A avaliação anual chega.

O erro domina.

Agora traço permanente.

Isso é perigoso.

Registros longitudinais ajudam.


📝 Incident Contribution Log

Não para ranking.

Para compreender exposição.

Quantas vezes a pessoa:

atuou corretamente?

detectou riscos?

interveio?

Se só documentamos falhas:

base de avaliação já nasce enviesada.


🧠 Survivorship Bias curioso

As milhares de decisões corretas somem porque nada aconteceu.

A única decisão errada vira incidente.

Então observador superestima taxa de erro daquele profissional.


☕ O operador invisível

500 noites tranquilas.

Uma noite ruim.

Agora todos lembram daquela.

Operação segura é cheia de trabalho que não produz histórias.


🧠 Actor-Observer Bias e segurança

Usuário clica phishing.

Security:

“Usuário descuidado.”

Security configura regra errada:

“Ambiente era muito complexo.”

Espelho.

O correto:

examinar contexto nos dois casos.


🔐 Phishing

Usuário recebeu mensagem:

perfeitamente escrita;

aparentemente interna;

em momento esperado;

com domínio parecido.

A pergunta não deveria ser apenas:

“Por que clicou?”

Mas:

“Por que essa mensagem era plausível?”


🧠 Social Engineering explora contexto

Atacantes sabem:

pressão;

autoridade;

urgência;

rotina.

Se segurança ignora contexto humano:

culpa vítima em vez de melhorar controle.


🤖 Actor-Observer Bias com IA

Usuário aceita recomendação ruim de IA.

Gestor:

“Ele confiou demais.”

Gestor implementa automação errada:

“O modelo teve comportamento inesperado.”

Muito interessante.

Quem observa humano vê decisão.

Quem opera sistema vê complexidade.

Precisamos simetria.


🧠 Automation Bias

A ferramenta pode contribuir.

Mas humano continua dentro do sistema.

Analise:

UI;

confidence score;

explicabilidade;

tempo;

authority.

Não apenas:

“usuário aceitou.”


🤖 AI as teammate

Quanto mais IA entra na operação, mais teremos perguntas:

quem é ator?

humano?

modelo?

designer?

gestor?

Sistema sociotécnico torna atribuições individuais ainda menos suficientes.


🧠 Decision Environment

Uma boa investigação olha para:

ambiente decisório.

Que opções estavam disponíveis?

Quais pareciam seguras?

Qual informação era visível?

Qual custo havia para discordar?

Isso transforma julgamento em engenharia.


☕ O botão gigante vermelho

Se interface coloca:

RESTART ALL

enorme

e:

inspect logs

escondido,

o design está votando.

Não diga depois que usuário “escolheu livremente” sem considerar esse contexto.


🧠 Choice Architecture

A forma como opções são apresentadas influencia decisões.

Framing Effect retorna.

Default.

Posição.

Cor.

Confirmação.

Tudo compõe contexto do ator.


🧠 Status Quo Bias

Pessoa mantém processo antigo.

Observador:

“Resistente a mudanças.”

Talvez mudanças anteriores tenham dado errado.

Talvez não haja treinamento.

Talvez risco pessoal seja alto.

Contexto antes de rótulo.


🧠 Loss Aversion

Profissional evita nova ferramenta.

“Conservador.”

Talvez tenha muito a perder:

produtividade;

credibilidade;

controle.

Compreender perda percebida ajuda adoção.


🧠 Present Bias

Pessoa escolhe workaround rápido.

“Preguiçosa.”

Talvez backlog enorme e SLA impossível.

Present Bias pode existir.

Mas ambiente também o incentiva.

Não use viés como novo rótulo moral.


☕ Isso é importante

Descobrir um bias não deveria virar:

“Você é enviesado.”

Todo mundo é.

A pergunta útil:

“Que processo reduz o efeito desse viés?”


🧠 Just Culture novamente

Just Culture é um ótimo contrapeso ao Actor-Observer Bias.

Em vez de:

“quem é a pessoa?”

pergunta:

  • comportamento esperado?

  • erro não intencional?

  • risco assumido?

  • violação deliberada?

  • condições locais?

  • controles?

Isso preserva accountability sem simplificação.


🧠 Accountability simétrica

Uma regra saudável:

use a mesma pergunta para:

sênior;

júnior;

gestor;

operador.

O que aconteceu?

Que informação havia?

Que decisão foi tomada?

Que processo influenciou?

Isso reduz status social na atribuição.


🎯 Pergunta Bellacosa nº 6

“Estamos dando ao nosso erro mais contexto do que ao erro deles?”

Provavelmente a melhor frase do capítulo.


🪞 Mirror Test

Escreva:

“Quando nossa equipe fez X, foi porque prazo estava apertado.”

Agora:

“Quando a outra equipe fez X, foi porque prazo estava apertado.”

Ainda acredita?

Depois inverta:

“Quando nossa equipe fez X, faltou planejamento.”

Dói?

Talvez tenha achado o viés.


🧠 Role Reversal

Troque nomes no post-mortem.

Esconda equipe.

Peça avaliação.

Depois revele.

Se julgamento muda:

temos algo para discutir.


🧪 Blind Review

Para decisões importantes, você pode apresentar:

dados;

timeline;

ações

sem nomes.

Perguntar:

“A decisão foi razoável?”

Isso reduz atribuição baseada em reputação.


📊 Process Review versus Person Review

Primeiro avalie:

processo decisório.

Só depois:

conduta individual.

Isso reduz confusão.


🧠 Counterfactual Context

Pergunte:

“Se removêssemos a pressão temporal, a pessoa provavelmente faria igual?”

Se não:

pressão é fator causal importante.

Outra:

“Se interface validasse valor, erro existiria?”

Não.

Então interface participa.


🧠 Causal contribution ≠ blame share

Não precisamos distribuir porcentagens de culpa.

Isso vira contabilidade moral.

Melhor identificar:

fatores alteráveis.

O que podemos melhorar?


☕ 37% culpa do operador, 42% processo...

Não.

Isso não é RCA.

É campeonato.


🧠 Improvement orientation

A pergunta final:

“O que mudaremos?”

Se resposta:

“a pessoa precisa prestar mais atenção”

fraco.

Se:

validação;

alerta;

runbook;

peer review;

training específico;

muito melhor.


🧠 Strong fixes again

Fraco

“Tenha cuidado.”

Melhor

Checklist.

Melhor

Validação.

Melhor

Default seguro.

Melhor

Automação que impede erro.

Sempre que possível.


💻 COBOL e design tolerante

Se campo precisa de 1–9:

não aceite 99.

IF WS-OPTION < 1 OR WS-OPTION > 9
   DISPLAY 'OPCAO INVALIDA'
   PERFORM READ-AGAIN
END-IF

Não culpe usuário por valor que o programa poderia rejeitar facilmente.


🧠 Observability e contexto

Se operador toma decisão com dados ruins:

melhore dados.

Dashboard deve mostrar:

baseline;

tendência;

impacto;

confidence.

Boa informação reduz dependência de julgamento improvisado.


🧠 Runbook com rationale

Não escreva apenas:

“restart service.”

Escreva:

“restart if queue > X AND consumer rate = 0 for Y min.”

Agora contexto está embutido no procedimento.


☕ Procedimento bom empresta experiência ao profissional cansado

Linda função.


🧠 Actor-Observer Bias na retrospectiva

Perguntas úteis:

  • qual contexto estávamos vendo?

  • que contexto a outra equipe via?

  • o que não sabíamos sobre eles?

  • que informação compartilhada teria mudado decisão?

Isso melhora coordenação.


👥 Cross-team Incident Review

Faça cada equipe explicar:

o que enxergava naquele momento.

Não apenas:

o que sabe agora.

Isso reduz julgamento retrospectivo.


🧠 Shared timeline

Monte:

APP VIEW
DB2 VIEW
OPS VIEW
NETWORK VIEW
BUSINESS VIEW

Às 03:10 cada um via coisa diferente.

Agora divergências fazem sentido.


☕ O mesmo incidente tem cinco câmeras

Actor-Observer Bias acontece porque geralmente assistimos só à nossa.


🧠 Doctor Who e perspectiva

A própria ideia da TARDIS serve como metáfora perfeita.

O Doctor pode ver:

passado;

presente;

futuro.

Nós não.

No incidente real:

cada pessoa vê apenas um pedaço.

Depois que juntamos tudo, parece que alguém deveria ter visto o quadro completo.

Mas ninguém tinha uma TARDIS.

Esse é o Hindsight Bias encontrando Actor-Observer.


👻 Easter Egg nº 2 — perspectiva temporal

Companion:

— Era óbvio que deveríamos ter parado.

Doctor:

— Agora.

— Como assim?

— Agora você viu todos os eventos.

Pausa.

— Naquele minuto você tinha apenas três.

— Então eu não errei?

— Talvez tenha errado.

— Ah.

— Mas primeiro precisamos julgar a decisão com o universo que você conhecia, não com o que descobrimos depois.

Essa é uma das melhores regras de post-mortem.


🧠 Decision Quality at Time T

Avalie decisão usando:

informação disponível em T

Não em:

T + 3 horas.

Essa disciplina reduz muitos vieses da série.


📝 Snapshot decisório

Guarde:

03:14

KNOWN:
- queue rising
- DB2 normal
- consumer uncertain

UNKNOWN:
- external API degraded

DECISION:
restart consumer

Depois:

root cause API.

Agora podemos avaliar se restart era razoável sem fingir que operador deveria conhecer informação futura.


🧠 Actor-Observer Bias e aprendizado contínuo

Se julgamos outros moralmente:

eles escondem erros.

Se escondem erros:

perdemos dados.

Se perdemos dados:

não aprendemos.

Logo, atribuição injusta reduz observabilidade humana.


☕ Medo é um log compressor

Pessoas contam menos quando sabem que qualquer erro vira rótulo.


🧠 Psychological Safety

Segurança psicológica permite dizer:

“Eu fiz isso porque achei X.”

Essa explicação é ouro.

Sem ela:

recebemos versão defensiva.

Just Culture melhora qualidade do RCA.


🧠 Self-Serving Bias ainda existe

Claro.

Pessoas também podem racionalizar.

Por isso não dependemos apenas de relatos.

Cruzamos:

logs;

timeline;

tickets;

dados.

Com empatia + evidência.

Não ingenuidade.


☕ Nem tribunal, nem conto de fadas

Boa investigação fica no meio.


📋 Checklist anti-Actor-Observer Bias

[ ] Estou descrevendo fato ou personalidade?

[ ] Que contexto a outra pessoa tinha?

[ ] Que informação eu tenho agora que ela não tinha?

[ ] Eu explicaria meu próprio erro da mesma maneira?

[ ] Estamos concedendo mais contexto à nossa equipe?

[ ] A pressão temporal influenciou?

[ ] Havia fadiga ou sobrecarga?

[ ] A interface ou ferramenta favorecia a decisão?

[ ] O processo era realmente executável?

[ ] O comportamento era comum ou excepcional?

[ ] O resultado está contaminando nosso julgamento?

[ ] Outra pessoa competente poderia agir igual?

[ ] Existe efeito de hierarquia no julgamento?

[ ] O que mudaria no sistema para reduzir recorrência?

[ ] Estamos transformando evento em identidade?

🧪 Como combater Actor-Observer Bias — passo a passo

Passo 1 — Remova adjetivos

“Descuidado.”

“Fraco.”

“Afoito.”

Troque por comportamento observável.


Passo 2 — Reconstrua contexto

Telas.

Tempo.

Informação.


Passo 3 — Faça o Mirror Test

Como explicamos erros próprios?


Passo 4 — Faça o Substitution Test

Outra pessoa poderia fazer igual?


Passo 5 — Avalie decisão com dados da época

Não com hindsight.


Passo 6 — Procure pressões do sistema

SLA.

KPI.

Hierarquia.


Passo 7 — Separe execução de decisão

Quem pediu?

Quem aprovou?

Quem executou?


Passo 8 — Examine barreiras

O erro deveria ter sido contido?


Passo 9 — Preserve accountability justa

Erro não é igual a violação deliberada.


Passo 10 — Transforme contexto em melhoria

Validação.

Automação.

Runbook.

Training.

Observabilidade.


🧠 Uma curiosidade importante: contexto não é desculpa

Existe medo de que contextualizar vire:

“passar pano.”

Não.

Contextualização é condição para prevenir.

Se você não entende por que comportamento ocorreu:

não consegue mudar condições.

Responsabilidade pode continuar existindo.

Mas agora ela é informada.


☕ “Ele fez errado” e “o sistema favoreceu o erro” podem ser verdade ao mesmo tempo

Esse “e” aparece muito nesta série.


🧠 Accountability sem humilhação

Pode dizer:

“A decisão não estava de acordo com o controle esperado.”

E:

“O controle era difícil de executar sob pressão.”

Então:

corrige comportamento;

corrige sistema.

Muito mais forte.


🧠 Violation versus error

Erro involuntário:

uma coisa.

Atalho habitual:

outra.

Violação consciente e injustificável:

outra.

Misturar tudo em:

“erro humano”

ou:

“culpa do sistema”

também é ruim.


🧠 Just Culture como equilíbrio

Nem:

“a pessoa é o problema.”

Nem:

“a pessoa nunca é responsável.”

Mas:

“qual comportamento ocorreu, em qual contexto, e qual resposta é justa e útil?”


💡 Bellacosa Three-Layer Review

Podemos usar:

1. PERSON
O que fez?

2. CONTEXT
Por que parecia razoável?

3. SYSTEM
Como reduzir chance/impacto?

Simples.

Poderoso.


🧠 Actor-Observer Bias em IA operacional

Imagine humano aprova ação errada sugerida por agente.

Depois:

“Analista deveria verificar.”

Correto.

Mas talvez UI mostre:

CONFIDENCE: HIGH
RECOMMENDED ACTION

em destaque.

Sem evidência.

Sem contra-hypothesis.

O ambiente influenciou decisão.

Corrija ambos:

treinamento humano;

design da ferramenta.


🤖 Human Factors não desaparecerão com agentes

Talvez fiquem mais importantes.

Porque agora o humano observará:

modelos;

recomendações;

scores.

E decidirá quando confiar.

A interface entre cognição humana e automação vira nova camada crítica.


🧠 Attribution to AI

Quando IA acerta:

“Nossa automação é incrível.”

Quando erra:

“Usuário deveria ter percebido.”

Self-Serving + Actor-Observer.

Incrível combo moderno.


☕ O agente também merece logs

Quem recomendou?

Com qual contexto?

Qual modelo?

Qual ferramenta?

Qual confidence?

Assim atribuição pode ser técnica.


🧠 Continuous Improvement

Depois de cada incidente:

não pergunte só:

“Quem fez?”

Pergunte:

  • quem viu o quê?

  • quando?

  • por que aquela ação parecia razoável?

  • que sinal faltou?

  • que controle poderia ajudar?

Isso transforma atribuição em melhoria.


📓 Diário do Doctor

Se guardar algumas ideias desta viagem, guarde estas:

Actor-Observer Bias é a tendência de explicar nosso comportamento pelo contexto e o comportamento dos outros por características pessoais.

Ele é parente próximo do Fundamental Attribution Error e do Self-Serving Bias.

Ator vê contexto; observador vê ação e resultado.

Hindsight Bias dá ao observador informação que o ator não possuía.

Outcome Bias pode transformar a mesma ação em heroísmo ou imprudência.

Authority Gradient pode fazer erros de chefes parecerem “decisões difíceis” e erros de juniores parecerem “falta de maturidade”.

Alarm Fatigue, fadiga, pressão, incentivos e interfaces moldam comportamento.

Contextualizar não significa eliminar accountability.

Mirror Test e Substitution Test ajudam a criar simetria.

Uma decisão deve ser julgada com as informações disponíveis naquele momento.

A melhor investigação descreve comportamento, reconstrói contexto e melhora o sistema.

E principalmente:

Antes de transformar o erro de alguém em personalidade, tente viver cinco minutos dentro do console, do prazo, da informação e da pressão que aquela pessoa tinha.


🕰️ De volta à War Room

DBA:

— O desenvolvedor deveria ter previsto isso.

Nosso programador pergunta:

— O documento técnico mencionava essa dependência?

— Não.

— O ambiente de teste reproduzia?

— Não.

— O DBA sabia que o padrão de SQL mudaria?

— Também não.

Ele olha para os dois.

— Então talvez tenhamos duas decisões imperfeitas tomadas por pessoas com pedaços diferentes do sistema.

Silêncio.

O Doctor sorri.

— Isso é bem menos emocionante que incompetência.

— É.

— E mais útil.

Montam timeline.

Descobrem:

desenvolvimento não conhecia limite do banco.

DBA não conhecia nova carga.

Change review não juntou os dois.

A causa não era:

“desenvolvedor ruim.”

Nem:

“DBA ruim.”

Era uma interface organizacional ruim.


🔧 Um mês depois

O change template ganha:

EXPECTED DB ACCESS PATTERN:
____________________

VOLUME CHANGE:
____________________

DBA REVIEW REQUIRED IF:
>20% increase

Também:

performance test integrado.

Na mudança seguinte:

o mesmo risco aparece.

Desta vez:

antes da produção.

Nenhuma War Room.

Nenhum dedo apontado.

Nenhum personagem precisava tornar-se vilão.


🥚 Easter Egg final

Na manhã seguinte aparece:

BELLACOSA.BIAS(ACTOR-OBSERVER)

Dentro:

       IF PERSON = 'ME'
           PERFORM CHECK-IF-I-AM
                   OVERUSING-CONTEXT
       END-IF.

       IF PERSON = 'THEM'
           PERFORM CHECK-THEIR-CONTEXT
       END-IF.

       IF JUDGMENT-USES-ADJECTIVE
           PERFORM DESCRIBE-BEHAVIOR
       END-IF.

Comentário:

* MY CONTEXT COUNTS.
* YOURS DOES TOO.

Outro:

* JUDGE THE DECISION
* WITH THE DATA AVAILABLE THEN.

Mais um:

* PERSONALITY IS NOT
* A ROOT CAUSE CODE.

E naturalmente:

* BAD WOLF HAD CONTEXT.
* SO DID EVERYONE ELSE.

Nosso jovem fecha o membro.

Horas depois alguém comenta:

— A equipe de operações fez uma besteira ontem.

Ele quase concorda.

Mas pergunta:

— O que aconteceu?

— Reiniciaram cedo demais.

— Por quê?

— Não sei.

Ele sorri.

— Então ainda sabemos o que fizeram.

Pausa.

— Ainda não sabemos por que fizeram.

Investigam.

O runbook realmente mandava reiniciar.

Atualizam.

A próxima equipe não repete.

VWORP.

VWORP.

VWORP.

A TARDIS desaparece.

No quadro da War Room fica uma última frase:

Com nós mesmos, conhecemos a história inteira. Com os outros, quase sempre vemos apenas uma cena. Engenharia madura começa quando paramos de julgar o filme inteiro por um único frame.

☕🌀

Next stop: Dunning-Kruger Effect — quando saber pouco pode produzir uma confiança surpreendentemente grande, enquanto quem conhece profundamente o sistema começa justamente a enxergar todas as maneiras pelas quais pode estar errado.

sábado, 12 de maio de 2012

Fundamental Attribution Error: Doctor Who, COBOL e o Dia em que “Fulano Errou” Virou a Explicação para Tudo

 

Bellacosa Mainframe e o fundamental attribution error

☕ Um Café no Bellacosa Mainframe

Fundamental Attribution Error: Doctor Who, COBOL e o Dia em que “Fulano Errou” Virou a Explicação para Tudo

Uma viagem pela TARDIS dos incidentes para entender por que culpamos pessoas por falhas que também nasceram de contexto, pressão, ferramentas, processos, incentivos e sistemas mal desenhados

03:41.

Madrugada.

Produção parcialmente indisponível.

Café frio.

War Room lotada.

Na tela:

INCIDENTE SEV-1

IMPACTO:
37% DAS TRANSAÇÕES REJEITADAS

INÍCIO:
03:12

AÇÃO ANTERIOR:
ALTERAÇÃO MANUAL DE PARÂMETRO

OPERADOR:
CARLOS

O gerente olha para a timeline.

— Quem alterou o parâmetro?

Silêncio.

O operador levanta a mão.

— Eu.

— Você sabia que podia derrubar produção?

— Não.

— Mas o valor estava errado.

— Sim.

Outro gerente entra:

— Então encontramos a causa.

Nosso jovem programador COBOL pergunta:

— Encontramos?

— Claro.

O gerente aponta para Carlos.

— Ele digitou o valor errado.

Parece simples.

Humano.

Confortável.

Uma pessoa.

Uma ação.

Uma consequência.

Narrative Bias fica satisfeito.

03:48.

Alguém já escreve no chat:

ROOT CAUSE:
HUMAN ERROR

Nosso programador olha para a tela de mudança.

O campo era:

MAXTHD:
_____

Sem descrição.

Sem range.

Sem warning.

Sem validação.

Ele pergunta:

— Qual era o valor correto?

— 250.

— E o que foi digitado?

— 2500.

— O sistema aceitou?

— Sim.

— Não havia confirmação?

— Não.

— Peer review?

— A mudança era urgente.

— Ambiente de teste?

— Não reproduzia esse parâmetro.

— Runbook?

— Desatualizado.

— Carlos estava há quanto tempo no plantão?

Silêncio.

Alguém consulta.

— Onze horas.

Nosso programador olha para o gerente.

— Ainda é só “Carlos errou”?

Antes que alguém responda:

VWORP.

VWORP.

VWORP.

A TARDIS materializa-se ao lado do projetor.

A porta abre.

O Doctor sai.

Olha para Carlos.

Depois para o formulário.

Depois para o runbook.

Depois para o relógio.

— Quem digitou o número?

— Carlos.

— Então Carlos participou do incidente.

O gerente sorri.

— Exatamente.

O Doctor continua:

— Quem desenhou uma interface que aceita valor dez vezes maior sem perguntar nada?

Silêncio.

— Quem definiu que uma mudança crítica poderia ser feita sem segundo par de olhos?

Silêncio.

— Quem permitiu onze horas contínuas de plantão?

Mais silêncio.

— Quem deixou o runbook ficar desatualizado?

Agora ninguém parece tão interessado em responder.

O Doctor sorri.

— Ah.

Pausa.

— Humanos adoram descobrir que uma pessoa errou.

Aponta para todo o resto.

— É muito menos confortável descobrir que o sistema inteiro estava esperando uma pessoa errar.

Bem-vindo ao:



Fundamental Attribution Error

Ou:

Erro Fundamental de Atribuição

A tendência de explicar o comportamento ou os erros de outras pessoas principalmente por características pessoais — descuido, incompetência, irresponsabilidade, preguiça, falta de atenção — enquanto subestimamos o contexto, as pressões, os incentivos, as ferramentas e as condições em que aquela pessoa estava operando.

Em linguagem Bellacosa:

“Fulano fez besteira” parece uma explicação muito mais fácil do que “o sistema tornou essa besteira provável e perigosa”.


🌀 Nossa TARDIS dos incidentes já encontrou muitos monstros

Até aqui vimos:

Swiss Cheese Model — várias barreiras podem falhar juntas.

Normalization of Deviance — desvios podem virar rotina.

Hindsight Bias — depois do incidente tudo parece óbvio.

Confirmation Bias — buscamos evidências para aquilo que já acreditamos.

Anchoring Bias — a primeira explicação pesa demais.

Groupthink — grupos inteligentes podem errar juntos.

Authority Gradient — hierarquia pode silenciar quem percebe o problema.

Plan Continuation Bias — continuamos mesmo quando o plano deixou de fazer sentido.

Alarm Fatigue — excesso de alertas destrói atenção.

Automation Bias — confiamos demais na máquina.

Drift Into Failure — sistemas derivam lentamente para a borda.

Diffusion of Responsibility — todos veem e ninguém assume.

Normalcy Bias — esperamos que tudo volte ao normal.

Survivorship Bias — olhamos apenas para quem sobreviveu.

Base Rate Neglect — ignoramos frequências reais.

Availability Heuristic — o que lembramos facilmente parece mais provável.

Outcome Bias — bom resultado parece provar boa decisão.

Overconfidence Bias — confiança excessiva reduz revisão.

Planning Fallacy — subestimamos esforço e complexidade.

Sunk Cost Fallacy — custos passados prendem decisões futuras.

Status Quo Bias — o atual recebe privilégio psicológico.

Present Bias — o conforto de hoje pesa mais que o custo de amanhã.

Optimism Bias — acreditamos que o futuro será mais gentil conosco.

Action Bias — sentimos necessidade de agir.

Omission Bias — não agir pode parecer menos culpável.

Loss Aversion — perder pesa mais que ganhar.

Framing Effect — a moldura altera a decisão.

Recency Bias — o recente parece mais representativo.

Representativeness Heuristic — “tem cara de X” vira “deve ser X”.

Narrative Bias — uma boa história pode parecer mais verdadeira do que os dados permitem.

Agora surge o personagem perfeito para essa história:

o culpado.


🧠 O que é Fundamental Attribution Error?

Imagine:

você está dirigindo.

Um carro corta sua frente.

Você pensa:

“Que idiota.”

Essa explicação atribui o comportamento à personalidade.

Talvez o motorista seja realmente imprudente.

Mas talvez:

esteja levando alguém ao hospital;

não tenha visto você;

tenha recebido indicação errada;

esteja desviando de outro carro.

Não sabemos.

Quando outra pessoa faz algo errado, tendemos a explicar com:

“ela é assim.”

Quando nós fazemos:

“a situação me obrigou.”

Esse contraste é fascinante.


☕ Bellacosa Mainframe: “O operador foi desatento”

Imagine:

COMMAND:
PURGE QUEUE ABC

Operador executa na queue errada.

Incidente.

Post-mortem ruim:

“Operador deve prestar mais atenção.”

Ação preventiva:

TREINAR OPERADOR

Pronto.

Ticket fechado.

Problema resolvido?

Talvez não.

Pergunte:

por que era possível purgar fila crítica sem confirmação?

Por que nomes eram parecidos?

PAY.PRD.IN
PAY.PRD.INT

Por que acesso permitia?

Por que não havia preview?

Por que processo dependia de digitação manual?

Por que ele precisava trabalhar sob pressão?

Agora temos engenharia.


🧠 Pessoa versus sistema

Isso não significa:

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

Muito importante.

Pessoas possuem responsabilidade.

Negligência real existe.

Violações conscientes existem.

Fraude existe.

Mas:

atribuir rapidamente tudo à pessoa pode impedir descobrir por que o erro:

era possível;

era provável;

teve impacto tão grande.

Uma cultura madura consegue manter duas ideias ao mesmo tempo:

pessoas respondem por escolhas

e:

sistemas precisam ser projetados considerando que humanos erram.


👻 Easter Egg nº 1 — O Doctor e o botão errado

Companion aperta botão.

Alarme.

Doctor:

— Por que apertou?

— Achei que abria a porta.

— E por que achou?

— Porque está escrito “OPEN”.

Doctor olha.

— Ah.

— O quê?

— Aparentemente “OPEN” significa “abrir o núcleo do reator”.

Pausa.

— Talvez o problema não seja só seu dedo.

Interface ruim é um vilão subestimado.


🧠 Human Error não é Root Cause

Essa é uma das frases mais importantes deste artigo:

“Human error” normalmente é o começo da investigação, não o fim.

Se alguém digitou errado:

por quê?

Se esqueceu:

por quê?

Se escolheu ação errada:

que informação tinha?

Que pressão existia?

Que alternativas eram visíveis?

O erro humano frequentemente é:

o ponto onde o sistema manifestou sua fragilidade.


🧀 Swiss Cheese volta imediatamente

Carlos digitou 2500.

Mas imagine as barreiras:

  1. documentação correta;

  2. validação de campo;

  3. range check;

  4. peer review;

  5. teste;

  6. monitoramento;

  7. rollback.

Se todas falharam:

por que escolher apenas Carlos como causa?

O Swiss Cheese Model nos lembra:

o erro humano pode ser apenas um dos buracos.


🧠 Local Rationality

Em Safety Science existe uma ideia extremamente útil:

pessoas fazem escolhas que parecem razoáveis dentro do contexto que possuem naquele momento.

Isso é chamado frequentemente de:

local rationality

Você olha depois e pensa:

“Como ele pôde fazer isso?”

Mas pergunte:

“Por que aquilo fazia sentido para ele naquele instante?”

Essa pergunta muda tudo.


☕ Carlos às 03:10

O runbook dizia:

INCREASE MAXTHD IF QUEUE > 80%

Não dizia quanto.

Última ocorrência:

alguém usou 2500 num ambiente de teste.

Carlos encontrou mensagem antiga no chat:

“Use 2500.”

Produção usava 250.

Pressão:

clientes reclamando.

Gerente:

“precisamos resolver agora.”

Então 2500 talvez não tenha parecido absurdo.

Agora compreendemos.

Não significa que valor estava certo.

Significa que erro deixa de parecer inexplicável.

E quando erro é explicável:

podemos projetar defesa.


🧠 “Como alguém poderia fazer isso?”

Essa pergunta costuma conter julgamento.

Melhor:

“Que informação e condições tornaram essa ação plausível?”

Ela produz conhecimento.


🔎 Fundamental Attribution Error + Hindsight Bias

Depois do incidente:

valor correto parece óbvio.

250 versus 2500.

Mas antes:

sem range;

sem descrição;

sob pressão,

talvez não.

Hindsight Bias transforma contexto incerto em:

“qualquer pessoa deveria saber.”

Fundamental Attribution Error transforma isso em:

“então Carlos é incompetente.”

Combo perigoso.


🧠 Narrative Bias cria personagem

No capítulo anterior:

narrativa quer começo, meio e fim.

Agora precisa de protagonista.

“Carlos digitou errado.”

Pronto.

Temos causa.

É uma história elegante.

Muito mais simples do que:

  • interface;

  • documentação;

  • pressão;

  • plantão;

  • treinamento;

  • governança.


🎬 O problema do vilão único

Filmes funcionam melhor com vilão.

Sistemas complexos raramente.

Se seu RCA termina com:

“Fulano errou”

desconfie.

Talvez seja verdade.

Mas pergunte:

por que um erro individual conseguia causar um incidente sistêmico?


🧠 Blame is cognitively cheap

Culpa é barata.

Você não precisa:

alterar software;

melhorar processo;

investir em automação.

Basta:

treinar;

advertir;

mandar e-mail.

Isso dá sensação de ação.

Action Bias agradece.


☕ “Reforçar atenção”

Uma ação preventiva clássica:

AÇÃO:
REFORÇAR ATENÇÃO DA EQUIPE

Traduzindo:

esperamos que humanos deixem de ser humanos.

É uma defesa fraca.


🧠 Hierarquia de controles

Pense em formas de reduzir erro.

Mais fraco:

lembre-se.

Melhor:

checklist.

Melhor:

validação automática.

Melhor:

remover possibilidade de valor inválido.

Exemplo:

em vez de campo livre:

MAXTHD: ______

use:

MAXTHD:
[100] [250] [500]

ou range validado:

MIN 100
MAX 500

A interface trabalha junto com humano.


💻 COBOL iniciante: validação importa

Imagine:

ACCEPT WS-THREADS
MOVE WS-THREADS TO CFG-THREADS

Sem validação.

Usuário digita:

2500

Programa aceita.

Depois incidente.

Quem errou?

Usuário?

Ou código que confiou cegamente?

Defensive programming responde:

IF WS-THREADS < 100
   OR WS-THREADS > 500
    DISPLAY 'VALOR FORA DO LIMITE'
ELSE
    MOVE WS-THREADS TO CFG-THREADS
END-IF

Agora sistema ajuda.


🧠 Poka-Yoke

Na qualidade industrial existe o conceito japonês:

Poka-Yoke

À prova de erro ou error-proofing.

A ideia:

projetar processos de modo que erros sejam:

impossíveis;

difíceis;

detectados cedo.

Exemplo simples:

conectores que só encaixam de uma maneira.

Em TI:

validação;

defaults seguros;

confirmações;

permissões;

automação.

Excelente antídoto para cultura de culpa.


☕ “Treinar mais” versus “errar menos”

Treinamento é importante.

Mas se 100 pessoas diferentes cometem o mesmo erro:

talvez não precisemos de 101º treinamento.

Talvez precisemos mudar o sistema.


🧠 Fundamental Attribution Error + Authority Gradient

Gerente olha para júnior:

“Ele não teve coragem de falar.”

Talvez.

Mas e se cultura pune discordância?

O comportamento individual foi moldado por autoridade.

Culpamos silêncio.

Ignoramos sistema social que o produziu.


👥 Groupthink

Pessoa concordou com todos.

Depois:

“Ela deveria ter questionado.”

Mas talvez:

cinco especialistas;

um diretor;

pressão de prazo.

O contexto importa.

Isso não remove responsabilidade.

Explica comportamento.


🧠 Omission Bias

Alguém não interrompeu mudança.

Depois:

“faltou iniciativa.”

Talvez.

Mas:

tinha autoridade formal?

Existia stop criterion?

O chefe dizia para continuar?

A omissão pode ter sido consequência do desenho organizacional.


🧠 Action Bias

Outro operador reinicia serviço cedo demais.

Post-mortem:

“impulsivo.”

Mas gerente estava gritando:

“faça alguma coisa!”

A organização recompensa ação visível.

Depois culpa quem agiu.

Interessante.


☕ Incentives matter

Se KPI é:

MTTR baixo,

operador aprende:

restart rápido.

Depois RCA reclama:

“reiniciou cedo demais.”

Talvez o comportamento tenha sido exatamente aquilo que o sistema de incentivos ensinou.


🧠 Goodhart entra pela janela

Se medimos:

tempo até recuperação,

as pessoas otimizam isso.

Talvez sacrificando diagnóstico.

Métrica também cria comportamento.

Não atribua tudo à personalidade.


🌀 Drift Into Failure

Por anos:

atalhos;

pressão;

redução de equipe;

workarounds.

Tudo funciona.

Até alguém erra.

Agora:

“Fulano causou outage.”

Não.

Talvez Fulano tenha sido:

a última peça de uma deriva longa.

Drift Into Failure torna culpa individual particularmente enganosa.


🧠 Normalization of Deviance

Carlos fez mudança manual.

Pergunta:

era exceção?

— Não.

Todo mundo fazia.

Então:

por que quando falha vira:

“Carlos foi imprudente”?

A organização normalizou a prática.

Outcome ruim mudou julgamento.

Outcome Bias aparece.


🧠 Outcome Bias + attribution

Mesma ação.

Operador A faz.

Funciona.

Herói.

Operador B faz.

Falha.

Imprudente.

Mesmo processo.

Resultados diferentes.

Outcome Bias muda julgamento da pessoa.


☕ Sorte e culpa

Às vezes:

o “bom operador” teve sorte.

O “ruim” encontrou condição adversa.

Não significa que competência não exista.

Significa:

avalie processo também.


🧠 Overconfidence do observador

Nós olhamos de fora e pensamos:

“Eu jamais faria isso.”

Tem certeza?

Com:

03:00;

onze horas de plantão;

telefone tocando;

cliente pressionando;

runbook ruim?

Overconfidence pode fazer julgador superestimar seu próprio comportamento hipotético.


👻 Easter Egg nº 2 — Dalek no turno da madrugada

Doctor:

— Você teria apertado o botão errado?

Companion:

— Nunca.

— Mesmo com três Daleks perseguindo você?

— Bem...

— Alarme tocando?

— Talvez...

— Sem dormir há onze horas?

— Certo.

Doctor:

— É extraordinário como nossa personalidade melhora quando imaginamos o passado dos outros.


🧠 Actor-Observer Asymmetry

Um conceito relacionado:

quando avaliamos nosso próprio comportamento, percebemos contexto.

Quando avaliamos o outro, percebemos personalidade.

Eu:

“Atrasei porque trânsito estava horrível.”

Outro:

“Atrasou porque é irresponsável.”

Na War Room:

eu reiniciei cedo porque:

“pressão.”

Ele reiniciou cedo porque:

“é afoito.”

Isso precisa de atenção.


🧠 Self-Serving Bias também pode aparecer

Sucesso:

competência minha.

Falha:

contexto.

Para os outros, podemos inverter.

Esses vieses merecem capítulos próprios.


🎯 Pergunta Bellacosa nº 1

Quando alguém disser:

“Fulano errou.”

Pergunte:

“Que condições tornaram esse erro possível?”


🎯 Pergunta Bellacosa nº 2

“Outra pessoa razoável poderia cometer o mesmo erro nessa interface?”

Se sim:

temos problema sistêmico.


🎯 Pergunta Bellacosa nº 3

“Que barreira deveria ter impedido esse erro de virar incidente?”

Excelente conexão com Swiss Cheese.


🎯 Pergunta Bellacosa nº 4

“O comportamento foi realmente excepcional ou era prática comum?”

Normalization of Deviance.


🧠 Error-producing conditions

Uma investigação madura procura condições que aumentam probabilidade de erro:

  • fadiga;

  • interrupções;

  • ambiguidade;

  • excesso de carga;

  • treinamento insuficiente;

  • documentação ruim;

  • ferramentas confusas;

  • pressão temporal;

  • handoff ruim.

Isso não é desculpa.

É engenharia de fatores humanos.


☕ Fadiga não compila, mas derruba produção

Humano após 12 horas não é o mesmo após 2.

Atenção cai.

Memória de trabalho piora.

Decisão muda.

Se operação depende de perfeição humana em plantões enormes:

o sistema está mal desenhado.


🧠 Shift handover

Incidente atravessa turnos.

Informação se perde.

Novo operador toma decisão errada.

Post-mortem:

“não leu direito.”

Mas handoff era:

chat com 800 mensagens.

Quem desenhou isso?


🧠 Interface design

Botões:

RESTART
RESET
RESTORE

Todos iguais.

Usuário aperta errado.

Culpa?

Talvez interface seja uma máquina de produzir confusão.


🔥 Dangerous defaults

Campo vem pré-selecionado com produção.

Usuário queria homologação.

Clique.

Pronto.

Não diga só:

“faltou atenção.”

Default também escolheu.


🧠 Error-tolerant systems

Sistemas robustos assumem:

humanos:

clicam errado;

digitam errado;

esquecem;

interpretam ambiguamente.

Então criam:

confirmação;

preview;

undo;

rollback.

Resiliência inclui tolerância a erro humano.


☕ Ctrl+Z é civilização

Quanto mais reversível uma ação:

menos erro vira desastre.

O problema não é apenas prevenir todo erro.

Também limitar impacto.


🧠 Blast radius

Por que um operador conseguia:

afetar 100%?

Talvez acesso pudesse limitar por:

região;

partição;

canary.

Se erro individual possui blast radius global:

arquitetura precisa responder.


🔐 Least Privilege

Segurança novamente.

Operador só deveria possuir permissão necessária.

Não para “não confiar”.

Mas para limitar consequência.

Least privilege é uma defesa contra:

erro;

abuso;

comprometimento.


🧠 Two-Person Rule

Mudança irreversível?

Second pair of eyes.

Não porque duas pessoas nunca erram.

Mas porque erros não são perfeitamente correlacionados.

Barreira adicional.

Swiss Cheese.


💻 Code Review

Programador introduziu bug.

“Fulano programou errado.”

Mas:

review passou?

testes passaram?

pipeline?

lint?

unit test?

integration?

Se um bug humano atravessa tudo:

o processo também participa.


🧠 Testing is institutionalized distrust

De forma bem-humorada:

testes existem porque não confiamos nem em nós mesmos.

E isso é ótimo.

Programador profissional sabe:

“Meu código pode estar errado.”

Então automatiza verificação.


☕ Se humanos fossem perfeitos, não precisaríamos de IF

Talvez nem de abend.

Mas infelizmente também perderíamos metade da profissão.


🧠 Fundamental Attribution Error na segurança

Usuário clica phishing.

Post-mortem:

“Usuário não deveria clicar.”

Sim.

Mas:

email passou pelo filtro;

MFA era fraco;

credencial permitia acesso amplo;

monitoramento não detectou.

Treinar usuário ajuda.

Mas não pode ser única camada.


🔐 “Usuário é o elo mais fraco”

Frase comum.

Talvez preguiçosa.

Humano é parte do sistema.

Se sistema depende de nunca clicar em phishing convincente:

design é frágil.


🧠 Just Culture

Uma abordagem madura tenta distinguir:

  • erro humano;

  • comportamento de risco;

  • comportamento deliberadamente imprudente.

Isso evita tratar tudo igualmente.

Erro simples:

melhore sistema.

Comportamento arriscado normalizado:

mude incentivos e processo.

Violação consciente grave:

accountability adequada.

Sem caça às bruxas.

Sem ausência de responsabilidade.


☕ Blameless não significa consequence-less

Outro ponto importante.

Blameless post-mortem significa:

investigar sem assumir culpa como explicação causal.

Não significa:

ninguém responde por violações deliberadas.

Precisamos nuance.


🧠 Safety-II

Uma linha interessante da engenharia de resiliência pergunta não apenas:

“Por que deu errado?”

Mas:

“Como as pessoas conseguem fazer o sistema funcionar normalmente apesar das dificuldades?”

Isso é poderoso.

Porque muitas vezes o mesmo operador chamado de “culpado” estava salvando o sistema todos os dias.


☕ O operador que errou uma vez e salvou mil

Carlos talvez tenha:

feito 5.000 mudanças corretas.

Uma falhou.

Survivorship Bias ao contrário?

Não vemos as milhares de adaptações bem-sucedidas porque viraram rotina.

Só enxergamos uma falha.


🧠 Work-as-Imagined vs Work-as-Done

Procedimento diz:

A → B → C.

Realidade:

A → workaround → B → telefonema → C.

Gestão conhece:

Work-as-Imagined.

Operador vive:

Work-as-Done.

Quando falha:

gestão pergunta:

“Por que não seguiu o processo?”

Talvez porque o processo não descrevia o trabalho real.


🌀 Normalization of Deviance encontra Work-as-Done

Se procedimento oficial é impossível:

equipe adapta.

Adaptação vira normal.

Depois incidente.

Culpa individual.

Muito comum.


🎯 Pergunta Bellacosa nº 5

“O procedimento oficial era realmente executável nas condições reais?”

Excelente.


🧠 Framing Effect

Título do post-mortem:

“Operador derruba produção.”

Pronto.

Frame criado.

Outro:

“Mudança crítica permitia valor fora de faixa sem validação.”

Mesmo fato central.

Outro aprendizado.


🧠 Narrative Bias + framing + attribution

Temos cadeia:

evento.

Narrativa.

Personagem.

culpa.

Agora todas as ações focam:

treinamento do personagem.

Sistemas permanecem iguais.

Próxima pessoa comete mesmo erro.


🔁 Blame Cycle

ERRO
↓
CULPADO
↓
TREINAMENTO
↓
MESMO SISTEMA
↓
OUTRA PESSOA ERRA
↓
NOVO CULPADO

Isso não é melhoria contínua.

É casting.


☕ O departamento de RH não é um sistema de observabilidade

Talvez valha colocar no quadro.


🧠 Root Cause Analysis mais madura

Em vez de:

“Carlos digitou errado.”

Escreva:

TRIGGER:
valor 2500 inserido em MAXTHD

CONTRIBUTING CONDITIONS:
- interface sem range
- runbook ambíguo
- peer review omitido por urgência
- fadiga
- ambiente de teste diferente

FAILED DEFENSES:
- nenhuma validação
- nenhum confirmation gate
- monitoramento tardio

Muito melhor.


🧠 Causal layers

Podemos pensar:

Ação proximal

Valor digitado.

Condições locais

Interface, pressão, documentação.

Condições organizacionais

staffing, governança, incentivos.

Barreiras técnicas

validação, limites, rollback.

Agora temos profundidade.


🧪 Five Whys — com cuidado

Pergunte:

por que valor errado?

Porque operador digitou 2500.

Por quê?

Porque mensagem anterior dizia 2500.

Por quê?

Porque ambiente de teste usava outra escala.

Por quê?

Porque documentação não distinguia ambientes.

Agora chegamos a sistema.

Mas cuidado:

Five Whys pode produzir narrativa linear artificial.

Use como exploração, não verdade absoluta.


🧠 STAMP, FRAM e outros modelos

Existem abordagens sistêmicas mais sofisticadas para incidentes que tratam acidentes como resultado de interações e controles, não apenas falha linear.

Para nosso COBOL iniciante, a ideia importante é:

quanto mais complexo o sistema, menos provável que “uma pessoa errou” seja explicação suficiente.


☕ Não precisamos de PhD para fazer pergunta melhor

Só:

“E o que tornou isso possível?”

Já melhora muito.


🤖 IA e Fundamental Attribution Error

Imagine IA resumindo incidente:

“O operador configurou incorretamente o parâmetro, causando indisponibilidade.”

Tecnicamente pode estar correto.

Mas narrativa automatizada pode apagar contexto.

Se prompt pedir:

“Quem causou?”

a resposta buscará pessoa.

Se pedir:

“Quais condições permitiram o incidente?”

frame muda.


🧠 Prompt para post-mortem assistido por IA

Uma boa pergunta:

“Separe ação humana, condições contribuintes, barreiras ausentes, fatores organizacionais e evidências.”

Isso reduz blame frame.


🤖 Automation Bias + blame

Se ferramenta RCA aponta:

CAUSE: OPERATOR ERROR

usuários podem aceitar.

Mas classificação automática também possui frame.

Pergunte:

quais evidências?

Que condições foram consideradas?


🧠 Bias in incident taxonomy

Se sua ferramenta só possui categorias:

HUMAN ERROR
SOFTWARE
HARDWARE
NETWORK

você força incidentes para caixas simples.

Talvez precise:

contributing factors múltiplos.

Taxonomia influencia pensamento.


☕ Sistemas complexos odeiam dropdowns pequenos

Incidente:

rede + timeout + interface + workload + fadiga.

Dropdown:

“Human Error.”

Pronto.

Conhecimento destruído em 2 bytes.


🧠 Fundamental Attribution Error na carreira

Programador erra produção uma vez.

Rótulo:

“não é confiável.”

Outro acerta várias vezes.

“excelente sob pressão.”

Talvez contexto tenha sido diferente.

Recency Bias + attribution pode afetar carreira.

Isso é sério.


🧠 Performance evaluation

Avalie:

padrões;

contexto;

comportamentos;

aprendizado.

Não transforme um evento em identidade.


👨‍💻 Para o COBOL iniciante

Você vai errar.

Todos erram.

O objetivo profissional não é:

“Nunca errar.”

É:

  • testar;

  • revisar;

  • tornar erro detectável;

  • limitar impacto;

  • aprender rápido.

Um sistema que só funciona se ninguém errar não é robusto.


☕ Senioridade não é imunidade

Sênior também erra.

Às vezes mais perigosamente porque possui mais acesso.

Por isso controles precisam valer para todos.


🧠 Overconfidence + seniority

“Eu não preciso de review.”

Perigoso.

Quanto maior blast radius:

mais valor em barreiras independentes.


🪜 Autoridade também afeta accountability

Chefe manda:

“faça agora.”

Operador executa.

Falha.

Depois:

“você deveria ter recusado.”

Isso é injusto e operacionalmente tóxico.

Decisões precisam ter ownership claro.


🪡 A agulha da seringa novamente

Pedido verbal.

Depois incidente.

Ninguém lembra.

Documentar decisão ajuda não apenas juridicamente.

Ajuda causalidade.

Quem sabia?

Quem decidiu?

Com quais dados?

Isso reduz narrativa posterior conveniente.


📝 Decision Log

03:05
DECISION:
Increase MAXTHD

REQUESTED BY:
Incident Commander

EXECUTED BY:
Carlos

RATIONALE:
Queue saturation

TARGET:
2500 based on test note

Agora post-mortem vê sistema decisório.

Não apenas dedo no teclado.


🧠 Responsibility distribution

Executar não é igual a decidir.

Decidir não é igual a desenhar controle.

Precisamos distinguir.


🔐 Segregation of Duties

Também ajuda.

Quem pede.

Quem aprova.

Quem executa.

Quem valida.

Isso cria barreiras e auditabilidade.


🎯 Pergunta Bellacosa nº 6

“Quem executou a ação e quem criou as condições para que ela fosse escolhida?”

Frequentemente pessoas diferentes.


🧪 Como combater Fundamental Attribution Error

Passo 1 — Descreva comportamento, não personalidade

Não:

“Carlos foi descuidado.”

Use:

“Carlos inseriu 2500 num campo cujo valor esperado era 250.”


Passo 2 — Reconstrua contexto

O que ele sabia?


Passo 3 — Procure pressões

Tempo?

SLA?

Hierarquia?


Passo 4 — Examine interface e ferramentas

Facilitavam erro?


Passo 5 — Procure barreiras

Quais deveriam bloquear?


Passo 6 — Compare com prática real

Era exceção ou rotina?


Passo 7 — Verifique incentivos

O comportamento era recompensado?


Passo 8 — Limite blast radius

Não dependa de perfeição.


Passo 9 — Diferencie erro, risco e violação deliberada

Accountability justa.


Passo 10 — Pergunte como tornar a próxima pessoa mais segura

Essa é a melhoria.


📋 Checklist anti-Fundamental Attribution Error

[ ] Estou descrevendo comportamento ou personalidade?

[ ] O que a pessoa sabia naquele momento?

[ ] Que pressão existia?

[ ] O procedimento era claro?

[ ] A interface favorecia o erro?

[ ] Existia validação automática?

[ ] Existia peer review?

[ ] O comportamento era comum?

[ ] O sistema já havia tolerado isso antes?

[ ] Quais barreiras falharam?

[ ] Quem decidiu e quem executou?

[ ] A pessoa estava fatigada?

[ ] Os incentivos empurravam nessa direção?

[ ] Outra pessoa poderia cometer o mesmo erro?

[ ] Estamos usando “human error” como ponto final?

🧠 Substitution Test

Uma técnica excelente:

substitua a pessoa.

Pergunte:

“Se colocássemos outro profissional competente nas mesmas condições, esse erro ainda seria plausível?”

Se sim:

problema sistêmico forte.

Se não:

investigue diferenças individuais.


☕ Carlos Test

Troque Carlos por:

Maria.

João.

Você.

Se interface continua enganosa:

não era apenas Carlos.


🧠 Counterfactual design

Pergunte:

“Que pequena mudança no sistema teria impedido esse erro?”

Range validation?

Confirm?

Dropdown?

Peer review?

Essa pergunta gera ação concreta.


💡 Strong fix versus weak fix

Fraca

Treinar.

Média

Checklist.

Forte

Validação automática.

Mais forte

Tornar erro impossível.

Nem sempre podemos chegar ao último.

Mas direção importa.


🧠 Human-in-the-loop com design

Não basta dizer:

“tem humano revisando.”

Se humano recebe:

500 alertas;

30 segundos;

informação ruim,

não é controle robusto.

Contexto importa.


🔔 Alarm Fatigue novamente

Operador ignorou alerta.

“Negligente.”

Mas havia:

400 alertas/dia.

O sistema treinou o operador a ignorar.

Alarm Fatigue + attribution.


🧠 Diffusion of Responsibility

Todos receberam alerta.

Ninguém agiu.

Depois:

“ninguém teve iniciativa.”

Mas ownership era ambíguo.

Responsabilidade diluída cria comportamento.


🧠 Status Quo Bias organizacional

Processo ruim existe há anos.

Alguém finalmente falha nele.

A organização culpa indivíduo.

Mais fácil que mudar processo.

Status Quo Bias protege sistema.


💰 Sunk Cost organizacional

Ferramenta ruim custou milhões.

Operadores erram.

Em vez de substituir ferramenta:

“precisamos treinar melhor.”

Talvez sunk cost esteja defendendo design ruim.


🧠 Present Bias

Melhorar interface leva meses.

Treinamento leva duas horas.

Escolhem treinamento.

Custo imediato menor.

Present Bias.

Depois erro reaparece.


🧠 Loss Aversion

Trocar processo pode perder:

produtividade temporária.

Então mantemos.

Mesmo sabendo que produz erro.

Loss Aversion protege falha sistêmica.


🧠 Framing Effect no RCA

Compare:

“Erro do operador causou indisponibilidade.”

versus:

“Ausência de validação permitiu que uma entrada humana incorreta propagasse impacto.”

Ambos reconhecem ação humana.

Mas segundo gera engenharia.


🧠 Narrative Bias novamente

Uma história centrada em pessoa:

simples.

Uma explicação sistêmica:

menos elegante.

Mas frequentemente mais verdadeira.


🧬 Regeneração organizacional

Uma organização madura contra Fundamental Attribution Error:

para de usar “human error” como RCA final;

reconstrói contexto;

distingue execução de decisão;

analisa interfaces;

automatiza validações;

limita privilégios;

usa peer review;

considera fadiga;

revisa incentivos;

melhora work-as-done;

e pratica Just Culture.

Principalmente:

ela troca:

“Quem fez isso?”

por duas perguntas:

“O que aconteceu?”

e:

“Por que esse comportamento fazia sentido naquele contexto?”

Depois vem:

“Como impedimos que um erro parecido tenha o mesmo impacto?”

Isso é melhoria contínua.


📓 Diário do Doctor

Se guardar algumas ideias desta viagem, guarde estas:

Fundamental Attribution Error é a tendência de explicar erros dos outros pela personalidade e subestimar contexto e situação.

“Human error” raramente é uma root cause suficiente.

Entender contexto não elimina accountability.

Swiss Cheese mostra que um erro individual costuma atravessar várias barreiras ausentes ou falhas.

Hindsight Bias faz o erro parecer mais óbvio depois do resultado.

Narrative Bias procura um personagem para simplificar a história.

Normalization of Deviance pode transformar uma prática comum em “imprudência individual” apenas depois que dá errado.

Outcome Bias pode chamar a mesma ação de heroísmo quando funciona e incompetência quando falha.

Interfaces, processos, fadiga, pressão, incentivos e hierarquia moldam comportamento.

Poka-Yoke, validação, reversibilidade e blast radius menor são defesas melhores que “preste mais atenção”.

Just Culture distingue erro humano, comportamento arriscado e violação deliberada.

E principalmente:

Não pergunte apenas por que uma pessoa errou. Pergunte por que o sistema precisava que ela fosse perfeita para continuar seguro.


🕰️ De volta às 03:41

Post-mortem.

Primeira versão:

ROOT CAUSE:
OPERATOR ERROR

Nosso programador apaga.

Escreve:

TRIGGER:
MAXTHD changed from 250 to 2500.

CONTRIBUTING CONDITIONS:
- no range validation
- ambiguous runbook
- stale test-environment note
- no peer review during emergency change
- 11-hour shift
- pressure to restore service

FAILED DEFENSES:
- interface accepted unsafe value
- no confirmation
- monitoring detected impact late

Carlos olha.

— Então não foi culpa minha?

O Doctor responde:

— Você digitou o valor.

Carlos baixa os olhos.

— Então foi.

— Você participou.

Pausa.

— Mas uma investigação útil não termina aí.

O gerente pergunta:

— Qual a diferença?

Nosso programador responde:

— Se dissermos só “Carlos errou”, a próxima pessoa pode errar de novo.

— E se mudarmos tudo isso?

— A próxima pessoa pode continuar humana sem derrubar produção.

O Doctor sorri.

— Exatamente.


🔧 Um mês depois

A tela de configuração mudou.

Agora:

MAXTHD

CURRENT:
250

ALLOWED:
100–500

NEW VALUE:
____

CHANGE > 25% REQUIRES:
SECOND APPROVER

Carlos digita:

2500

Mensagem:

VALUE OUTSIDE SAFE RANGE.

CHANGE REJECTED.

Nada acontece.

Nenhuma War Room.

Nenhum diretor acordado.

Nenhum culpado.

Apenas um erro humano normal...

interrompido por um sistema que finalmente decidiu ajudar.


🥚 Easter Egg final

Na manhã seguinte aparece:

BELLACOSA.BIAS(ATTRIBUTION)

Dentro:

       IF PERSON-MADE-ERROR
           PERFORM CHECK-CONTEXT
           PERFORM CHECK-FAILED-BARRIERS
       END-IF.

       IF RCA = 'HUMAN-ERROR'
           PERFORM ASK-WHY-AGAIN
       END-IF.

       IF SAME-ERROR
          COULD-HAPPEN-TO-ANOTHER-PERSON
           PERFORM FIX-THE-SYSTEM
       END-IF.

Comentário:

* PEOPLE MAKE MISTAKES.
* SYSTEMS DECIDE
* HOW EXPENSIVE THEY BECOME.

Outro:

* "BE MORE CAREFUL"
* IS NOT HIGH AVAILABILITY.

Mais um:

* BLAME FINDS A PERSON.
* ENGINEERING FINDS A CONTROL.

E naturalmente:

* BAD WOLF WAS NOT
* A TRAINING ISSUE.

Nosso jovem fecha o membro.

Horas depois chega outro incidente.

Um analista pergunta:

— Quem fez essa alteração?

Ele responde:

— Vamos descobrir.

— Para responsabilizar?

— Também precisamos saber quem executou.

— Então?

Ele abre o change record.

— Mas primeiro quero entender o que tornou essa alteração possível, razoável e perigosa.

O colega olha.

— Isso dá mais trabalho.

Ele sorri.

— Dá.

Pausa.

— Culpar alguém é muito mais rápido.

— Então por que não fazemos isso?

Ele aponta para produção.

— Porque queremos que o próximo incidente seja menos provável, não apenas que o próximo relatório tenha um nome.

VWORP.

VWORP.

VWORP.

A TARDIS desaparece.

No quadro da War Room fica:

Pessoas cometem erros. Sistemas resilientes impedem que um erro comum precise de uma pessoa extraordinária para ser evitado.

E talvez essa seja uma das lições mais importantes de toda a nossa viagem:

o objetivo de um post-mortem não é descobrir quem merece carregar o incidente. É descobrir o que precisa mudar para que ninguém precise carregá-lo novamente.

☕🌀

Next stop: Self-Serving Bias — quando o sucesso é “mérito da nossa competência”, mas o fracasso vira culpa do fornecedor, do prazo, do usuário, da rede, da lua cheia ou de qualquer outra coisa que preserve nossa autoimagem.

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...