POTHIEDU Não Decore a Resposta. Entenda o Caminho

Meu Jeito Certo De Fazer Tudo Errado

Meu Jeito Certo De Fazer Tudo Errado

Por que seu processo de implantação quebra no final de semana

Você já deve ter visto isso acontecer. A equipe configura um novo pipeline de entrega, testa localmente, sobe para staging e tudo parece normal. Duas semanas depois, em produção, os timeouts aumentam 400% e ninguém sabe o motivo. O problema geralmente não é a tecnologia em si. É a forma como as suposições sobre o ambiente se acumulam. Eu chamo isso de meu jeito certo de fazer tudo errado. Não é um mantra motivacional. É a lista real de decisões que todo time toma sem perceber e que depois viram dores de cabeça. Começa na primeira linha de configuração do ambiente até o momento em que o código é enviado para os servidores de produção.

A planilha de dependencies que ninguém atualiza

Quase todo projeto que eu vejo tem um arquivo de dependências que não reflete a realidade. Pode ser package.json, requirements.txt, pom.xml ou Gemfile. O arquivo diz uma versão. O servidor roda outra. Ou melhor, roda uma versão compatível que gerou um bug que só aparece sob carga. Eu vi um caso onde o pacote de criptografia foi resolvido para uma versão beta porque alguém atualizou o lockfile sem rodar o teste de integração correspondente. O sistema não quebrou imediatamente. Ele começou a gerar tokens inválidos três meses depois, quando um microserviço secundário passou a exigir validação mais estrita. O trabalho-around que funcionou foi simples. Criar um job de validação que roda todas as noites verificando a assinatura dos tokens gerados nas últimas doze horas. Quando a taxa de erro passou de 0,1%, o alerta disparou e a equipe identificou a divergência entre o lockfile e a versão instalada. A partir daí, trouxemos a prática de validar o lockfile com um script de snapshot que compara hashes das bibliotecas contra um arquivo de referência no repositório. Qualquer diferença gera falha no CI antes de chegar ao ambiente de homologação.

Como configurar o ambiente sem se arrepender depois

O primeiro passo é aceitar que o ambiente de desenvolvimento nunca será idêntico ao de produção. Isso evita surpresas. Você precisa espelhar pelo menos três coisas: versão do runtime, variáveis de sistema e limites de recursos. Se faltar algum desses itens, a diferença vai aparecer em momentos ruins. Eu costumo usar arquivos .env.example documentados com exemplos de valores válidos, nunca placeholder genérico. Valor placeholder como "sua_chave_aqui" não ajuda ninguém. Colocar um exemplo real funciona, mesmo que seja de um serviço de staging. A equipe que recebe o projeto sabe exatamente qual formato esperar.

Livro Meu Jeito Certo de Fazer Tudo Errado - Klara Castanho - Luiza ...
Livro Meu Jeito Certo de Fazer Tudo Errado - Klara Castanho - Luiza ...

A armadilha dos arquivos temporários

Depois de implantar, muitos times criam soluções temporárias que viram permanentes. Arquivos de debug, logs de acesso expostos, credenciais hardcodadas em variáveis de ambiente esquecidas. Isso aparece principalmente quando há pressão por prazo. Eu já passei por isso. Em 2022, precisei corrigir um vazamento de chave de API que ficou exposto por seis semanas em um repositório privado. A chave era acessível porque um colega tinha criado um script de deploy manual que puxava o arquivo de configuração diretamente da raiz do projeto. O script nunca foi removido. A correção foi dupla. Remover o script e adicionar uma verificação automatizada no pré-merge que escaneia arquivos por padrões de tokens e credenciais. Ferramentas como detect-secret ou grep por padrões conhecidos resolvem o problema sem atrito. A regra que aplicamos foi simples: qualquer PR que introduza um arquivo novo passa pela varredura antes de receber review. Isso elimina a dependência da atenção humana.

O teste de integração que ninguém lê

Testes automatizados existem para dar confiança. Mas testes mal escritos criam falsa segurança. Teste que passa em todas as condições mas não cobre o cenário de falha é pior que não ter teste nenhum, porque a equipe para de questionar o comportamento do sistema. Um exemplo clássico é o teste de conexão com banco de dados. Você vê um teste que verifica se a conexão funciona com sucesso. Isso só prova que o banco está rodando, não que o código lida corretamente com timeouts, conexões perdidas ou filas cheias. O teste que realmente importa é aquele que simula uma queda durante uma requisição ativa e verifica se a aplicação retry com backoff exponencial em vez de travar ou duplicar a operação. Eu costumo recomendar criar um arquivo de cenário de falha separado. Nomear o arquivo de forma clara, como failure_scenarios.test.js ou test_cenarios_falha.py. Dentro dele, colocar apenas casos onde o sistema deve degradar de forma previsível. Isso força a equipe a pensar na resiliência antes de pensar na funcionalidade.

Monitoramento que não mostra o problema real

