Cleverton Bueno
← Voltar para todos os artigos

CI/CD é o caminho feliz?
Só se você não estiver gerenciando um arranha-céu.

A escolha do seu processo de release não é uma questão de modernidade, mas uma consequência direta da arquitetura da sua aplicação. Para sistemas monolíticos, o 'Ciclo de Release Programado' não é um método ultrapassado, mas uma disciplina de engenharia essencial para gerenciar o risco e garantir a estabilidade.

O Mito do Padrão Único: Arquiteturas Diferentes Exigem Processos Diferentes

Imagine a seguinte cena, tão comum no mundo corporativo: um novo diretor de tecnologia, cheio de energia e com a missão de "modernizar a empresa", convoca uma grande reunião. Com gráficos impressionantes e um discurso inspirador, ele anuncia a nova política:
"Para sermos mais ágeis e competitivos, a partir de hoje, todas as nossas equipes de desenvolvimento vão adotar o método CI/CD. Queremos múltiplas entregas por dia, em todas as aplicações!"

A sala aplaude. A promessa de velocidade e inovação é contagiante. Mas, em um canto, um desenvolvedor experiente, daqueles que já viram muitas ondas de "modernização" irem e virem, sente um calafrio. Ele não é contra a velocidade, pelo contrário. Ele apenas sabe de algo fundamental que a empolgação do momento ignora: nem todas as aplicações nasceram para correr na mesma velocidade ou na mesma pista.

Impor um processo único a todo um ecossistema de sistemas é como um médico que, animado com a descoberta da penicilina, decide receitá-la para todos os pacientes, não importa se eles têm uma infecção bacteriana, uma fratura no braço ou uma simples dor de cabeça. A intenção pode ser a melhor possível, mas o resultado pode ser desastroso.

É aqui que reside o primeiro e mais importante segredo da gestão de tecnologia: a maturidade não está em ter um único processo "padrão ouro", mas sim em ter um portfólio de processos e, principalmente, a sabedoria para aplicar a ferramenta certa ao trabalho certo.

O Fator Decisivo: A Arquitetura da Aplicação

Para entender por que isso é verdade, não precisamos ser especialistas em código. Precisamos apenas entender como os sistemas de software são "construídos". De forma geral, existem duas grandes filosofias de construção, dois "mundos" completamente diferentes.

Mundo 1: A Cidade de Bairros Autônomos (Arquitetura de Microsserviços)

Pense em uma aplicação moderna como uma grande cidade planejada. Em vez de construir um único prédio gigantesco para abrigar todas as funções, os arquitetos decidiram criar bairros especializados e independentes. Há o bairro do "Comércio" (que cuida dos pagamentos), o bairro da "Segurança" (que controla o login dos usuários) e o bairro da "Logística" (que gerencia o estoque).

Cada bairro funciona de forma autônoma. Eles são conectados por estradas muito bem sinalizadas (as APIs), com regras de tráfego claras. A grande vantagem disso? Se a prefeitura quiser fazer uma grande reforma na praça do bairro do Comércio, ela não precisa parar a cidade inteira. O trabalho é feito ali, de forma isolada. Os outros bairros continuam funcionando normalmente.

Neste mundo, o famoso processo de CI/CD (Integração e Entrega Contínua) é a ferramenta perfeita. Ele funciona como um serviço de entrega por drones: rápido, automatizado e preciso. Ele pega uma pequena melhoria (um "pacote"), voa diretamente até o bairro que precisa dela e a entrega em minutos, com risco baixíssimo para o resto da cidade. É o processo natural para essa arquitetura.

Mundo 2: O Gigantesco Arranha-Céu (Arquitetura Monolítica)

Agora, pense em um sistema legado ou mesmo em um novo que nasceu mal planejado. Ele foi construído como um único e imenso arranha-céu. Todos os departamentos da empresa moram ali: o financeiro está no 10º andar, o estoque no 12º e o atendimento ao cliente no 15º.

O problema é que todos eles compartilham a mesma fundação, o mesmo sistema de encanamento e a mesma fiação elétrica. Uma equipe de manutenção que vai consertar um cano no 10º andar pode, sem querer, cortar um fio que leva energia ao 15º andar. Fazer uma reforma estrutural em qualquer parte do prédio é uma operação de altíssimo risco, que muitas vezes exige um comunicado geral e até o desligamento da energia do prédio inteiro por algumas horas para garantir a segurança.

