Ir para o conteúdo principal
Background Image

Técnicas (a.k.a. gambiarras) de resolução rápida de problemas e bugs em produção

··5 minutos·
Rafael Issao
Autor
Rafael Issao
Apaixonado por tecnologia, programação e inovação. Adoro compartilhar conhecimento e aprender coisas novas todos os dias.
Tabela de conteúdos

Quem nunca fez um famoso workaround (gambiarra) para prevenir problemas futuros na produção?

Muitas vezes, demoramos para encontrar uma solução para a causa raiz do problema mas isso não deve ser desculpa para esconder o problema mais rápido do ambiente de produção. (gambiarra nunca resolve o problema, só esconde)

Enquanto não conseguimos implementar a melhor solução para o problema, devemos aplicar a solução temporária (gambiarra) para não causar mais problema no ambiente do cliente.

Compartilho três situações onde a equipe teve que implementar uma solução criativa (gambiarra) e as lições aprendidas em cada uma delas.

  • Update no banco de dados a cada 10 segundos

Instalamos uma versão nova em produção de noite e começamos a acompanhar o ambiente de produção no dia seguinte.

Logo no primeiro uso do sistema, alguns cenários travavam o processo principal do cliente. Estava ocorrendo um erro a cada 10 segundos.

Quando analisamos o problema, verificamos que faltava uma informação em uma coluna do banco de dados.

Executei um “UPDATE nomeTabela SET nomeColuna=‘Valor’. Resolveu!

Mas o problema é que eu tinha que executar o comando a cada 10 segundos manualmente.

Então tive a brilhante ideia (gambiarra) de criar um script que roda a cada 10 segundos e executa comando para mim.

Comecei a missão: Estava executando o comando em produção e criando script em paralelo.

Depois de alguns minutos, comecei a rodar o script e o problema na produção parou de acontecer. E também fiquei livre de executar manualmente o comando.

Estou com tempo livre para atacar o problema raiz.

Pensei: Como este problema chegou à produção?

Analisamos a causa e verificamos que o ambiente de teste de integração não atualizava o banco de dados quando existia uma migração nova!

Quando atualizamos corretamente o banco de dados, um teste de integração falhou!

Foi neste momento que aprendi sobre o Teste Canário. (Foi um termo que li em algum artigo que não encontro mais)

Este teste é responsável por verificar o ambiente de teste, antes de rodar os próprios testes.

O teste canário verifica:

  • O sistema está rodando?
  • O banco de dados está rodando?
  • O banco de dados está com a mesma versão de produção?
  • O banco de dados está com as tabelas atualizadas?
  • O banco de dados está com a massa de dados inicial?
  • A conexão entre sistema e banco de dados está funcionando?
  • As ferramentas de teste de integração estão funcionando?

Somente quando estas verificações são feitas que os testes de integração são executados.

Moral da história: Cuide muito bem do seu ambiente de teste de integração.

Reiniciando o servidor todo domingo
#

Sempre tínhamos a mesma reclamação do cliente: O sistema está ficando lento.

Depois de seis ou sete dias úteis, o nosso sistema ficava lento. Então, a nossa equipe reiniciava o servidor toda vez que ocorria este erro.

Mas para que este erro não acontecesse mais em ambiente de produção, e como o cliente não usava o sistema somente no domingo, todo domingo o sistema era reiniciado automaticamente.

Poderíamos deixar esta solução (gambiarra) e seguir a vida.

Mas investigamos o problema!

Mas era impossível reproduzir o problema no ambiente de teste e de homologação. Mesmo com teste de carga e de desempenho, não conseguimos deixar o sistema lento e também era difícil simular uma carga parecida com a de produção.

Mas a sorte estava do nosso lado. A equipe tinha acesso ao ambiente de produção.

Então começamos a coletar dados do ambiente de produção diariamente e começamos a verificar onde estava o problema.

Era problema de memory leak mas em pequenas quantidades diárias. Por isso que era difícil de identificar em ambiente de testes, pois nós perdíamos os dados a cada dia que passava. (O nosso ambiente de teste era sempre reiniciado para testar novas features)

Em uma semana, um desenvolvedor encontrou o problema e resolveu de forma definitiva.

Moral da história: As vezes precisamos de dados reais de produção para entender o problema.

Suporte que ocorria pouco, mas era chato
#

De vez em quando, surgem problemas que não são tão frequentes. Acontece uma vez a cada duas semanas.

Este tipo de problema é chato por duas razões:

  • Difícil de reproduzir por falta de informações claras para reproduzir
  • Como acontece pouco, é fácil de ignorar o problema

Mas a nossa equipe sabe que é chato para o cliente a para nós mesmos este suporte.

Para o cliente é chato pelo simples fato de não funcionar da maneira correta.

Para a equipe é chato também pois tem que interromper o que estava fazendo, lembrar como resolve o suporte para depois aplicar a solução (gambiarra) temporária.

A equipe pensou: Como podemos eliminar o problema para sempre?

Esse foi um problema que gerou duas ideias interessantes.

A primeira foi criar uma tela específica para o suporte que resolve o problema com um clique de um botão.

Esta tela é uma solução temporária para nós não sermos interrompidos e o próprio cliente resolver.

O cliente gostou da solução pois não precisava esperar a equipe atendê-lo e nós também ganhamos um pouco de tempo.

Mas para atacar o problema de fato, criamos registros de logs mais específicos para aquela operação. Então quando ocorria o problema, sabíamos exatamente o que o usuário tinha feito no processo. (O que foi digitado, o que foi clicado, quantas vezes, em quais telas ele visitou e assim por diante).

Com este passo a passo, foi fácil reproduzir o problema e corrigi-lo para sempre.

Moral da história: O cliente também gosta de ter poder para resolver os problemas. E às vezes, as informações que estão no suporte, mesmo que pareça completo, não são suficientes para encontrar a causa raiz do problema.

Conclusão
#

Sim, já fiz muitas gambiarras. Acho que muita gente passa por situações parecidas.

Mas eu tive o privilégio de participar em equipes que realmente resolviam os problemas de forma definitiva.

Além de entender melhor o problema e aprender mais sobre a solução, eu e a equipe tivemos a oportunidade de exercer a criatividade.

São situações tão excepcionais e específicas que não existe uma solução pronta nem na internet ou no LLM como ChatGPT ou DeepSeek.

E você? Tem tido tempo e oportunidade para resolver os problemas na causa raiz?

Comenta ou vem falar comigo!

🥒🥒 Espero que tenham curtido e até o próximo artigo! 🥒🥒