Translate

domingo, 9 de agosto de 2015

PLATOON Z/OS — A Patrulha que Entrou Frágil no Batch e Saiu Antifrágil

 

Bellacosa Mainframe e o platoon zos entnda vuca bani fragil antifragil e cisnes negros

☕ Um Café no Bellacosa Mainframe

PLATOON Z/OS — A Patrulha que Entrou Frágil no Batch e Saiu Antifrágil

Como resiliência, antifragilidade, VUCA, BANI e Cisnes Negros explicam a sobrevivência de sistemas que processam bilhões enquanto o mundo dorme

Às 02h17 da madrugada, o datacenter não parecia uma sala de computadores.

Parecia uma selva.

As luzes dos painéis piscavam como vaga-lumes eletrônicos. O ar-condicionado soprava com a insistência de um helicóptero distante. Nos monitores do NOC, milhares de jobs atravessavam o JES2 como pelotões marchando em direção a objetivos que nenhum deles compreendia completamente.

Cada JOB carregava sua missão.

Cada STEP tinha uma responsabilidade.

Cada dataset era uma caixa de munição que não podia desaparecer.

E cada return code poderia decidir quem continuaria avançando e quem ficaria abandonado no spool.

Naquela noite, um jovem programador COBOL chamado Charlie Bell recebeu sua primeira missão crítica em produção.

Seu supervisor apontou para a tela e disse:

— O fechamento bancário está atrasado.

Charlie olhou para o relógio.

02:18.

Depois olhou para o SDSF.

JOBNAME   STATUS   RC
PAYBATCH  ABEND    S0C7

O silêncio que se seguiu foi mais assustador do que qualquer alarme.

Havia uma coisa que Charlie ainda não sabia, mas aprenderia antes do amanhecer:

No mainframe, sobreviver a uma falha não é suficiente.
É preciso voltar melhor do que se entrou.


1. O primeiro inimigo: a fragilidade invisível

Charlie abriu o job log.

O programa havia processado 18 milhões de registros corretamente. No registro seguinte, encontrou um campo numérico contendo caracteres inválidos.

O código executou:

ADD WS-VALOR-ENTRADA TO WS-TOTAL.

Só que WS-VALOR-ENTRADA, definida como numérica, havia recebido:

00012A50

O resultado foi o inevitável:

S0C7 - DATA EXCEPTION

O programa morrera por causa de uma única letra.

Dezoito milhões de registros atravessaram o campo de batalha sem problemas. Bastou um registro contaminado para derrubar toda a unidade.

Aquilo era fragilidade.

Um sistema frágil pode funcionar por anos. Ele parece estável, eficiente e confiável. Mas sua estabilidade depende de uma condição perigosa:

Nada inesperado pode acontecer.

O programa de Charlie supunha que todos os registros seriam válidos.

Não havia:

  • validação antes do cálculo;

  • registro de rejeitados;

  • mecanismo de checkpoint;

  • possibilidade de continuar após um erro;

  • identificação rápida do registro causador;

  • estatística de qualidade da entrada.

Era como uma ponte de cristal sobre a qual passavam milhares de veículos todos os dias.

O fato de ainda não ter quebrado não significava que fosse forte.

Significava apenas que o golpe certo ainda não havia chegado.

Fragilidade no mundo COBOL

Para um programador iniciante, a fragilidade aparece em lugares aparentemente inocentes:

MOVE CAMPO-ALFANUMERICO TO CAMPO-NUMERICO.
READ ARQUIVO-CLIENTES.
PERFORM PROCESSAR-REGISTRO
    UNTIL WS-FIM-ARQUIVO = 'S'.

Os comandos não estão errados por si mesmos. O perigo está nas premissas escondidas.

O campo sempre será numérico?

O arquivo sempre existirá?

O READ sempre retornará 00?

A chave sempre será encontrada?

O volume sempre caberá no espaço alocado?

O programa sempre terminará dentro da janela?

A fragilidade é frequentemente uma coleção de frases começando com:

“Isso nunca acontece.”

No mainframe, “nunca” é apenas um incidente que ainda não recebeu número de chamado.


2. Frágil, robusto, resiliente e antifrágil

O comandante da madrugada, um veterano conhecido como Sargento Abend, aproximou-se da estação de Charlie.

Ele havia sobrevivido a migrações, conversões de moeda, bugs de ano bissexto, viradas de versão do Db2 e a três projetos anunciados como “o fim definitivo do mainframe”.

Apontou para o S0C7 e perguntou:

— O que você pretende fazer?

— Corrigir o dado e reiniciar o job.

— Isso é recuperação. Mas o que impedirá o próximo dado inválido?

Charlie ficou calado.

O Sargento Abend pegou um marcador e desenhou quatro palavras em um quadro:

FRÁGIL
ROBUSTO
RESILIENTE
ANTIFRÁGIL

Frágil: quebra com o choque

Um programa frágil funciona apenas enquanto o ambiente respeita suas expectativas.

Exemplo:

COMPUTE WS-MEDIA =
        WS-TOTAL / WS-QUANTIDADE.

Se WS-QUANTIDADE for zero, o programa poderá sofrer uma exceção.

O código pressupôs que sempre existiria pelo menos um item.

A entrada inesperada revelou a fragilidade.

Robusto: suporta o choque

Um sistema robusto possui força suficiente para permanecer praticamente inalterado.

Exemplo:

IF WS-QUANTIDADE NOT = ZERO
    COMPUTE WS-MEDIA =
            WS-TOTAL / WS-QUANTIDADE
ELSE
    MOVE ZERO TO WS-MEDIA
END-IF.

Agora o programa não quebra com a divisão por zero.

Ele suporta a condição adversa.

Mas apenas suportar não significa aprender.

Resiliente: sofre, recupera-se e retorna

Um sistema resiliente pode falhar parcialmente, mas possui meios de retornar ao serviço.

No batch, isso pode envolver:

  • checkpoint;

  • restart;

  • arquivos de controle;

  • commits intermediários;

  • GDGs;

  • cópias de segurança;

  • steps reiniciáveis;

  • datasets temporários preservados;

  • lógica para evitar duplicidade.

Um job resiliente não precisa reprocessar 18 milhões de registros porque falhou no registro 18.000.001.

Ele sabe onde estava.

Ele consegue retomar.

Antifrágil: melhora depois do choque

O antifrágil vai além.