Tentar usar "drones de entrega" (CI/CD) aqui é o caos. O pacote pode até chegar rápido ao andar certo, mas o risco de, no processo, ele abalar a estrutura e causar um problema três andares abaixo é enorme e, pior, imprevisível.

E aqui, é preciso estar atento a um engano muito comum, talvez o mais perigoso de todos: acreditar que apenas por usar ferramentas modernas, estamos imunes a construir arranha-céus antigos. Não é porque sua equipe usa a linguagem de programação da moda que ela está automaticamente construindo uma "cidade de bairros". Se a lógica do sistema for toda interligada e dependente, você terá um monolito novinho em folha, mas com todos os desafios de um sistema de 30 anos de idade. A arquitetura, não a idade da tecnologia, é o que dita as regras.

Concluindo: Escolha seu Processo com Sabedoria

Com isso em mente, a armadilha da padronização cega fica clara. A pergunta que um bom gestor de tecnologia deve fazer não é "Como podemos aplicar CI/CD em tudo?", mas sim:

"Qual é a arquitetura desta aplicação e qual processo de release honra seus riscos e sua estrutura?"

A resposta para o novo aplicativo de marketing da sua empresa provavelmente será o ágil e veloz CI/CD. Já a resposta para o sistema central de faturamento, aquele que é o coração financeiro da companhia, provavelmente será o metódico, disciplinado e robusto "Ciclo de Release Programado" — o processo que vamos explorar a fundo no restante deste guia.

Estar confortável com ambas as respostas, e saber defender cada uma delas, é o verdadeiro sinal de uma organização tecnologicamente madura. Agora que estabelecemos essa base, vamos mergulhar na engenharia, nos rituais e nos desafios de manter o "arranha-céu" de pé, seguro e funcional.



A Anatomia do Ciclo de Release Programado:
Um Mergulho no Processo Legado

No tópico anterior, nós estabelecemos a grande verdade: a arquitetura do seu sistema dita as regras do jogo. Concordamos que o nosso foco aqui é o "arranha-céu" – o sistema monolítico, onde tudo está conectado. Agora, você pode estar se perguntando:
"Ok, eu entendo que o risco é alto. Mas por que não podemos simplesmente ser mais cuidadosos e fazer uma pequena mudança de cada vez? Por que precisamos de todo esse ritual pesado de um 'Ciclo de Release Programado'?"

Acredite em mim, essa é a pergunta que todo desenvolvedor já se fez e que todo gestor de negócios faz todos os dias. A resposta não está na falta de vontade ou na burocracia. A resposta está em dois vilões silenciosos que vivem escondidos nas fundações do nosso arranha-céu.


Os Vilões Gêmeos: As Forças que Exigem esse Ciclo

Antes de descrever o processo, eu preciso que você entenda profundamente as forças que nos obrigam a usá-lo. Se você não entender os inimigos, nunca respeitará as armas que usamos para combatê-los.


Vilão 1: O Acoplamento Técnico

Essa é a palavra técnica, mas a realidade é simples: no nosso arranha-céu, as paredes são finas e tudo está conectado. Uma função de software, que parece ser usada apenas pelo departamento Financeiro no 10º andar, pode, sem que ninguém se lembre, também ser a base para um relatório crítico gerado pelo Estoque no 12º andar.

Na minha carreira, perdi a conta de quantas vezes vi isso acontecer. Um desenvolvedor novo na equipe, pressionado por um prazo, faz uma alteração que parece perfeitamente segura e isolada. Ele testa o fluxo do Financeiro e tudo funciona maravilhosamente bem. Duas horas depois que a mudança vai para o ar, o telefone começa a tocar: o sistema de expedição da empresa inteira parou. Por quê? Porque aquela pequena função "inofensiva" também era responsável por calcular um dígito verificador em todas as notas fiscais, e ninguém que está hoje na equipe sabia disso. O acoplamento é esse inimigo invisível que transforma a menor das mudanças em uma potencial catástrofe.


Vilão 2: A Drenagem de Conhecimento

