Le bug le plus étrange que j’aie vu jusqu’ici
(engineering.gusto.com)Découverte et résolution d’un bug étrange
- Pendant une astreinte de l’équipe des outils internes, des utilisateurs du logiciel interne de Gusto ont subi des plantages du navigateur Chrome.
- Ce problème a provoqué diverses perturbations pour le service client.
- Pour le résoudre, de l’aide a été demandée à des collègues expérimentés, à l’équipe d’infrastructure produit et à l’équipe IT.
Premier indice
- Une tentative a été faite pour trouver un point commun entre les utilisateurs affectés.
- Tous les employés de Gusto n’étaient pas touchés, et le logiciel orienté client ne présentait aucun problème.
- Les autres pages web du logiciel interne fonctionnaient normalement.
- Les plantages survenaient de manière irrégulière, et le problème ne se produisait ni sur Safari ni sur Firefox.
Deuxième indice
- L’hypothèse a été posée que la version de Chrome pouvait être en cause.
- Chez certains utilisateurs, le problème semblait avoir été résolu après une mise à jour de Chrome, sans toutefois disparaître complètement.
- Il a aussi été supposé qu’une extension Chrome pouvait être responsable, mais le problème se reproduisait même sans extension.
Difficulté à reproduire le bug
- L’équipe d’infrastructure a demandé à tous les ingénieurs d’essayer de reproduire le problème.
- À l’exception de deux ingénieurs en Turquie, aucune équipe d’ingénierie n’a signalé de plantage.
- La fonction de rapport de crash de Chrome étant désactivée pour des raisons de sécurité, cela a compliqué l’enquête.
Un coup de chance décisif
- Un ingénieur à Denver a signalé que le problème était apparu après avoir téléchargé l’application de bureau Grammarly.
- Il a été constaté que supprimer l’application Grammarly puis redémarrer l’ordinateur résolvait le problème.
Des progrès
- Une fois le débogage rendu possible, plusieurs essais ont été menés pour identifier la cause.
- L’application interne principale était construite sur ActiveAdmin, mais les nouvelles parties utilisant React ne plantaient pas.
- En examinant la partie de code commune, il a été découvert que le menu déroulant
My Historyétait à l’origine du problème.
Résolution du problème
- Il a été confirmé que le fichier image
loader-spinner.gifprovoquait le problème. - Après avoir remplacé ce GIF par une autre image, la page ne plantait plus.
- Il n’est pas clair si c’est Grammarly ou Chrome qui a corrigé le problème, car le GIF d’origine ne fait désormais plus planter Chrome.
Conclusion
- Un GIF animé inattendu a finalement été la clé du débogage.
- Le problème a été résolu grâce à la curiosité et à la collaboration.
- Gusto offre la possibilité de travailler avec des personnes collaboratives et curieuses.
L’avis de GN⁺
Le point le plus important de cet article est la description détaillée du processus de découverte et de résolution d’un bug causé par une origine inattendue. Il montre la complexité et l’imprévisibilité du software engineering, tout en soulignant à quel point le travail d’équipe et la persévérance dans la résolution de problèmes sont essentiels. Il offre un exemple fascinant de la manière dont une équipe d’ingénierie peut collaborer pour résoudre un problème particulièrement déroutant, ce qui en fait une lecture très attrayante pour les personnes intéressées par l’ingénierie.
1 commentaires
Avis de Hacker News
En lisant, je me suis demandé si ce n’était pas un problème lié à Grammarly ; j’ai déjà rencontré un bug au comportement similaire, impossible à reproduire, mais qui affectait beaucoup de personnes au sein d’un service précis
Au final, le point commun était l’installation de l’extension Grammarly, et cela ne se produisait que sur une URL d’aperçu de staging, pas sur le site en production
La cause était une expression régulière incorrecte dans l’extension Grammarly, et la page se figeait dès que le nom de domaine dépassait environ 100 caractères
Si, dans ce cas, c’est vraiment l’application desktop qui en est la cause, c’est encore plus inquiétant
Beaucoup de problèmes sont circonscrits à une combinaison précise, mais si l’on ne sait pas pourquoi, ce n’est pas satisfaisant
Je suis donc en train de lire le moteur d’expressions régulières : https://swtch.com/%7Ersc/regexp/regexp1.html
Lors d’une mise à niveau généralisée vers Windows 10, on a remplacé le vieux portable d’un manager ; les procédures étaient bien en place, avec vérification des exigences logicielles et réseau, sauvegarde du profil utilisateur et des documents, etc.
La fiche d’évaluation du matériel mentionnait un ThinkPad de 10 ans, 4 Go de RAM, et une note indiquant qu’il s’éteignait dès qu’on débranchait le câble d’alimentation ; la patience avec laquelle il s’en accommodait était impressionnante
Après le déploiement du nouveau portable, presque tout fonctionnait, sauf le transfert de la licence Grammarly ; une demande a donc été faite, et une semaine plus tard la clé de licence a été appliquée et Grammarly a été confirmé comme fonctionnant normalement
Mais plus tard dans la journée, il nous a signalé que la page web des caméras de sécurité plantait ; le helpdesk a tenté redémarrage, suppression du cache, réinstallation du navigateur et recréation du profil, sans succès, puis le dossier m’a été transmis
J’ai vérifié le réseau, les logs du pare-feu, d’autres PC, les accès sur site et externes, mais tout fonctionnait de mon côté et personne d’autre n’avait le problème
Quand j’ai demandé s’il y avait eu récemment un changement sur son PC ou dans son bureau, il a répondu en plaisantant : « J’ai installé Grammarly aujourd’hui, ce serait ça ? » ; à court d’idées, on l’a vraiment désinstallé, et ça a fonctionné
On a réactivé Grammarly et cliqué sur le lien : l’échec était alors parfaitement reproductible
Ce logiciel de caméras était très ancien, le lien personnalisé de la page d’accueil ressemblait à une URL PHP générée extrêmement longue, et cette personne était la seule sur site à utiliser Grammarly, donc le problème n’est apparu qu’une seule fois
Les développeurs oublient souvent qu’une extension peut être en cause, alors qu’une extension peut faire toutes sortes de choses à une page web
Un professeur d’université écrivait un article et disait que le soulignement ne restait pas ; j’ai pensé à une simple erreur utilisateur et que je l’aiderais en 5 minutes
Mais il a fallu plus de 3 heures pour découvrir qu’une combinaison précise d’une version de pilote de carte vidéo et d’une version de pilote d’imprimante empêchait uniquement l’impression du soulignement
https://www.zdnet.com/article/xerox-scanners-alter-numbers-i...
Même si le signalement de crash est désactivé, il est possible qu’un fichier .dmp ait été créé quelque part dans le répertoire du profil utilisateur
En téléversant manuellement ce fichier dans un bug sur https://crbug.com/new, les développeurs de Chrome pourront le déboguer
Si, pour des raisons similaires à celles qui ont motivé la désactivation du signalement de crash, vous ne pouvez pas partager le dump, vous pouvez compiler
minidump_stackwalkdepuis Chromium afin de produire une trace de pile sans symboles et l’ajouter au bugLes développeurs de Chrome pourront ensuite y rattacher les symboles
Les détails se trouvent sur https://www.chromium.org/developers/decoding-crash-dumps/
La combinaison de technologies qui a créé ce bug est intéressante. Le web de 2023 ressemble exactement à ça
J’aimerais savoir si le bug Chromium a été corrigé, mais cette liste n’est pas facile à parcourir : https://bugs.chromium.org/p/chromium/issues/list?can=1&q=gif...
J’aime aussi l’impression que Gusto a publié ça pour montrer que « ce n’était pas de notre faute » tout en lançant une petite pique à Grammarly
Après avoir démarré sous Linux, il arrivait que le son ne fonctionne pas ; il s’est avéré que c’était lié à la configuration en dual boot Windows
Quand on redémarrait depuis Windows, celui-ci n’éteignait pas complètement le périphérique audio Realtek et le laissait seulement en veille, et Linux n’arrivait pas à le démarrer
La seule solution était de toujours éteindre Windows puis d’appuyer sur le bouton d’alimentation pour rallumer la machine, et le problème existe encore : https://askubuntu.com/questions/1032543/no-sound-in-ubuntu-1...
Quelqu’un qui utilisait Windows et Linux en dual boot ne voyait le Wi-Fi fonctionner qu’après avoir démarré sous Windows puis redémarré vers Linux
L’installation Linux n’avait pas le paquet de firmware pour la carte Wi-Fi ; après un redémarrage depuis Windows, le périphérique était déjà prêt, mais pas lors d’un démarrage à froid directement sous Linux
Je suis d’accord pour dire que la chute est vraiment décevante
Comme ils n’ont accès ni au code source de Chrome ni à celui de Grammarly, ils ne peuvent que spéculer ; je me demande si c’est le résultat produit par le mouvement « open source »
Sans code source, certains développeurs se retrouvent complètement perdus et refusent de creuser davantage, et pour les entreprises qui n’ont pas envie que la vérité sorte, cette attitude doit être très bienvenue
Autrefois, beaucoup de gens désassemblaient, comprenaient et patchaient des programmes même sans les sources, et bon nombre d’entre eux n’étaient même pas développeurs professionnels
Ils étaient simplement motivés par l’envie de faire fonctionner le logiciel comme ils le voulaient, et finissaient naturellement par apprendre ce dont ils avaient besoin
L’article touche aussi à la complexité délirante de toute la stack. Quand on voit les frameworks empilés les uns sur les autres, une bonne partie du problème semble auto-infligée
Ils disent que supprimer
loader-spinner.gif, c’est-à-dire l’espace réservé affiché pendant le chargement des options du menu, a fait cesser les crashs de la page ; je me demande déjà si le chargement d’options de menu prend vraiment assez longtemps pour nécessiter une animationLe monde de l’ingénierie logicielle est immense, et il est devenu depuis longtemps quasiment impossible de connaître toutes les parties de la stack
En plus, l’ingénierie logicielle est un parcours d’apprentissage, et chacun se trouve à un endroit différent de ce parcours
Sans même parler d’ouvrir un désassembleur ou d’attacher un débogueur ; on dirait que ces compétences sont désormais peu enseignées
Même si, en général, elle se termine presque instantanément, prévoir un spinner de chargement pour le cas où cela prendrait du temps est logique
Le bug le plus étrange, c’était quand un utilisateur disait que le texte qu’il saisissait dans un formulaire précis changeait après l’enregistrement
Au début, je pensais qu’une autre personne modifiait le même formulaire en même temps, mais les logs montraient que non, et sur mon ordinateur je voyais le bon texte
Puis j’ai remarqué sur une capture d’écran que certains libellés de menu étaient eux aussi étranges, et la cause était que l’option « Traduire cette page » de Chrome était activée
Une fois que je lui ai expliqué comment changer correctement la langue dans l’application, le problème a disparu
Il semble que ce soit désormais la nouvelle consigne à appliquer à une app ou à un élément. Ce n’est probablement pas du CSS pour éviter d’avoir à prendre en charge les changements dynamiques, et visuellement ce n’est pas joli : https://developer.mozilla.org/en-US/docs/Web/HTML/Global_att...
Parfois, en regardant les balises meta de grosses apps monopage et en cherchant pourquoi elles sont nécessaires, je découvre de nouvelles horreurs
Je m’appuie souvent sur Google Translate pour lire des sites japonais, et tous les sites qui utilisent React se cassent
C’est parce que React et Google Translate essaient tous deux de mettre à jour les nœuds DOM sans se connaître
J’ai même déjà regardé sérieusement l’implémentation de Google Translate pour voir si je pourrais un jour refaire des widgets web qui n’aient pas ce problème
[1] https://bugs.chromium.org/p/chromium/issues/detail?id=872770
C’est un problème trop familier
J’ai déjà vu les outils d’accessibilité de Chrome provoquer ce genre de souci dans des menus déroulants, et c’était reproductible avec un HTML minuscule
Le bug précis sur lequel je suis tombé il y a deux ans était dans Chromium-Edge, mais les symptômes et la cause étaient très similaires
Grammarly s’appuie presque certainement sur une partie des outils d’accessibilité de Chrome
Ces outils diffèrent légèrement selon les navigateurs basés sur Chromium, comme Edge, Brave ou Chrome
La prochaine fois que ça arrive, je recommande simplement de faire utiliser un autre navigateur
Firefox, en particulier, s’est beaucoup amélioré pour importer les favoris, mots de passe, etc. depuis Chrome
L’univers envoie un signal indiquant qu’il est temps de changer, et nous ne pouvons pas refuser le signal
Pour info, je suis ingénieur Firefox, mais cela n’a aucun rapport avec ce conseil
Du point de vue d’un PM, on vient de passer quatre mois à simplifier l’onboarding, et maintenant il faudrait dire aux gens d’installer un nouveau navigateur ?
Qu’un produit basé sur le navigateur ne fonctionne pas correctement dans le navigateur le plus utilisé au monde n’est pas un bon signe
J’adore vraiment les politiques de sécurité d’entreprise qui bloquent les rapports de plantage de Chrome pour des raisons de sécurité, tout en permettant aux employés d’installer Grammarly