Depois do S0C7, a equipe não apenas corrige o registro.

Ela transforma o incidente em uma melhoria permanente:

  1. cria validação de dados;

  2. isola registros inválidos;

  3. gera relatório de rejeitados;

  4. adiciona métricas;

  5. implementa checkpoint;

  6. revisa outros programas com o mesmo padrão;

  7. cria teste automatizado;

  8. documenta a causa;

  9. atualiza o runbook;

  10. monitora a qualidade da origem.

O próximo dado inválido não encontra o mesmo sistema.

Ele encontra um sistema que aprendeu.


3. A batalha entre voltar e evoluir

Resiliência e antifragilidade são parentes, mas não são gêmeas.

A resiliência diz:

“Fui atingido, mas consegui voltar.”

A antifragilidade diz:

“Fui atingido, descobri onde era vulnerável e transformei a cicatriz em blindagem.”

Imagine um CICS que sofre indisponibilidade porque uma região AOR atingiu seu limite de tarefas.

Uma resposta resiliente poderia ser:

  • reiniciar a região;

  • redirecionar transações;

  • restaurar o serviço;

  • limpar filas;

  • normalizar o processamento.

Excelente. O ambiente voltou.

Mas uma resposta antifrágil investigaria:

  • por que o MXT foi atingido;

  • quais transações ficaram suspensas;

  • se houve contenção de recursos;

  • se o tempo de resposta cresceu antes da falha;

  • se alertas poderiam ter sido disparados;

  • se o CPSM poderia distribuir melhor a carga;

  • se determinada transação deveria possuir limite próprio;

  • se os dados SMF já indicavam a aproximação do problema.

A recuperação devolve o sistema ao estado anterior.

O aprendizado muda o estado futuro.

No campo de batalha digital, uma tropa que apenas substitui soldados sem mudar sua estratégia continuará caindo no mesmo lugar.


4. O Cisne Negro entrou no CPD

Às 03h02, enquanto Charlie analisava o dump, o telefone da operação tocou.

Um sistema externo enviara um arquivo três vezes maior do que o habitual. Ninguém havia sido avisado. A campanha promocional que gerara o volume fora criada por uma área de negócios sem comunicação com a equipe técnica.

O arquivo maior provocou:

  • aumento do tempo de leitura;

  • crescimento de arquivos temporários;

  • pressão sobre sort work;

  • atraso nos jobs dependentes;

  • acúmulo de mensagens;

  • ultrapassagem da janela batch.

Para a equipe de operações, aquele aumento parecia um Cisne Negro.

Um evento inesperado, de alto impacto, fora do radar daquelas pessoas.

Mas havia uma sutileza.

Para a área de marketing, o crescimento não era imprevisível. A campanha havia sido planejada.

Isso ensina algo importante:

Um Cisne Negro depende também da perspectiva do observador.

O evento pode ser inesperado para o CPD e perfeitamente conhecido por outra área.

Muitos supostos eventos imprevisíveis são, na realidade, falhas de comunicação, governança ou observabilidade.

Depois do problema, todos dizem:

— Era evidente que o volume aumentaria.

Essa é a racionalização posterior.

Depois que o cisne aparece, parece fácil explicar por que ele sempre esteve ali.

O erro de tentar prever tudo

Não existe ferramenta capaz de prever cada:

  • crise;

  • falha;

  • ataque;

  • alteração regulatória;

  • comportamento de cliente;

  • ruptura de fornecedor;

  • crescimento inesperado;

  • defeito escondido.

Portanto, a estratégia madura não consiste apenas em tentar adivinhar o próximo evento.

Consiste em construir um ambiente capaz de:

  • absorver impactos;

  • limitar danos;

  • manter serviços essenciais;

  • recuperar dados;

  • alterar prioridades;

  • aprender rapidamente;

  • explorar oportunidades surgidas durante a crise.

No mainframe, isso significa projetar para o inesperado, e não apenas para o cenário ideal.


5. VUCA: a selva onde o mainframe opera

O pelotão de Charlie atravessava um ambiente VUCA.

VUCA significa:

V – Volatility     – Volatilidade
U – Uncertainty    – Incerteza
C – Complexity     – Complexidade
A – Ambiguity      – Ambiguidade

Volatilidade: o volume muda sem pedir licença

Hoje o sistema processa um milhão de transações.

Amanhã, quinze milhões.

Um PIX coletivo, uma promoção, uma mudança de tarifa ou uma crise pode alterar o comportamento do processamento em minutos.

No mainframe, a volatilidade afeta:

  • CPU;

  • MSU;

  • memória;

  • buffers;

  • filas;

  • conexões;

  • datasets;

  • sort work;

  • janela batch;

  • consumo de serviço externo.

Como reagir

O programador iniciante deve aprender a não construir programas limitados apenas ao volume atual.

Algumas perguntas úteis:

  • O contador suporta o crescimento?

  • O campo PIC é grande o suficiente?

  • O total pode ultrapassar o limite?

  • O arquivo poderá ter milhões de registros?

  • O processamento pode ser dividido?

  • Existe gargalo em operações repetitivas?

  • O programa grava DISPLAY para cada registro?

  • Há commits demais ou de menos?

Considere:

01 WS-CONTADOR PIC 9(05).

Esse contador suporta até 99.999.

Talvez funcione hoje.

Mas, se o arquivo crescer para 100.000 registros, o contador poderá sofrer truncamento ou comportamento inadequado, dependendo do uso.

Uma definição mais prudente poderia ser:

01 WS-CONTADOR PIC 9(09) COMP-5 VALUE ZERO.

Não se trata de tornar tudo gigantesco. Trata-se de dimensionar com consciência.


Incerteza: não sabemos exatamente o que virá

O requisito ainda pode mudar.

A origem do dado pode alterar o layout.

Uma API pode ficar indisponível.

O negócio pode criar uma nova categoria.

O programa iniciante costuma tentar eliminar toda incerteza antes de começar.

O profissional experiente aceita que parte dela continuará existindo.

Por isso, ele cria:

  • validações;

  • parâmetros;

  • tabelas de configuração;

  • mensagens claras;

  • códigos de retorno;

  • interfaces versionadas;

  • tratamento de exceções;

  • pontos de observação.

Um programa cheio de valores fixos é uma armadilha.

IF WS-LIMITE > 5000

Por que 5000?

Quem definiu?

Quando mudará?