Se o acoplamento é o problema técnico, a drenagem de conhecimento é o problema humano, e na minha opinião, ele é ainda mais perigoso. Sejamos honestos: em aplicações com 10, 15, 20 anos de idade, quantos dos arquitetos e desenvolvedores originais ainda estão na empresa? A rotatividade, especialmente de equipes terceirizadas, é alta.

O que acontece na prática é que o "mapa da cidade" se perdeu. Os novos desenvolvedores que chegam recebem apenas o endereço de uma rua para consertar um buraco. Eles aprendem a fundo sobre aquela rua, mas não têm a menor ideia de como o tráfego dela afeta a avenida principal três quarteirões adiante. O conhecimento do sistema fica fragmentado, tribal. Ele vive em pedaços na cabeça de pessoas diferentes, mas raramente alguém tem a visão do todo.

É por causa desses dois vilões, trabalhando juntos, que não podemos nos dar ao luxo de fazer uma "pequena mudança de cada vez". O risco de um impacto desconhecido é simplesmente alto demais.


O Ritual do Ciclo de Release Programado: Passo a Passo

Então, como nós lutamos contra isso? Nós criamos um ritual. Um processo disciplinado, quase uma cerimônia, projetada para controlar o risco e trazer um mínimo de previsibilidade ao caos. É isso que eu chamo de "Ciclo de Release Programado". E ele funciona em três fases claras.


Fase 1: O Congelamento e o Empacotamento (Code Freeze)

Em uma data combinada, nós declaramos um "congelamento de código". Isso não significa que os desenvolvedores param de trabalhar. Significa que a release que sairá na próxima janela de implantação está fechada. Nada mais entra. Todas as mudanças que foram desenvolvidas e aprovadas nas últimas semanas ou meses são juntadas, compiladas e formam um único e grande "pacote de release". Esse pacote é a nossa "versão candidata". A partir de agora, é este pacote que será testado. Qualquer outra correção ou nova funcionalidade terá que esperar a próximo release.


Fase 2: A Homologação Exaustiva

Aqui é onde a mágica, e o trabalho duro, acontece. Aquele pacote é instalado em um ambiente de testes que é uma cópia fiel do ambiente de produção. A equipe de Qualidade (QA) inicia uma jornada de testes que vai muito além de apenas validar as novas funcionalidades. O foco principal deles é a caça aos fantasmas: os testes de regressão. Eles vão executar centenas, às vezes milhares, de cenários de teste que cobrem as áreas mais críticas e usadas do sistema, mesmo aquelas que, teoricamente, não foram afetadas pela release. É um trabalho manual, metódico e, francamente, heroico. É a nossa única rede de segurança para encontrar os impactos indiretos que o Vilão 1, o Acoplamento, adora criar.


Fase 3: A Janela de Implantação

Se, e somente se, o pacote passar pela bateria exaustiva de testes, ele recebe a luz verde. A implantação é agendada para uma janela de baixa utilização: após as 22 horas de um dia da semana, ou na madrugada de um dia da semana e em algumas empresas essas mudanças só podem acontecer em finais de semana. É um evento de "parada programada", com um checklist detalhado, uma equipe a postos e, crucialmente, um plano de rollback (reversão) testado. Se qualquer coisa sair do previsto, o plano B é acionado imediatamente para voltar à versão estável anterior.


Táticas de Batalha na Montagem do Pacote

Para montar esse pacote da Fase 1, existem duas estratégias principais que eu vi darem certo ao longo dos anos, cada uma com suas vantagens. Importante tá pessoal, não quer dizer que não existem outras formas, tão boas ou até melhores quanto essas duas, eu estou citando as que eu mais confio, ao longo de 30 anos de atuação na área de desenvolvimento de sistemas.


O "Pai da Versão" (Gatekeeper Centralizado):

Eu, particularmente, sempre gostei desta abordagem. Nós escolhemos um desenvolvedor sênior, o mais experiente, para ser o "pai" ou "mãe" daquela release. Apenas essa pessoa tem a permissão de integrar as diferentes partes do código que os outros desenvolvedores fizeram. Com seu olhar treinado e conhecimento do todo, ele atua como um maestro, garantindo que as peças se encaixem e identificando conflitos que uma ferramenta automática não veria. A desvantagem? Ele se torna um gargalo e um ponto único de falha. E para não criar uma dependência com apenas uma pessoa, é importante mais de uma pessoa ter esse conhecimento ou até para termos um rodízio.


