Translate

domingo, 17 de outubro de 2021

Technical Debt Rules : Quando um Programador COBOL Descobriu que Cada Atalho Criava um Agente Smith Dentro do Sistema

 

Bellacosa Mainframe e as technical debt rules

☕ Um Café no Bellacosa Mainframe

Technical Debt Rules sem Mistérios

Quando um Programador COBOL Descobriu que Cada Atalho Criava um Agente Smith Dentro do Sistema

"Infelizmente, ninguém pode explicar o que é a Dívida Técnica. Você precisa vê-la por si mesmo." — inspirado no universo de Matrix


Bem-vindo à Matrix do Desenvolvimento

Imagine que você acorda em uma sala escura.

Na sua frente existe um monitor verde.

Linhas de caracteres descem como chuva.

Um homem de óculos escuros aproxima-se.

Não é Morpheus.

É o Analista de Sistemas mais antigo da empresa.

Ele coloca duas fitas magnéticas sobre a mesa.

Uma vermelha.

Outra azul.

A azul compila hoje.

A vermelha exige refatoração, testes, documentação e arquitetura.

Você pergunta:

— Qual delas devo escolher?

Ele sorri.

— A azul entrega o projeto este mês.

— A vermelha salva os próximos dez anos.

Naquele instante você entende que toda equipe de desenvolvimento vive diariamente essa escolha.

Esse é o universo da Technical Debt, ou Dívida Técnica, um dos conceitos mais importantes — e mais mal compreendidos — da Engenharia de Software.

Para quem trabalha com COBOL, CICS, Db2, JCL e sistemas legados, entender a Dívida Técnica é quase tão importante quanto saber interpretar um ABEND. Ela explica por que alguns sistemas envelhecem com dignidade enquanto outros se tornam um labirinto impossível de manter.


O que é Technical Debt?

Technical Debt é o custo futuro provocado por decisões técnicas tomadas para ganhar velocidade no presente.

Em outras palavras:

É quando você economiza tempo hoje emprestando tempo do seu próprio futuro.

Assim como um empréstimo bancário, a dívida técnica pode ser útil quando administrada conscientemente.

O problema não é contrair uma dívida.

O problema é esquecer que ela existe.


A origem do termo

O termo Technical Debt foi criado em 1992 por Ward Cunningham, um dos autores do Manifesto Ágil e criador do primeiro Wiki da história.

Ward percebeu que muitos gestores entendiam dinheiro, juros e empréstimos, mas tinham dificuldade para compreender problemas de arquitetura de software.

Então fez uma analogia brilhante.

Ele disse:

"Entregar um software antes de terminar sua arquitetura é como fazer um empréstimo. Pode ser uma boa decisão, desde que você pague rapidamente."

O problema aparece quando os juros começam.

E em software...

...os juros aparecem em forma de:

  • bugs

  • retrabalho

  • lentidão

  • dificuldades para alterar regras

  • aumento do tempo de testes

  • aumento de incidentes


Matrix explica melhor que muitos livros

Imagine que cada linha de código seja parte da Matrix.

Quando tudo é desenvolvido corretamente...

a simulação permanece estável.

Mas sempre existe alguém dizendo:

"Depois a gente arruma."

Esse "depois" nunca chega.

Cada pequeno atalho cria pequenas distorções.

No começo parecem insignificantes.

Depois surgem pequenos defeitos.

Mais tarde aparecem exceções.

Finalmente...

a Matrix inteira começa a produzir Agentes Smith.


Quem são os Agentes Smith?

No mundo do software, os Agentes Smith representam problemas que surgem continuamente.

Cada vez que um desenvolvedor resolve um bug rapidamente sem corrigir sua causa...

nasce um novo Smith.

Cada IF duplicado...

mais um Smith.

Cada variável mal nomeada...

outro Smith.

Cada programa COBOL de cinquenta mil linhas...

centenas deles.

Eles continuam se multiplicando até dominar todo o sistema.


Um exemplo COBOL

Imagine este código:

IF TIPO = "A"
    MOVE 15 TO DESCONTO
END-IF

Alguns meses depois.

Nova regra.

IF TIPO = "A"
    MOVE 20 TO DESCONTO
END-IF

Mais tarde.

Outro programador.

IF CLIENTE-PREMIUM
    MOVE 25 TO DESCONTO
END-IF

Depois.

Outro módulo.

Mesmo código.

Depois outro.

E outro.

Agora existem quinze versões diferentes da mesma regra.

Toda alteração exige procurar manualmente.