Seria melhor manter o valor em uma tabela, arquivo de parâmetros ou mecanismo de configuração apropriado.

A incerteza não desaparece. Mas o custo de adaptação pode ser reduzido.


Complexidade: tudo está ligado a tudo

Charlie pensava que estava investigando apenas um programa COBOL.

Logo descobriu que o job dependia de:

  • arquivo vindo de Linux;

  • transferência por Connect:Direct;

  • catálogo de datasets;

  • SMS;

  • DFSORT;

  • programa COBOL;

  • tabela Db2;

  • fila MQ;

  • transação CICS;

  • API consumida por mobile banking;

  • relatório enviado para outro sistema.

O S0C7 era apenas o primeiro cadáver encontrado na selva.

Sistemas mainframe raramente existem sozinhos.

A complexidade nasce das interações.

Um programa pode estar correto isoladamente e ainda provocar um incidente quando combinado com:

  • volume;

  • concorrência;

  • locks;

  • ordem de execução;

  • formato de dados;

  • timezone;

  • encoding;

  • dependências externas.

Dica de sobrevivência

Mapeie o fluxo:

Origem
   ↓
Transferência
   ↓
Validação
   ↓
Programa COBOL
   ↓
Db2 / VSAM
   ↓
MQ
   ↓
CICS
   ↓
API
   ↓
Usuário

Quando você enxerga apenas seu código, cada falha parece misteriosa.

Quando enxerga o sistema inteiro, as pistas começam a falar.


Ambiguidade: o requisito possui duas interpretações

O analista escreveu:

“Clientes com saldo superior a R$ 10.000 recebem tratamento especial.”

Charlie perguntou:

— Saldo atual, saldo médio ou saldo disponível?

Ninguém soube responder.

A ambiguidade surge quando a mesma frase permite múltiplas interpretações.

No COBOL, ambiguidade de negócio é mais perigosa do que ambiguidade sintática.

O compilador rejeita um comando malformado.

Mas aceita perfeitamente uma regra de negócio incorreta.

IF SALDO-CLIENTE > 10000
    MOVE 'S' TO CLIENTE-ESPECIAL
END-IF.

O código compila.

O problema é que talvez ninguém saiba o que SALDO-CLIENTE realmente representa.

Como reduzir a ambiguidade

  • pergunte;

  • escreva exemplos;

  • defina casos-limite;

  • registre premissas;

  • confirme resultados esperados;

  • crie testes com valores próximos à fronteira.

Exemplo:

R$ 9.999,99  → Não especial
R$ 10.000,00 → Não especial
R$ 10.000,01 → Especial

Ou seria >= 10000?

Uma única condição pode alterar milhares de clientes.


6. BANI: quando a selva também entra na mente

Se VUCA descreve a natureza instável do ambiente, BANI ajuda a compreender como sistemas e pessoas reagem.

B – Brittle           – Frágil
A – Anxious           – Ansioso
N – Non-linear        – Não linear
I – Incomprehensible  – Incompreensível

Brittle: sólido por fora, quebradiço por dentro

O sistema de Charlie parecia confiável.

Executava havia 12 anos.

Mas dependia de:

  • um único especialista;

  • um layout não documentado;

  • espaço de disco calculado em 2018;

  • um programa sem testes automatizados;

  • uma PROC alterada manualmente;

  • um fornecedor externo sem acordo de volume.

Era um castelo pintado sobre vidro.

A fragilidade pode esconder-se atrás de anos de sucesso.

Quanto mais tempo um sistema funciona sem incidentes, maior pode ser a tentação de acreditar que ele é invulnerável.

Esse é o momento mais perigoso.


Anxious: todos recebem alarmes, ninguém sabe agir

Às 03h20, os grupos de mensagens explodiram.

URGENTE
CRÍTICO
PRIORIDADE MÁXIMA
PRECISAMOS DE POSIÇÃO
ALGUMA NOVIDADE?

A cada dois minutos alguém perguntava quando o problema seria resolvido.

A equipe precisava investigar, mas era interrompida por solicitações de atualização.

Isso é ansiedade operacional.

Um ambiente com alarmes demais produz cegueira.

Se tudo é crítico, nada é realmente priorizado.

A solução não é exigir que os profissionais “sejam mais fortes”.

É construir:

  • papéis claros;

  • canal único de comando;

  • periodicidade de atualização;

  • classificação de severidade;

  • runbooks;

  • observabilidade útil;

  • comunicação objetiva.

Em incidentes graves, uma pessoa deve investigar enquanto outra comunica.

Colocar o mesmo técnico para diagnosticar, corrigir, responder mensagens, participar de reunião e preencher planilha é transformar um problema técnico em colapso humano.


Non-linear: uma letra derrubou milhões de registros

O S0C7 nasceu de um caractere.

Uma única letra produziu impacto sobre milhões de transações.

Essa é a não linearidade:

Causa pequena
≠
Efeito pequeno

Outros exemplos:

  • um DDNAME incorreto impede um fechamento;

  • uma chave duplicada interrompe carga VSAM;

  • um lock esquecido bloqueia milhares de usuários;

  • um commit mal dimensionado degrada todo o Db2;

  • um DISPLAY dentro de loop lota o spool;

  • um campo aumentado quebra dezenas de programas;

  • uma condição > em vez de >= altera resultados financeiros.

Em sistemas não lineares, pequenas mudanças exigem respeito.

Nunca diga:

“É só uma linha.”

Uma linha pode ser a porta de entrada de um exército inteiro.


Incomprehensible: o sistema funciona, mas ninguém sabe por quê

O programa possuía 27 mil linhas.

Algumas rotinas eram chamadas por GO TO.

Havia COPYBOOKs dentro de COPYBOOKs.

Campos chamados:

WS-AUX1
WS-AUX2
WS-FLAG-X
WS-CONTROLE
WS-AREA

Ninguém sabia exatamente por que determinado trecho existia.

Mas todos tinham medo de removê-lo.

Esse é o território do incompreensível.

Não significa que o sistema seja mágico.

Significa que seu conhecimento foi perdido, fragmentado ou escondido.

Como lutar contra isso

  • nomes significativos;

  • documentação próxima ao código;

  • testes;

  • mapas de chamadas;

  • análise de impacto;

  • comentários úteis;

  • redução de duplicidade;

  • revisão periódica;

  • transferência de conhecimento.

Evite comentários como:

* MOVE O VALOR PARA WS-VALOR
MOVE VALOR-ENTRADA TO WS-VALOR.

O comentário apenas repete o código.

Prefira explicar a razão:

* Preserva o valor original porque a rotina de cálculo
* converte o campo para centavos e altera seu conteúdo.
MOVE VALOR-ENTRADA TO WS-VALOR-ORIGINAL.

O código mostra o que acontece.

O comentário deve explicar por quê.


7. Transformando o programa em um sobrevivente

O Sargento Abend pediu a Charlie que corrigisse o programa, mas proibiu uma solução limitada ao registro defeituoso.

A missão era torná-lo melhor.

Passo 1 — Verificar o FILE STATUS

Todo arquivo deveria possuir um campo de status.

SELECT ARQ-ENTRADA
    ASSIGN TO DDENTRA
    ORGANIZATION IS SEQUENTIAL
    FILE STATUS IS WS-FS-ENTRADA.
01 WS-FS-ENTRADA PIC XX VALUE SPACES.

Na abertura:

OPEN INPUT ARQ-ENTRADA

IF WS-FS-ENTRADA NOT = '00'
    DISPLAY 'ERRO OPEN DDENTRA. FILE STATUS: '
            WS-FS-ENTRADA
    MOVE 12 TO RETURN-CODE
    GOBACK
END-IF.

Nunca presuma que o arquivo abriu.

Pergunte ao sistema.

O FILE STATUS é a testemunha silenciosa de cada operação.


Passo 2 — Controlar corretamente o fim do arquivo

PERFORM LER-ENTRADA

PERFORM UNTIL WS-FIM-ARQUIVO = 'S'
    PERFORM PROCESSAR-REGISTRO
    PERFORM LER-ENTRADA
END-PERFORM.
LER-ENTRADA.
    READ ARQ-ENTRADA
        AT END
            MOVE 'S' TO WS-FIM-ARQUIVO
        NOT AT END
            ADD 1 TO WS-LIDOS
    END-READ

    IF WS-FS-ENTRADA NOT = '00'
       AND WS-FS-ENTRADA NOT = '10'
        DISPLAY 'ERRO READ. FILE STATUS: '
                WS-FS-ENTRADA
        MOVE 12 TO RETURN-CODE
        MOVE 'S' TO WS-FIM-ARQUIVO
    END-IF.

O status 10 normalmente indica fim lógico de arquivo em processamento sequencial.

O programa não deve tratar EOF como desastre.

O fim do arquivo não é um inimigo. É o ponto de extração da patrulha.


Passo 3 — Validar antes de calcular

IF CAMPO-VALOR NUMERIC
    MOVE CAMPO-VALOR TO WS-VALOR
    ADD WS-VALOR TO WS-TOTAL
    ADD 1 TO WS-PROCESSADOS
ELSE
    ADD 1 TO WS-REJEITADOS
    PERFORM GRAVAR-REJEITADO
END-IF.

A validação impede que um registro inválido derrube todo o pelotão.

Mas cuidado: NUMERIC precisa ser usado de acordo com a representação real do campo. Dados em formatos compactados, binários ou contendo sinal requerem entendimento do layout e do compilador.

Um bom programador não usa uma condição apenas porque ela parece correta.

Ele verifica como o dado está armazenado.


Passo 4 — Separar rejeição de falha estrutural

Nem todo erro de dado precisa encerrar o batch.

Podemos classificar:

Erro de registro

  • CPF inválido;

  • valor não numérico;

  • data impossível;

  • código desconhecido.

O programa pode rejeitar o registro e continuar, conforme a regra de negócio.

Erro estrutural

  • arquivo ausente;

  • LRECL incompatível;

  • falha de escrita;

  • tabela indisponível;

  • corrupção de dataset;

  • erro de autorização.

Esses casos podem exigir encerramento controlado.

O segredo é não tratar todos os problemas da mesma maneira.


Passo 5 — Criar resumo operacional

Ao terminar:

DISPLAY '--------------------------------'
DISPLAY 'RESUMO DO PROCESSAMENTO'
DISPLAY 'REGISTROS LIDOS       : ' WS-LIDOS
DISPLAY 'REGISTROS PROCESSADOS : ' WS-PROCESSADOS
DISPLAY 'REGISTROS REJEITADOS  : ' WS-REJEITADOS
DISPLAY '--------------------------------'

Isso melhora a observabilidade.

Entretanto, não faça DISPLAY de cada registro em produção sem necessidade. Milhões de mensagens podem inflar o spool, prejudicar performance e criar outro incidente.

A observabilidade deve iluminar.

Não incendiar a floresta.


8. Checkpoint e restart: ninguém deve atravessar a selva duas vezes

Reprocessar milhões de registros pode:

  • ultrapassar a janela;

  • duplicar atualizações;

  • consumir CPU;

  • gerar inconsistência;

  • atrasar sistemas dependentes.

Um mecanismo de checkpoint registra o progresso.

Pode armazenar:

  • número do último registro;

  • última chave;

  • posição lógica;

  • quantidade processada;

  • identificador do ciclo;

  • timestamp;

  • estado do processamento.

Exemplo conceitual:

JOB: PAYBATCH
CICLO: 20260729
ULTIMA-CHAVE: 000184725991
PROCESSADOS: 18000000
STATUS: EM-PROCESSAMENTO

Na retomada, o programa consulta o checkpoint e continua do ponto adequado.

Mas checkpoint exige cuidado.

O ponto salvo deve estar sincronizado com as atualizações realizadas.

Se o programa grava o checkpoint antes do commit, pode pular dados.

Se grava depois, pode reprocessar alguns registros.

Em Db2, a unidade de commit deve ser coerente com o registro de retomada.

Em VSAM e arquivos, talvez seja necessário usar arquivos de controle, marcações ou desenho específico de restart.

Resiliência não nasce de uma palavra.

Nasce de consistência entre:

Dados
Checkpoint
Commit
Saída
Estado

9. O perigo do herói único

Às 04h06, Charlie perguntou:

— Quem conhece a rotina de fechamento?

Responderam:

— O Nogueira.

— Onde ele está?

— Em férias, sem acesso ao celular.

A organização descobriu um ponto único de falha humano.

Sistemas robustos podem ser operados por equipes frágeis.

Isso ocorre quando:

  • só uma pessoa conhece a aplicação;

  • senhas dependem de um administrador;

  • o restart existe apenas na memória de alguém;

  • decisões não são documentadas;

  • não há substituição;

  • não existe treinamento cruzado.