O "Branch Comum" (Integração Descentralizada):

A outra abordagem é criar uma "cópia" do código-fonte específica para a release e permitir que todos os desenvolvedores integrem suas mudanças ali. A vantagem é que o processo é mais ágil e menos dependente de uma única pessoa. A desvantagem é o risco que já mencionei: um desenvolvedor pode, sem querer, subir uma alteração que entra em conflito lógico com a mudança de outro colega, e esse problema só será descoberto nos testes de homologação, causando atrasos.


Como você pode ver, o Ciclo de Release Programado não é apenas um processo lento por ser antigo. É um mecanismo de defesa robusto, uma resposta direta e necessária aos riscos inerentes ao nosso "arranha-céu". No próximo capítulo, vamos sair da parte técnica e entrar no campo de batalha real: como lidar com as pessoas, os anti-padrões e, principalmente, como explicar tudo isso para a área de negócios.


O Campo de Batalha Real:
Pessoas, Riscos e Anti-Padrões

Se na parte anterior, nós dissecamos a mecânica do "Ciclo de Release Programado", agora vamos falar sobre o que realmente faz ele funcionar ou fracassar: as pessoas. Um processo no papel é uma coisa; executá-lo sob a pressão por resultados, com equipes cansadas e gestores ansiosos, é outra completamente diferente. A engenharia de software, muitas vezes, é mais sobre psicologia e comunicação do que sobre código.


Traduzindo Risco: Como Dialogar com a Área de Negócios

Este é, talvez, o maior desafio que enfrentei na minha carreira. A área de negócios vive no mundo da oportunidade e da velocidade. Nós, em TI, vivemos no mundo da estabilidade e do risco. Falar de "acoplamento técnico" para um diretor comercial é o mesmo que um médico tentar explicar a mitose celular para um paciente com o braço quebrado. A informação é correta, mas inútil.
O negócio pressiona:
"Por que essa entrega simples vai levar um mês? Meu concorrente lançou três novidades na última semana!".
Eles não estão errados em querer agilidade. O nosso erro é responder com jargão técnico. Precisamos aprender a traduzir risco técnico em risco de negócio.

Minha melhor arma para essa conversa sempre foi uma boa história. E eu vou contar para você a que eu mais usei:
"Imagine que, há seis meses, pressionado por um prazo, um desenvolvedor precisou de uma função que calculava juros. Ele viu que a Classe X, do módulo de Faturamento, fazia isso muito bem. Então, ele a usou para resolver um problema no sistema de Logística. Ninguém documentou, não estava no escopo, foi só uma 'solução rápida'. Hoje, a equipe de Faturamento, para atender a uma nova lei, precisa alterar essa mesma Classe X. Eles fazem a mudança, testam todo o fluxo de faturamento e está tudo perfeito. A release sobe no fim de semana. Na segunda-feira, a empresa para, pois nenhuma nota fiscal consegue ser emitida. Por quê? Porque a mudança no Faturamento quebrou, indiretamente, a Logística. A área de negócios não entende, a TI leva horas para achar a causa e a empresa perde dinheiro."

Essa história transforma o "acoplamento" em algo que um gestor entende: risco financeiro e operacional. Meu papel, e o seu, ao defender o processo de "Ciclo de Release Programado", não é ser um freio para o negócio. É ser um engenheiro de risco. O tempo de homologação e os testes regressivos não são burocracia. São a apólice de seguro da empresa contra esse tipo de desastre. No mundo dos sistemas legados, a métrica mais importante de velocidade não é a frequência de entrega, mas sim a estabilidade e a continuidade do negócio.


Os Guardiões da Estabilidade: Papéis e Rituais

Um processo robusto não funciona sozinho. Ele precisa de pessoas com papéis claros, verdadeiros guardiões que garantem que o ritual seja seguido.

O Release Manager (O Maestro):

Esta não é, necessariamente, a pessoa mais técnica da equipe. É a mais organizada. O Maestro não toca todos os instrumentos, mas garante que a orquestra inteira esteja em sincronia. Ele cuida do cronograma, da comunicação entre as equipes, dos checklists e é o ponto central de contato para qualquer dúvida sobre a release.