Gráficos bonitos no dashboard não ajudam quando o sistema cai. Métricas agregadas mascaram anomalias pontuais. Latência média pode parecer boa enquanto 5% das requisições levam dez segundos para responder. O problema é que esse percentual corresponde aos usuários mais críticos, que estão no final da fila de processamento. A solução mais prática é monitorar percentis, não médias. P95 e P99 contam quanto tempo leva para a maioria absoluta das requisições. Quando o P99 dispara enquanto a média se mantém estável, você sabe que há degradação crescente. Essa foi a primeira vez que entendi a real instabilidade do nosso sistema de pagamentos. A média de latência estava em 120ms. O P99 atingia 4800ms em horários de pico. A diferença era invisível para quem olhava apenas para médias.

MEU JEITO CERTO DE FAZER TUDO ERRADO autor KLARA CASTANHO E LUIZA TRIGO ...
MEU JEITO CERTO DE FAZER TUDO ERRADO autor KLARA CASTANHO E LUIZA TRIGO ...

Documentação que ninguém usa

Documentação técnica eficiente não é longa. É direta. Cada página deve responder a uma pergunta específica. "Como faço X" é melhor que "Visão geral do sistema Y". Equipes que leem documentação precisam encontrar a resposta em trinta segundos. Se levam mais que isso, provavelmente vão recorrer ao colega que sabe ou tentarão descobrir sozinhos. O formato que funciona melhor é o protocolo de emergência. Quando algo quebra, existe um documento com passos numerados, comandos prontos e contatos. Nada de teoria. Só o necessário para agir. Esse documento precisa estar no mesmo repositório do código, não em uma ferramenta separada. A separação é a principal causa de desatualização.

A diferença entre staging e produção

Staging não deve ser uma cópia exata de produção. Deve ser um ambiente que simula as condições críticas de produção com dados anonimizados. Dados reais em staging expõem informações sensíveis e criam dependência de integrações que podem não estar disponíveis. Anonimização garante segurança sem perder a estrutura real dos dados. Eu já vi equipes que migravam dados diretamente do banco de produção para staging sem anonimização. Isso gerou problemas de conformidade e obrigou a reestruturação completa do pipeline de dados. A correção envolveu criar um processo de transformação que aplica máscaras em campos sensíveis antes da ingestão no ambiente de staging. O processo roda automaticamente após cada backup de produção.

Manutenção preventiva que faz diferença

Ciclos de manutenção não precisam ser complexos. Uma revisão quinzenal de dez minutos por componente é suficiente para detectar desvios. O foco deve ser: quais logs mostram crescimento anormal, quais métricas de desempenho estão em queda lenta e quais alertas foram silenciados recentemente. Alertas silenciados são um sinal importante. Quando um alerta é silenciado, anotar o motivo. Se o motivo for temporário, definir uma data para reavaliação. Se não houver data, o alerta permanece desativado indefinidamente e a equipe perde visibilidade sobre um problema potencial. Esse detalhe simples evita que alertas importantes deixem de funcionar sem que ninguém perceba.

Livro Meu Jeito Certo de Fazer Tudo Errado - Klara Castanho e Luiza ...
Livro Meu Jeito Certo de Fazer Tudo Errado - Klara Castanho e Luiza ...

O checklist de rollback

Muitos times testam o deploy, mas não testam o rollback. Quando uma atualização falha, a equipe gasta tempo descobrindo como reverter em vez de simplesmente executar um procedimento conhecido. Um checklist de rollback deve existir antes do primeiro deploy em produção. Ele deve incluir: como identificar a versão estável anterior, como restaurar o banco de dados, como verificar a integridade dos serviços após a reversão e como comunicar a situação aos envolvidos. Eu mantenho esse checklist no topo do repositório do projeto, em um arquivo chamado ROLLBACK.md. Toda vez que um novo serviço é adicionado, o checklist é atualizado junto. Isso cria um ciclo de melhoria contínua sem esforço extra.

Conclusão sobre meu jeito certo de fazer tudo errado

Não existe método perfeito. Existe método que gera menos surpresa. O diferencial entre um projeto que funciona bem e um que gera crises recorrentes costuma estar nos pequenos ajustes que parecem desnecessários no início. Atualizar o lockfile, adicionar validação noturna, criar cenários de falha, monitorar percentis, documentar protocolos de emergência. Nenhuma dessas medidas resolve tudo. Todas evitam que problemas pequenos se tornem emergências. O nome meu jeito certo de fazer tudo errado veio de uma reunião interna onde a equipe riu ao perceber que todas as falhas comuns seguiam um padrão reconhecível. Desde então, usamos esse termo como lembrete de que a perfeição é menos importante que a previsibilidade. Sistemas previsíveis falham de forma visível. Sistemas imprevisíveis falham de forma silenciosa e catastrófica. Se você está começando um projeto agora, aplique pelo menos três das práticas mencionadas antes do primeiro deploy em produção. Você vai economizar horas de troubleshooting no futuro. E se algo der errado, terá um checklist pronto para agir em vez de improvisar sob pressão.