A antifragilidade exige distribuir conhecimento.

Não significa que todos devem conhecer tudo.

Significa que nenhuma função crítica deveria depender exclusivamente da presença de uma pessoa.

O verdadeiro legado não é ser indispensável.

É construir algo que continue funcionando quando você não estiver na sala.


10. Pequenas falhas controladas evitam grandes derrotas

O pelotão decidiu criar exercícios periódicos.

Não esperaria a próxima madrugada crítica para descobrir se a recuperação funcionava.

Foram planejados testes de:

  • ausência de arquivo;

  • registro inválido;

  • dataset cheio;

  • duplicidade de chave;

  • timeout;

  • indisponibilidade de tabela;

  • falha após commit;

  • falha antes do checkpoint;

  • aumento de volume;

  • restart intermediário.

Essa prática se aproxima da engenharia do caos, desde que executada com limites e segurança.

O objetivo não é quebrar produção por diversão.

É criar perturbações controladas em ambientes adequados para descobrir fragilidades antes que o inimigo real as encontre.

Regra do estressor útil

Um estressor só fortalece quando:

  • o impacto é limitado;

  • existe observação;

  • ocorre aprendizado;

  • há tempo para recuperação;

  • ações corretivas são implementadas.

Falhar sem aprender não é antifragilidade.

É apenas desorganização.


11. Redundância: o que o corte de custos não enxerga

Um gerente pode olhar para dois caminhos de rede e perguntar:

— Por que pagamos por dois se usamos apenas um?

Pode olhar para dois especialistas e dizer:

— Por que duas pessoas conhecem o mesmo processo?

Pode olhar para capacidade ociosa e concluir:

— Estamos desperdiçando recursos.

Até o dia em que o caminho principal cai, o especialista adoece ou o volume dobra.

Redundância parece desperdício durante a normalidade.

Durante a crise, torna-se sobrevivência.

No mainframe, exemplos incluem:

  • múltiplas LPARs;

  • Parallel Sysplex;

  • caminhos redundantes;

  • replicação;

  • GDPS;

  • clusters MQ;

  • CICSplex;

  • cópias de segurança;

  • armazenamento espelhado;

  • profissionais treinados em mais de uma função.

Contudo, redundância precisa ser testada.

Um backup que nunca foi restaurado é apenas uma esperança armazenada.

Um site alternativo que nunca assumiu carga é apenas uma apresentação de PowerPoint.

Uma pessoa indicada como substituta, mas sem acesso nem treinamento, não é redundância.

É decoração organizacional.


12. O mainframe já é antifrágil?

Aqui existe uma curiosidade importante.

O IBM Z é reconhecido por recursos de disponibilidade, recuperação, particionamento, integridade e continuidade.

Mas isso não significa que qualquer aplicação executada nele seja automaticamente antifrágil.

Uma aplicação COBOL ruim continua ruim em um hardware excelente.

O mainframe pode oferecer:

  • isolamento;

  • logs;

  • segurança;

  • recuperação;

  • alta disponibilidade;

  • gerenciamento de workload;

  • consistência transacional.

Mas a aplicação ainda precisa utilizar esses recursos corretamente.

Um programa que ignora FILE STATUS, não verifica SQLCODE, não trata RESP do CICS e não possui restart pode transformar uma plataforma robusta em uma operação frágil.

A tecnologia oferece a fortaleza.

O código decide se a porta ficará aberta.


13. Easter egg: o soldado chamado RETURN-CODE

No fim de cada missão batch existe um pequeno mensageiro.

Ele se chama:

RETURN-CODE

Muitos iniciantes o tratam como detalhe.

Mas ele comunica ao JCL se a missão terminou com sucesso.

MOVE 0 TO RETURN-CODE.
MOVE 4 TO RETURN-CODE.
MOVE 8 TO RETURN-CODE.
MOVE 12 TO RETURN-CODE.

A interpretação exata depende dos padrões da organização, mas uma convenção comum é:

00 – Sucesso
04 – Alerta ou ocorrência não fatal
08 – Erro funcional
12 – Erro grave
16 – Falha crítica

O JCL pode decidir o próximo passo:

// IF (STEP01.RC = 0) THEN
//STEP02 EXEC PGM=PROXIMO
// ELSE
//ERRO   EXEC PGM=TRATAERR
// ENDIF

Esse é o easter egg: o humilde RETURN-CODE é o rádio pelo qual o programa COBOL informa ao comandante do batch se a unidade pode avançar.

Sem essa comunicação, o JCL pode continuar executando steps sobre dados incompletos.


14. A diferença entre sobreviver e aprender

Às 05h31, o programa corrigido começou a rodar.

O registro inválido foi separado.

O processamento continuou.

O resumo operacional mostrou:

REGISTROS LIDOS       : 24.813.407
REGISTROS PROCESSADOS : 24.813.406
REGISTROS REJEITADOS  : 1
RETURN-CODE            : 4

O job terminou.

Mas a missão ainda não.

Na manhã seguinte, a equipe realizou uma análise do incidente.

Não perguntou apenas:

— Quem colocou a letra no campo?

Perguntou:

  • Por que o dado inválido atravessou as validações anteriores?

  • Por que um registro derrubou o arquivo inteiro?

  • Por que não havia checkpoint?

  • Por que o aumento de volume não foi comunicado?

  • Por que os alertas não anteciparam o atraso?

  • Por que apenas uma pessoa conhecia o restart?

  • Que outros programas possuem o mesmo risco?

Essa mudança de perguntas separa uma cultura de culpa de uma cultura de aprendizado.

Encontrar um culpado pode encerrar uma reunião.

Encontrar a fragilidade pode evitar cem novos incidentes.


15. Manual de campo para o programador COBOL iniciante

Antes de considerar um programa pronto para atravessar a selva de produção, verifique:

Arquivos

  • todos possuem FILE STATUS;

  • OPEN, READ, WRITE, REWRITE e CLOSE são verificados;

  • EOF é tratado;

  • registros inválidos não provocam comportamento indefinido;

  • arquivos de saída possuem controle de criação;

  • layouts e LRECL estão documentados.

Dados

  • campos numéricos são validados;

  • tamanhos suportam crescimento razoável;

  • sinais e casas decimais estão corretos;

  • datas possuem validação;

  • valores-limite são testados;

  • conversões não provocam truncamento.