O Comitê de Gestão de Mudanças (GM/CGM):

Muitas vezes visto como um órgão burocrático, o Comitê tem um papel vital: ele é o fórum onde TI e Negócios se encontram para aprovar formalmente a "ida para a produção". É o momento em que a área de negócio diz "Estou ciente do que esta release contém e aprovo a mudança" e a TI diz "Fizemos todos os testes necessários e estamos confiantes na estabilidade". É um ritual de responsabilidade compartilhada.

A Reunião de Go/No-Go:

Este é o momento final antes da implantação. É uma reunião curta e direta com todos os envolvidos. O Maestro da release faz a pergunta final a cada área (Infraestrutura, QA, Desenvolvimento, Negócios): "Temos um 'Go' (vamos em frente) ou um 'No-Go' (abortar)?". Se houver uma única voz de "No-Go" com uma justificativa plausível, a operação é abortada. Isso garante que nenhuma preocupação de última hora seja ignorada.

O Post-Mortem:

Após a batalha, seja ela uma vitória ou uma derrota, a equipe se reúne. O objetivo não é caçar culpados, mas responder a uma única pergunta: "O que aprendemos?". O que deu certo? O que deu errado? O que podemos fazer para que a próxima release seja ainda mais segura e eficiente?


Quando a release dá problema: 5 Anti-Padrões que Levam ao Desastre

Por fim, preciso te alertar sobre as armadilhas, os comportamentos que vejo se repetirem e que sabotam até o processo mais bem desenhado. Eu os chamo de "anti-padrões".

A "Homologação de Fachada":

Acontece quando a pressão por prazo é tão grande que a equipe de QA é forçada a "assinar embaixo" sem ter tido tempo de rodar todos os testes regressivos. "Só dessa vez, vamos pular os testes da área X, ela raramente dá problema". Isso é jogar roleta russa com a produção.

O "Plano de Rollback de Papel":

Todo mundo diz que tem um plano para reverter a versão em caso de desastre. Mas esse plano já foi testado alguma vez? Na maioria das vezes, não. E na hora da crise, descobre-se que ele não funciona, transformando um problema de minutos em uma crise de horas.

O "Code Freeze Furado":

O pacote da release está "congelado", mas aí começam as exceções. "Por favor, inclui só mais essa correção, é urgente, o diretor pediu!". Cada pequena mudança incluída após o início dos testes é uma bomba-relógio, pois ela não passou pela mesma bateria de validação que o resto do pacote.

A Comunicação Deficiente:

A equipe de TI executa o processo com perfeição, mas se esquece de comunicar de forma clara e simples para a empresa o que está mudando. Na segunda-feira, os usuários encontram telas diferentes ou funcionalidades alteradas, o que gera uma onda de chamados no suporte e uma sensação de caos.

A Cultura do Herói:

É quando a empresa depende de um ou dois desenvolvedores geniais que, na madrugada da implantação, resolvem todos os problemas no braço. A empresa aplaude o herói, mas não percebe que está mascarando um processo falho. O verdadeiro sucesso não é ter um herói para apagar o incêndio, é ter um processo que impede o fogo de começar.



Entender e evitar esses anti-padrões é tão importante quanto seguir o processo técnico. Agora que já vimos o "arranha-céu" por dentro e entendemos os desafios humanos, a pergunta que fica é: estamos condenados a viver para sempre nesse ciclo? Ou existe um caminho para a evolução? É isso que veremos na próxima parte.



Construindo a Ponte para o Futuro:
Evolução em Vez de Revolução

Depois de tudo o que conversamos, você pode ter a sensação de que o nosso trabalho com sistemas legados é apenas gerenciar um declínio inevitável. Mas eu quero te propor uma visão diferente. O "Ciclo de Release Programado", com toda a sua disciplina e seu rigor, não é um beco sem saída. Ele é uma base operacional segura. É o nosso acampamento-base no pé do Everest. A partir dele, com estabilidade e sem correria, nós podemos e devemos planejar a subida.

A evolução de um sistema monolítico não acontece em um grande salto, mas em uma série de passos deliberados e inteligentes. E na minha experiência, essa jornada sempre começa com o mesmo passo.


O Primeiro e Mais Importante Passo: A Rede de Segurança