Esse é um clássico exemplo de dívida técnica.


O que gera Technical Debt?

Pressão por prazo

"Entrega sexta."

Mesmo sabendo que deveria levar três semanas.


Falta de testes

"Depois escrevemos."

Nunca escrevem.


Documentação inexistente

"Todo mundo entende."

Dois anos depois ninguém entende.


Copiar código

CTRL+C

CTRL+V

CTRL+C

CTRL+V

Assim nasce o caos.


Arquitetura improvisada

Funciona.

Mas ninguém sabe explicar.


Falta de revisão

Sem Code Review...

os problemas entram em produção.


Falta de treinamento

Programadores repetem erros porque nunca aprenderam alternativas melhores.


A dívida nem sempre é ruim

Essa é uma curiosidade interessante.

Nem toda dívida técnica é um erro.

Imagine um banco.

Existe uma exigência legal.

Prazo:

48 horas.

A equipe decide criar uma solução provisória.

Entrega.

Banco evita multas.

Depois reserva tempo para refatorar.

Excelente decisão.

Foi uma dívida consciente.


Dívida consciente x dívida inconsciente

Dívida consciente

"Sabemos que esse código está temporário."

Existe plano.

Existe prazo.

Existe orçamento.


Dívida inconsciente

"Nunca percebemos que fizemos errado."

Muito mais perigosa.


Os juros da dívida

Todo empréstimo possui juros.

Software também.

Os juros aparecem como:

Mais tempo para manutenção

Uma alteração simples leva dias.


Bugs recorrentes

Conserta um.

Quebra outro.


Medo

"Não mexe."

Frase clássica do legado.


Performance

Cada remendo adiciona processamento.

No mainframe isso significa:

  • CPU

  • MIPS

  • consumo

  • custo


Novos profissionais demoram meses

Porque entender ficou difícil.


Como a dívida cresce?

Imagine um cartão de crédito.

Primeiro mês:

100 reais.

Segundo mês:

Terceiro:

Depois:

Depois:

Software faz exatamente isso.

Cada nova funcionalidade construída sobre código ruim aumenta exponencialmente a complexidade.


O Mainframe sofre muito?

Curiosamente...

sim.

E não.

Mainframes normalmente possuem código extremamente robusto.

Mas muitos sistemas existem há quarenta anos.

Durante quatro décadas...

centenas de programadores passaram por eles.

Cada geração deixou pequenas modificações.

O resultado pode ser:

  • GOTO esquecidos

  • IFs duplicados

  • COPYBOOKS redundantes

  • programas gigantescos

  • tabelas obsoletas

  • JCLs nunca revisados


Um exemplo realista

Imagine um programa COBOL chamado:

PGMFIN01

1988

2.300 linhas.

1992

3.800 linhas.

1998

6.500 linhas.

2007

11.000 linhas.

2016

19.000 linhas.

2026

41.000 linhas.

Ninguém teve coragem de dividir.

Cada manutenção ficou mais cara.

A dívida cresceu silenciosamente.


O Oráculo explica

No universo Matrix, o Oráculo nunca entrega respostas prontas.

Ela oferece entendimento.

Na Engenharia de Software acontece igual.

A dívida técnica raramente aparece em relatórios.

Ela aparece nos sintomas.

Equipe cansada.

Prazo aumentando.

Mudanças simples demorando semanas.

Clientes reclamando.

ABENDs aparecendo após pequenas alterações.

Esses são os sinais.


Como reduzir a dívida?

Refatoração

Melhorar código sem alterar comportamento.

É a principal arma.


Testes automatizados

Permitem mudar com segurança.


Revisão de código

Dois olhos veem mais que um.


Arquitetura

Planejamento evita improvisos.


Documentação viva

Nunca deixe conhecimento apenas na memória.


Pair Programming

Conhecimento compartilhado.


Mentoria

Programadores experientes aceleram iniciantes.


Limpeza contínua

Nunca espere uma grande reescrita.

Melhore um pouco todos os dias.


A Regra do Escoteiro

Robert C. Martin popularizou uma ideia simples:

Deixe o código um pouco melhor do que encontrou.

Imagine milhares de desenvolvedores fazendo isso durante anos.

A dívida diminui naturalmente.


Atenção!

Existe um erro muito comum.

Confundir:

Refatoração

com

Reescrita.

São coisas completamente diferentes.

Refatorar melhora.

Reescrever substitui.

Nem sempre reescrever é inteligente.

Muitos projetos falharam tentando "começar do zero".


O perigo da Grande Reescrita