Processamento

  • loops possuem condição clara de término;

  • contadores não estouram;

  • divisões verificam zero;

  • erros são classificados;

  • mensagens permitem diagnosticar o problema;

  • dados sensíveis não aparecem no spool.

Recuperação

  • o job pode ser reiniciado;

  • o restart não duplica atualizações;

  • checkpoints são coerentes;

  • arquivos intermediários possuem política definida;

  • steps são idempotentes quando possível.

Idempotência significa que repetir uma operação produz o mesmo resultado final, sem duplicar efeitos indevidos.

Banco de dados

  • SQLCODE é verificado;

  • commits são dimensionados;

  • rollback é compreendido;

  • cursores são fechados;

  • deadlocks e timeouts possuem tratamento;

  • mensagens incluem contexto suficiente.

CICS

  • RESP ou condições são tratadas;

  • COMMAREA possui tamanho validado;

  • LINK e XCTL são usados conscientemente;

  • recursos são liberados;

  • ENQ possui DEQ correspondente;

  • transações longas são evitadas;

  • unidades de trabalho são bem definidas.

Operação

  • o programa define RETURN-CODE;

  • existe documentação de execução;

  • o runbook de falha é testado;

  • outra pessoa consegue operar;

  • métricas permitem observar tendência;

  • volume esperado e limite conhecido estão registrados.


16. A lição final do pelotão

O sol começava a aparecer atrás das paredes do datacenter quando Charlie saiu da sala.

Ele havia entrado naquela madrugada pensando que programar COBOL significava escrever comandos corretos.

Saiu entendendo que o verdadeiro trabalho era construir sistemas capazes de viver em um mundo que não respeita nossas expectativas.

Um programa não é antifrágil porque nunca falha.

Ele se aproxima da antifragilidade quando:

  • falhas pequenas revelam fraquezas;

  • o impacto é contido;

  • o serviço consegue voltar;

  • o incidente produz conhecimento;

  • o conhecimento altera código e processo;

  • a próxima perturbação encontra uma defesa melhor.

VUCA ensina que o ambiente é volátil, incerto, complexo e ambíguo.

BANI lembra que sistemas podem ser frágeis, pessoas podem estar ansiosas, efeitos podem ser não lineares e acontecimentos podem tornar-se incompreensíveis.

O Cisne Negro avisa que alguns eventos só parecerão óbvios depois que já tiverem acontecido.

A resiliência ensina a retornar.

A antifragilidade exige algo maior:

voltar diferente.

Charlie olhou pela última vez para o monitor.

O PAYBATCH estava com status OUTPUT.

Return code 4.

Um registro rejeitado.

Milhões processados.

Nenhuma duplicidade.

Nenhuma perda.

No spool, a última mensagem do programa dizia:

PROCESSAMENTO CONCLUÍDO COM ALERTA.
VERIFICAR ARQUIVO DE REJEITADOS.

O Sargento Abend apareceu atrás dele com uma xícara de café.

— Terminou?

Charlie respondeu:

— O job terminou. O aprendizado está apenas começando.

O veterano sorriu.

Porque essa era a verdade que todo profissional de mainframe descobre, cedo ou tarde:

O sistema frágil teme a madrugada.

O sistema robusto suporta a madrugada.

O sistema resiliente sobrevive à madrugada.

Mas o sistema antifrágil usa cada madrugada
para estar mais preparado quando a próxima chegar.

E, enquanto o resto da cidade acordava sem saber que estivera a poucos minutos de um fechamento atrasado, o pelotão z/OS recolhia seus dumps, atualizava seus runbooks e preparava a próxima versão.

Na guerra silenciosa do processamento corporativo, não havia medalhas.

Havia apenas o extrato correto pela manhã.

E, às vezes, isso precisava ser suficiente.

quinta-feira, 6 de agosto de 2015

Engenharia Militar : Capítulo VIII — Liderança, Moral e Disciplina: O Fator Humano na Engenharia dos Sistemas Críticos

Bellacosa Mainframe e a engenharia militar parte viii

☕ Um Café no Bellacosa Mainframe

Engenharia Militar sem Mistérios para Programadores COBOL

Capítulo VIII — Liderança, Moral e Disciplina: O Fator Humano na Engenharia dos Sistemas Críticos

Quando um Programador COBOL Descobre que o Maior Ativo de um Mainframe Nunca Foi o Hardware... Sempre Foram as Pessoas

A chuva caía sem parar.

O castelo permanecia cercado havia quase quatro meses.

As muralhas continuavam intactas.

Os depósitos ainda estavam abastecidos.

As armas funcionavam.

Os arqueiros permaneciam em suas posições.

Mesmo assim...

o velho comandante observava tudo com preocupação.

O jovem samurai aproximou-se.

— Mestre...

as defesas continuam fortes.

Por que parece preocupado?

O velho apontou para um soldado sentado próximo ao portão.

Depois para outro que dormia durante a guarda.

Depois para um grupo discutindo.

Em seguida respondeu:

— Porque os muros continuam firmes.

Mas começo a enxergar rachaduras onde nenhuma pedra consegue alcançar.

O jovem não compreendeu.

— Onde?

O comandante colocou a mão sobre o próprio peito.

— Aqui.

Dentro das pessoas.

Uma fortaleza não cai apenas quando suas muralhas desabam.

Ela cai quando seus defensores deixam de acreditar que vale a pena defendê-la.

Séculos depois...

08h17 da manhã.

Uma grande mudança em produção havia sido concluída com sucesso.

Nenhum ABEND.

Nenhum SQLCODE inesperado.

Nenhum problema no CICS.

Tudo parecia perfeito.

Então um operador perguntou:

— Alguém avisou a equipe do faturamento que o horário do processamento mudou?

Silêncio.

Naquele instante, o arquiteto percebeu que toda a engenharia havia funcionado.

O único problema estava justamente onde quase nunca aparece nos diagramas.

As pessoas.

Pegue seu café.

Hoje falaremos sobre o componente mais complexo de qualquer Data Center.

O ser humano.


1. A ilusão da tecnologia

Existe uma frase muito comum.

"Nosso problema é tecnológico."

Na maioria das vezes...

não é.

Grandes incidentes costumam nascer de:

comunicação deficiente;

documentação incompleta;

pressa;

treinamento insuficiente;

suposições equivocadas;

