O bug mais estranho que já vi até agora
(engineering.gusto.com)Descoberta e processo de resolução de um bug estranho
- Durante o plantão on-call da equipe de ferramentas internas, usuários que utilizavam o software interno da Gusto enfrentaram travamentos no navegador Chrome.
- Esse problema causou vários prejuízos ao atendimento ao cliente.
- Para resolver o problema, foi solicitada a ajuda de colegas experientes, da equipe de infraestrutura de produto e da equipe de TI.
Primeira pista
- Tentaram encontrar características em comum entre os usuários afetados.
- Nem todos os funcionários da Gusto foram afetados, e o software voltado ao cliente não apresentou problemas.
- Outras páginas web de software interno funcionavam normalmente.
- Os travamentos aconteciam de forma inconsistente, e o problema não ocorria no Safari nem no Firefox.
Segunda pista
- Foi levantada a hipótese de que a versão do Chrome pudesse ser a causa.
- Quando alguns usuários atualizaram a versão do Chrome, pareceu que o problema havia sido resolvido, mas isso não foi suficiente.
- Também suspeitaram que extensões do Chrome pudessem ser a causa, mas o problema foi reproduzido mesmo sem extensões.
Dificuldade para reproduzir o bug
- A equipe de infraestrutura pediu a todos os engenheiros que tentassem reproduzir o problema.
- Entre a equipe de engenharia, ninguém relatou travamentos, exceto dois engenheiros na Turquia.
- Como o recurso de relatório de travamentos do Chrome estava desativado por motivos de segurança, isso dificultou a investigação.
Uma reviravolta de sorte
- Um engenheiro em Denver relatou que o problema começou depois de baixar o aplicativo de desktop do Grammarly.
- Descobriu-se que remover o aplicativo do Grammarly e reiniciar o computador resolvia o problema.
Progresso
- Com a possibilidade de depurar o problema, foram feitas várias tentativas para encontrar a causa.
- O principal aplicativo interno era construído com base no ActiveAdmin, mas as partes novas que usavam React não travavam.
- Ao investigar trechos de código em comum, descobriram que o menu suspenso
My Historyera a causa do problema.
Resolução do problema
- Foi confirmado que o arquivo de imagem
loader-spinner.gifera o responsável pelo problema. - Quando esse GIF foi substituído por outra imagem, a página deixou de travar.
- Não ficou claro se o problema foi corrigido pelo Grammarly ou pelo Chrome, porque agora o GIF original já não faz o Chrome travar.
Conclusão
- Um GIF animado inesperado acabou sendo a chave para resolver o bug.
- O problema foi resolvido com curiosidade e colaboração.
- A Gusto oferece a oportunidade de trabalhar com pessoas colaborativas e curiosas.
Opinião do GN⁺
O ponto mais importante deste texto é a descrição detalhada do processo de descobrir e resolver um bug causado por um motivo inesperado. O texto mostra a complexidade e a imprevisibilidade da engenharia de software, além de enfatizar como trabalho em equipe e persistência na resolução de problemas são fundamentais. Ele oferece um caso interessante de como uma equipe de engenharia pode colaborar para resolver um problema difícil, o que o torna uma história bastante atraente para pessoas interessadas em engenharia.
1 comentários
Opiniões no Hacker News
Enquanto lia, pensei que talvez fosse um problema relacionado ao Grammarly; no passado, passei por um bug com um padrão parecido, que não era reproduzível, mas afetava muitas pessoas dentro de um departamento específico
No fim, o ponto em comum era ter a extensão do Grammarly instalada, e o problema ocorria apenas na URL de pré-visualização do staging, não no site em produção
A causa era uma regex incorreta da extensão do Grammarly, e a página travava quando o nome de domínio passava de cerca de 100 caracteres
Se este caso realmente foi causado pelo app desktop, parece ainda mais assustador
Muitos problemas acabam sendo reduzidos a uma combinação específica, mas, se não sabemos por quê, não é satisfatório
Por isso estou lendo agora sobre mecanismos de regex: https://swtch.com/%7Ersc/regexp/regexp1.html
Durante um upgrade corporativo para Windows 10, trocamos o notebook antigo de uma gerente; os procedimentos estavam bem definidos, incluindo verificação dos requisitos do software e da rede, backup do perfil do usuário e dos documentos etc.
A ficha de avaliação do equipamento indicava um ThinkPad de 10 anos, 4 GB de RAM e uma observação de que ele desligava se o cabo de energia fosse removido; achei impressionante a paciência dela em continuar usando aquilo
Depois da entrega do notebook novo, quase tudo funcionava normalmente, mas a licença do Grammarly não foi transferida, então abrimos uma solicitação; uma semana depois, a chave de licença foi aplicada e confirmamos que o Grammarly também estava funcionando
Só que, mais tarde naquele dia, ela avisou que a página web das câmeras de segurança estava dando crash; o help desk tentou reiniciar, limpar cache, reinstalar o navegador e recriar o perfil, mas nada resolveu, então o caso veio para mim
Verifiquei rede, logs de firewall, outros PCs e acesso tanto local quanto externo, mas do meu lado tudo funcionava, e ninguém mais tinha o problema
Quando perguntei “mudou alguma coisa recentemente no PC ou no escritório?”, ela respondeu meio brincando: “instalei o Grammarly hoje; será que é isso?”; como eu já não tinha mais ideias, removemos de verdade, e então funcionou
Ao ativar o Grammarly de novo e clicar no link, falhou com certeza
Aquele software de câmera era muito antigo, e o link personalizado da página inicial parecia uma URL PHP gerada muito longa; como ela era a única pessoa no local que usava Grammarly, foi um problema que apareceu uma única vez
Desenvolvedores frequentemente esquecem que extensões podem ser a causa, mas extensões conseguem fazer todo tipo de coisa com uma página web
Um professor universitário disse que estava escrevendo um artigo e que o sublinhado não permanecia; achei que fosse um simples erro de usuário e que eu conseguiria ajudar em 5 minutos
Mas só depois de mais de 3 horas descobri que uma combinação específica de uma versão de driver de placa de vídeo com uma versão de driver de impressora específica impedia apenas a saída do sublinhado
https://www.zdnet.com/article/xerox-scanners-alter-numbers-i...
Mesmo que os relatórios de crash estejam desativados, é possível que um arquivo .dmp tenha sido gerado em algum lugar no diretório do perfil do usuário
Se esse arquivo for enviado manualmente para um bug em https://crbug.com/new, os desenvolvedores do Chrome poderão depurá-lo
Se não puder compartilhar o dump por motivos semelhantes aos de ter desativado o relatório de crash, você pode compilar o
minidump_stackwalkno Chromium para gerar um stack trace sem símbolos e anexá-lo ao bugAssim, os desenvolvedores do Chrome poderão adicionar os símbolos
Mais detalhes estão em https://www.chromium.org/developers/decoding-crash-dumps/
A combinação de tecnologias que criou esse bug é interessante. A web de 2023 é bem isso
Gostaria de saber se o bug do Chromium foi resolvido, mas não é fácil navegar por esta lista: https://bugs.chromium.org/p/chromium/issues/list?can=1&q=gif...
Também gosto da sensação de que a Gusto publicou esse texto para dar uma leve alfinetada no Grammarly, mostrando que “não foi culpa nossa”
Havia um problema em que, às vezes, o som não funcionava depois de inicializar no Linux; no fim, descobri que tinha relação com a configuração de dual boot com Windows
Ao reiniciar pelo Windows, ele não desligava completamente o dispositivo de áudio Realtek, apenas o deixava em modo de economia de energia, e o Linux não conseguia iniciar o dispositivo
A única solução era sempre desligar pelo Windows e então ligar pelo botão de energia, e o problema ainda existe: https://askubuntu.com/questions/1032543/no-sound-in-ubuntu-1...
Uma pessoa que usava dual boot com Windows e Linux só conseguia fazer o Wi-Fi funcionar se inicializasse no Windows e depois reiniciasse para o Linux
Como a instalação do Linux não tinha o pacote de firmware da placa Wi-Fi, ao reiniciar a partir do Windows o dispositivo já estava pronto, mas ao fazer um cold boot direto no Linux não funcionava
Concordo que o desfecho é completamente broxante
É uma história de que só dá para especular, já que não se tem acesso nem ao código-fonte do Chrome nem ao do Grammarly, e fico me perguntando se isso é resultado do movimento de “código aberto”
Sem o código-fonte, surgiram desenvolvedores que ficam totalmente perdidos e se recusam a investigar mais a fundo; para empresas que não querem que a verdade venha à tona, essa atitude deve ser muito bem-vinda
Antigamente havia muita gente que, mesmo sem o código-fonte, desassemblava, entendia e corrigia programas, e uma boa parte dessas pessoas nem era desenvolvedora profissional
Elas simplesmente tinham a motivação de fazer o software se comportar do jeito que queriam e, nesse processo, acabavam aprendendo naturalmente o quanto fosse necessário
O texto também toca no ponto de que a complexidade de toda a stack está insana. Ao ver frameworks em cima de frameworks surgindo em sequência, boa parte disso parece um problema que nós mesmos criamos
Dizem que remover o
loader-spinner.gif, ou seja, o placeholder exibido enquanto as opções do menu carregavam, fez a página parar de travar; também me pergunto se carregar opções de menu demora tanto assim a ponto de precisar de uma animaçãoO mundo da engenharia de software é imenso, e conhecer todas as partes da stack se tornou praticamente impossível há muito tempo
Além disso, engenharia de software é uma jornada de aprendizado, e cada pessoa está em um ponto diferente dessa jornada
Isso sem nem falar em abrir um desassembler ou anexar um depurador; parece que essas habilidades já não são muito ensinadas
Mesmo que normalmente termine quase instantaneamente, faz sentido ter um spinner de carregamento para o caso de demorar
O caso mais estranho foi o de um usuário que dizia que o texto digitado em um formulário específico mudava ao salvar
No começo achei que outra pessoa estivesse editando o mesmo formulário ao mesmo tempo, mas os logs não indicavam isso, e no meu computador o texto correto aparecia
Então percebi, por uma captura de tela, que alguns textos do menu também estavam estranhos, e a causa era que a opção “Traduzir esta página” do Chrome estava ativada
Depois que expliquei como trocar o idioma corretamente dentro do app, o problema desapareceu
Agora parece que este é o novo comando que pode ser aplicado a um app ou elemento. Acho que não é CSS porque não querem dar suporte a mudanças dinâmicas, e visualmente é feio: https://developer.mozilla.org/en-US/docs/Web/HTML/Global_att...
Às vezes, ao olhar as meta tags de grandes apps de página única, acabo descobrindo novos horrores enquanto tento entender por que aquela tag é necessária
Eu dependo bastante do Google Translate quando leio sites em japonês, e qualquer site que use React quebra
Isso acontece porque React e Google Translate tentam atualizar nós do DOM sem saber um do outro
Uma vez cheguei a olhar seriamente a implementação do Google Translate para ver se, no futuro, seria possível recriar um widget web que não tivesse esse problema
[1] https://bugs.chromium.org/p/chromium/issues/detail?id=872770
É um problema familiar demais
Já vi as ferramentas de acessibilidade do Chrome causarem esse tipo de problema em menus suspensos, e dava para reproduzir até com um HTML minúsculo
O bug específico que encontrei dois anos atrás estava no Chromium-Edge, mas os sintomas e a causa eram muito parecidos
O Grammarly quase certamente depende de alguma parte das ferramentas de acessibilidade do Chrome
Essas ferramentas variam um pouco entre navegadores baseados em Chromium, como Edge, Brave e Chrome
Na próxima vez que algo assim acontecer, recomendo simplesmente mandar usar outro navegador
Em especial, o Firefox ficou muito melhor para importar favoritos, senhas etc. do Chrome
O universo está enviando um sinal de que é hora de trocar, e não podemos rejeitar esse sinal
Só para constar, sou engenheiro do Firefox, mas isso não tem nada a ver com este conselho
Do ponto de vista de um PM, é como: gastamos 4 meses para facilitar o onboarding, e agora vamos pedir às pessoas que instalem um novo navegador?
Um produto baseado em navegador não funcionar direito no navegador mais usado do mundo não é um bom sinal
Adoro políticas de segurança corporativa que bloqueiam relatórios de falhas do Chrome por motivos de segurança, mas permitem que os funcionários instalem o Grammarly