Muitas vezes me perguntam:
"Se você pudesse fazer uma única coisa para começar a modernizar um sistema legado, o que seria?".
Minha resposta é sempre a mesma: criar uma suíte de testes de regressão automatizados.
Esta não é apenas uma melhoria; é o alicerce de toda e qualquer modernização futura.

Pense no trabalho heroico e manual da equipe de QA, caçando fantasmas por semanas a fio. Agora, imagine se pudéssemos ensinar um exército de robôs a fazer 80% desse trabalho por nós, durante a madrugada, e nos entregar um relatório completo pela manhã. Isso não elimina a necessidade de testadores humanos, mas os liberta para focar em testes mais complexos e exploratórios, em vez de repetir os mesmos 500 cenários a cada release.

Construir essa rede de segurança é um projeto por si só. É difícil, especialmente em sistemas que não foram projetados para serem testados. Mas o ganho é transformador. Com uma boa cobertura de testes automatizados, nosso ciclo de homologação, que hoje leva semanas, pode cair para dias. Aquele ciclo de release, que saía a cada trimestre, pode começar a sair mensalmente. A confiança da equipe aumenta, e o medo de fazer mudanças começa a diminuir.

Desacoplamento Cirúrgico e Inteligente

Com a rede de segurança no lugar, podemos começar a fazer cirurgias no nosso arranha-céu. A estratégia mais segura para isso tem um nome curioso: o Padrão Strangler Fig (Figueira Estranguladora).

A ideia é brilhante em sua simplicidade. Em vez de reformar um andar inteiro do nosso prédio monolítico, nós construímos um anexo moderno ao lado dele para abrigar um único departamento. Por exemplo, digamos que o nosso módulo de cálculo de frete é antigo, instável e vive dando problemas. Nós construímos um microsserviço novinho em folha, usando tecnologia moderna, que faz apenas uma coisa: calcular frete.

Então, nós fazemos um pequeno desvio no "encanamento" do sistema principal. Toda vez que alguém precisar calcular o frete, em vez de usar o método antigo dentro do monolito, o sistema agora faz uma chamada para o nosso novo anexo. De forma transparente para o usuário, a funcionalidade foi modernizada. Com o tempo, nós construímos outros anexos para outras funcionalidades críticas. Aos poucos, a figueira (os novos serviços) vai crescendo e "estrangulando" o prédio antigo de suas responsabilidades, até que um dia ele se torna uma casca vazia que pode ser demolida com segurança. Isso é evolução, não revolução. É uma forma de modernizar com baixo risco, uma peça de cada vez.


Mudando a Mentalidade: Redefinindo o Sucesso

Finalmente, a evolução exige uma mudança na nossa própria régua de sucesso. A meta não pode ser "implantar CI/CD no nosso monolito em seis meses". Isso é uma receita para a frustração.

O sucesso, aqui, é medido de forma incremental. A vitória é quando o seu ciclo de release, que saía a cada X tempo, passa a sair X/2 tempo, por exemplo. A vitória é quando o número de incidentes críticos em produção cai pela metade após a implantação da sua suíte de testes. A vitória é quando o seu primeiro "anexo" (microsserviço) entra no ar e assume uma responsabilidade do sistema antigo, provando que a evolução é possível.

Celebre cada uma dessas vitórias. Elas mostram para a equipe e para a diretoria que o caminho, embora longo, está sendo percorrido de forma segura e inteligente.


Conclusão:
Respeitando o Ritmo, Planejando a Evolução

Ao final desta nossa conversa, espero ter deixado uma mensagem clara. O "Ciclo de Release Programado", que para muitos parece uma relíquia de um tempo passado, não é um sinal de atraso. Pelo contrário, é um sinal de maturidade e responsabilidade no gerenciamento de sistemas que são, muitas vezes, o coração pulsante de uma empresa.

Não demonize seu legado. Não tenha vergonha do seu processo metódico. Entenda-o, respeite o seu ritmo e use a estabilidade que ele te proporciona como uma plataforma de lançamento. Comece hoje a construir sua rede de segurança, planeje sua primeira cirurgia de desacoplamento e celebre cada pequeno passo.

Essa é a forma como, na prática, transformamos arranha-céus antigos em cidades modernas, sem nunca colocar em risco os cidadãos que vivem e dependem deles todos os dias.