medo de perguntar;

falta de liderança.

O computador apenas revela problemas que já existiam entre as pessoas.


2. O comandante invisível

Quando pensamos em um comandante imaginamos alguém empunhando uma espada.

Na realidade...

bons líderes passam boa parte do tempo ouvindo.

Observando.

Perguntando.

Conectando especialistas.

Removendo obstáculos.

Na engenharia de software ocorre exatamente igual.

O melhor líder raramente é quem escreve mais código.

É quem permite que toda a equipe produza melhor.


3. Disciplina não é rigidez

Muitos confundem disciplina com autoritarismo.

Na engenharia militar disciplina significa previsibilidade.

Cada pessoa conhece:

sua missão;

seu horário;

seus procedimentos;

seus limites;

seus responsáveis.

No Data Center isso reduz riscos.

Quando todos seguem padrões, os incidentes tornam-se mais fáceis de investigar e resolver.


4. O Manual Existe por um Motivo

O jovem programador frequentemente pergunta:

"Por que preciso seguir exatamente este procedimento?"

Porque alguém, anos atrás, descobriu da maneira mais difícil o que acontece quando ele não é seguido.

Cada checklist.

Cada runbook.

Cada procedimento.

Cada convenção de nomenclatura.

Normalmente nasceu depois de um problema real.

A documentação é uma coleção de cicatrizes transformadas em conhecimento.


5. Moral é um Recurso Estratégico

Napoleão dizia que o moral pesa mais que muitos fatores materiais.

Um exército cansado, desorganizado e sem confiança dificilmente vence.

Em projetos de software acontece algo semelhante.

Equipes motivadas:

compartilham conhecimento;

pedem ajuda;

corrigem erros rapidamente;

documentam melhor;

ensinam iniciantes.

Já equipes desmotivadas escondem problemas, evitam responsabilidades e deixam de colaborar.


6. O Mestre e o Aprendiz

No Japão feudal existia uma longa tradição de aprendizado contínuo.

O conhecimento era transmitido por observação, prática e repetição.

No universo COBOL encontramos o mesmo modelo.

O veterano explica.

O novato observa.

Depois executa.

Depois ensina outro iniciante.

Assim o conhecimento sobrevive durante décadas.

Nenhum manual substitui completamente a experiência compartilhada.


7. O perigo do Herói Solitário

Existe um personagem presente em muitas equipes.

O Herói.

É a única pessoa que entende determinado sistema.

Resolve tudo.

Nunca documenta.

Nunca ensina.

Todos dependem dele.

No começo parece eficiente.

Com o tempo torna-se um enorme risco operacional.

Na engenharia militar isso seria equivalente a possuir apenas um engenheiro capaz de levantar a ponte levadiça.

Se ele desaparecer...

todo o castelo ficará vulnerável.


8. Conhecimento Distribuído

Organizações maduras distribuem conhecimento.

Promovem:

pair programming;

revisões de código;

treinamentos;

rotação de atividades;

documentação viva;

simulações.

O objetivo não é criar especialistas isolados.

É criar equipes resilientes.


9. O Valor da Confiança

Imagine um comandante que nunca acredita em seus oficiais.

Cada decisão precisa de aprovação.

Cada detalhe exige confirmação.

A velocidade desaparece.

Confiar não significa abandonar controle.

Significa desenvolver pessoas para que possam decidir corretamente.

No desenvolvimento de software isso acelera entregas sem comprometer qualidade.


10. O Erro como Professor

Em muitos ambientes existe medo de errar.

Consequência?

Problemas são escondidos.

Na engenharia madura ocorre o contrário.

O incidente é investigado.

Não para encontrar culpados.

Mas para descobrir causas.

Post-mortems bem conduzidos fortalecem toda a organização.

O erro deixa de ser vergonha.

Passa a ser oportunidade de aprendizado.


11. Goblin Slayer e a Confiança

Goblin Slayer possui enorme experiência.

Mesmo assim depende constantemente de sua equipe.

A Sacerdotisa protege.

A Arqueira observa.

O Anão improvisa.

O Lagarto cria novas soluções.

Cada integrante complementa os demais.

Nenhum vence sozinho.

Essa talvez seja uma das maiores lições da obra.

Competência individual importa.

Competência coletiva decide campanhas.


12. Shogun e a Liderança Silenciosa

Em Shogun, diversos líderes influenciam mais pelo exemplo do que pelos discursos.

Eles permanecem calmos durante crises.

Escutam antes de decidir.

Controlam emoções.

Inspiram confiança.

No Data Center, durante um incidente crítico, a serenidade do líder costuma definir o comportamento de toda a equipe.

Pânico é contagioso.

Calma também.


13. O Briefing

Antes de qualquer operação militar existe um briefing.

Objetivo.

Cronograma.

Riscos.

Responsáveis.

Plano alternativo.

Critérios de sucesso.

Mudanças em produção deveriam seguir exatamente essa lógica.

Quando todos entendem o contexto, as decisões tornam-se muito melhores.


14. A Debriefing

Depois da missão...

vem o debriefing.

O que funcionou?

O que não funcionou?

O que aprendemos?

Esse hábito transforma experiência em conhecimento organizacional.

Projetos que ignoram essa etapa repetem os mesmos erros durante anos.


15. Comunicação também é Engenharia

Uma mensagem mal escrita pode causar um incidente.

Uma documentação ambígua pode atrasar uma implantação.

Um requisito incompleto pode produzir semanas de retrabalho.

Comunicação não é habilidade secundária.

É parte da engenharia.

Programadores excelentes escrevem código claro.

Engenheiros excelentes também escrevem explicações claras.


16. O Peso da Cultura

Toda equipe desenvolve uma cultura.

Algumas valorizam aprendizado.

Outras valorizam culpa.

Algumas recompensam colaboração.

Outras recompensam competição.

A cultura invisível determina como as pessoas agem quando ninguém está observando.

Por isso ela é tão importante quanto qualquer arquitetura técnica.


17. Curiosidade Histórica

Os grandes castelos japoneses não dependiam apenas de samurais. Ferreiros, carpinteiros, cozinheiros, médicos, escribas, mensageiros, agricultores e artesãos desempenhavam funções essenciais para manter a fortaleza funcionando. Uma muralha impecável seria inútil se faltassem alimentos, manutenção ou comunicação.