Na Matrix Reloaded, Neo descobre que destruir tudo não resolve.

Em software acontece igual.

Jogar fora um sistema COBOL de quarenta anos pode significar perder décadas de conhecimento de negócio.

O ideal é evoluir gradualmente.


Ferramentas que ajudam

Hoje existem excelentes ferramentas.

  • IBM ADDI

  • IBM Application Discovery

  • SonarQube

  • IBM COBOL Check

  • IBM Z Open Editor

  • IBM Developer for z/OS

  • GitHub Copilot

  • ChatGPT

  • Claude

  • ZUnit

Elas ajudam a identificar:

  • duplicações

  • complexidade

  • dependências

  • código morto

  • riscos


Sinais de alerta

Você deve investigar dívida técnica quando ouvir frases como:

"Não sabemos por que funciona."

"Não mexe nesse módulo."

"Compila assim mesmo."

"Só o João entende."

"Depois documentamos."

"Tem um GOTO aí... mas deixa."

"É gambiarra temporária."

Seis meses depois...

continua igual.


O papel do Programador COBOL Padawan

Um Padawan costuma pensar:

"Meu trabalho é escrever código."

Na verdade, não.

Seu trabalho é entregar soluções sustentáveis.

Sempre pergunte:

  • Isso poderá ser entendido daqui cinco anos?

  • Outro programador conseguirá manter?

  • Existe teste?

  • Existe documentação?

  • Existe duplicação?

  • Essa regra deveria estar em um COPYBOOK?

  • Esse programa precisa mesmo crescer mais mil linhas?

Essas perguntas evitam que você alimente a Matrix com novos Agentes Smith.


Curiosidades sobre a Dívida Técnica

  • Existem empresas que dedicam 20% do tempo de desenvolvimento apenas para pagar dívida técnica.

  • Grandes bancos mantêm backlogs exclusivos de refatoração, separados das novas funcionalidades.

  • Algumas organizações medem a dívida técnica com ferramentas que estimam quantos dias de trabalho seriam necessários para corrigir todos os problemas encontrados.

  • Em projetos críticos, reduzir dívida técnica pode gerar economia significativa em horas de manutenção, consumo de CPU, incidentes e retrabalho.


Outros "parentes" da Dívida Técnica

Ela costuma caminhar ao lado de diversos conceitos conhecidos:

  • Code Smell – sinais de que algo pode estar mal projetado.

  • Big Ball of Mud – sistema sem arquitetura definida.

  • Spaghetti Code – código confuso e altamente acoplado.

  • God Object – um único módulo faz tudo.

  • Bus Factor – conhecimento concentrado em poucas pessoas.

  • Shotgun Surgery – uma pequena alteração exige modificar dezenas de arquivos.

  • Lava Flow – código antigo que ninguém remove por medo.

Todos esses conceitos frequentemente aparecem juntos.


A Grande Escolha: Pílula Azul ou Pílula Vermelha?

No final de Matrix, Neo percebe que conhecer a verdade traz responsabilidade.

Na Engenharia de Software acontece exatamente o mesmo.

Você pode escolher a pílula azul:

  • copiar código;

  • ignorar testes;

  • adiar documentação;

  • aceitar "gambiarras permanentes";

  • acreditar que "funcionando está bom".

Ou pode escolher a pílula vermelha:

  • compreender a arquitetura;

  • investir em refatoração;

  • escrever código legível;

  • compartilhar conhecimento;

  • documentar regras de negócio;

  • pensar no próximo programador que abrirá aquele programa COBOL daqui a dez anos.

A primeira opção parece mais rápida, mas cobra juros crescentes. A segunda exige disciplina, porém constrói sistemas resilientes que atravessam décadas — exatamente como os grandes sistemas IBM Z que sustentam bancos, seguradoras, governos e companhias aéreas ao redor do mundo.

No universo Bellacosa Mainframe, a maior lição é clara: o inimigo não é o legado; é o legado abandonado. Sistemas COBOL envelhecem muito bem quando recebem manutenção consciente, arquitetura sólida e equipes comprometidas em reduzir continuamente a dívida técnica. Assim como Neo precisou aprender a enxergar além do código verde da Matrix, o Programador COBOL Padawan precisa aprender a enxergar além da próxima entrega e pensar no impacto que cada linha escrita hoje terá no futuro da organização.

Porque, no fim, toda dívida será paga. A única dúvida é quem pagará a conta: você hoje ou toda a equipe amanhã?

Sem comentários:

Enviar um comentário