Nos sistemas corporativos ocorre o mesmo. Analistas de negócios, operadores, DBAs, administradores de sistemas, especialistas em segurança, desenvolvedores, arquitetos e equipes de suporte formam um ecossistema onde cada função contribui para a continuidade da operação.


18. Easter Egg — O Manual Esquecido

Conta-se que um administrador veterano mantinha uma pasta bastante antiga.

Na capa estava escrito apenas:

NÃO JOGAR FORA

Durante anos ninguém abriu aquele material.

Parecia obsoleto.

Até que um incidente extremamente raro aconteceu.

Um equipamento antigo precisou ser reiniciado seguindo exatamente uma sequência específica.

O procedimento existia apenas naquele manual.

No final da última página havia uma anotação escrita à mão.

Se você está lendo isto,
é porque tivemos o mesmo problema novamente.

Boa sorte.

Bellacosa, 1998.

Todos riram.

Depois perceberam algo importante.

Documentação nunca envelhece.

Ela apenas espera o próximo profissional que precisará dela.


19. Checklist do Líder Técnico

Antes de considerar uma equipe preparada, pergunte:

✔ Todos conhecem os objetivos do projeto?

✔ Existe documentação atualizada?

✔ O conhecimento está distribuído?

✔ Há sucessores para funções críticas?

✔ Os procedimentos são claros?

✔ Os iniciantes recebem mentoria?

✔ Os incidentes geram aprendizado?

✔ A comunicação é transparente?

✔ As mudanças possuem briefing?

✔ Existe debriefing após implantações?

✔ As pessoas sentem segurança para fazer perguntas?

✔ A equipe aprende continuamente?


Conclusão — O Castelo Era Feito de Pessoas

Meses depois do fim do cerco, o jovem comandante caminhava pelas ruas do castelo.

As muralhas permaneciam majestosas.

As torres continuavam altas.

Os portões eram impressionantes.

Mesmo assim...

agora ele observava outra coisa.

Via os ferreiros reparando ferramentas.

Os cozinheiros preparando refeições.

Os mensageiros cruzando os corredores.

Os carpinteiros reforçando telhados.

Os arqueiros treinando novos soldados.

O velho engenheiro aproximou-se.

— O que você aprendeu?

O rapaz respondeu sorrindo.

— Passei meses acreditando que nossa fortaleza era feita de pedra.

Hoje entendo que ela sempre foi feita de pessoas.

Na sala de operações, o processamento encerrava mais um dia sem incidentes.

Não porque todos os servidores fossem perfeitos.

Nem porque todos os programas COBOL fossem impecáveis.

Mas porque centenas de profissionais trabalhavam juntos, compartilhando conhecimento, revisando procedimentos, ensinando novos colegas e aprendendo continuamente.

O jovem programador desligou seu terminal.

Pela primeira vez compreendeu que o maior patrimônio de um Data Center não estava nas CPUs, nos discos ou nos cabos de fibra óptica.

Estava na experiência acumulada de pessoas que, durante décadas, haviam transformado erros em procedimentos, dúvidas em documentação e desafios em conhecimento.

Porque uma fortaleza pode ser reconstruída.

Um servidor pode ser substituído.

Um programa pode ser recompilado.

Mas uma equipe que aprende junta...

essa se torna praticamente impossível de derrotar.

E é justamente essa equipe que mantém funcionando, dia após dia, os sistemas críticos sobre os quais milhões de pessoas confiam suas vidas financeiras, profissionais e pessoais.

☕ Um Café no Bellacosa Mainframe

Engenharia Militar sem Mistérios para Programadores COBOL

Uma campanha completa sobre estratégia, logística, inteligência, segurança, liderança, continuidade, sistemas críticos, IBM Z e COBOL.

Consultar arquivo
25 documentos
2014–2016 linha histórica
IBM Z fortaleza digital
COBOL linguagem da missão
Arquivo estratégico

Um Data Center analisado como uma fortaleza em guerra

A série Engenharia Militar sem Mistérios para Programadores COBOL compara castelos, exércitos, muralhas, cadeias de comando, logística, inteligência e operações militares com os ambientes IBM Z responsáveis por bancos, governos, seguros, transportes e serviços essenciais.

Cada artigo apresenta uma parte dessa arquitetura: aplicações COBOL, Jobs JCL, transações CICS, bancos Db2, filas MQ, segurança RACF, monitoramento, contingência, liderança, documentação e continuidade operacional.

Sala de operações

Índice da campanha

25 documentos localizados
Índice permanente

Links completos da série Engenharia Militar

Esta relação permanece disponível no HTML da página para mecanismos de busca, leitores de tela, navegadores sem JavaScript e ferramentas de arquivamento.

  1. Engenharia Militar sem Mistérios para Programadores COBOL
  2. Prólogo — O Chamado do Guardião
  3. Capítulo I — O Castelo, a Ponte e o Job que Não Podia Falhar
  4. Capítulo II — Estratégia, Operação e Tática
  5. Capítulo III — A Cadeia de Comando
  6. Capítulo IV — Logística
  7. Capítulo V — As Muralhas Invisíveis
  8. Capítulo VI — Inteligência, Reconhecimento e Espionagem
  9. Capítulo VII — A Arte da Guerra Aplicada ao Mainframe
  10. Capítulo VIII — Liderança, Moral e Disciplina
  11. Capítulo IX — Inovação, Evolução e o Futuro
  12. Capítulo X — O Legado do Engenheiro
  13. Capítulo XI — O Guardião Invisível
  14. Capítulo XII — A Fortaleza Invisível
  15. Capítulo XIII — Os Sentinelas da Madrugada
  16. Capítulo XIV — A Civilização Invisível
  17. Capítulo XV — Engenharia de Cerco
  18. Glossário IBM Z + Engenharia Militar
  19. Apêndice A — Correspondências Históricas e Técnicas
  20. Os 10 Animes Mais Emblemáticos Sobre Engenharia Militar
  21. Os 10 Animes Mais Emblemáticos Sobre Logística Militar
  22. Os 10 Animes Mais Emblemáticos Sobre Tática Militar
  23. Os 10 Animes Mais Emblemáticos Sobre Estratégia Militar
  24. Especial — Guerrilha Urbana
  25. Especial — Guerrilha no Campo e na Floresta
Bellacosa Mainframe — Arquivo de Engenharia Militar

Estratégia, disciplina, conhecimento, resiliência e continuidade aplicados aos sistemas que não podem parar.

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