Mon erreur a fait économiser 500 000 dollars à l’entreprise
(ludic.mataroa.blog)- Un ingénieur a réduit le paramètre d’inactivité de 10 minutes après les requêtes dans Snowflake, faisant passer le coût annuel estimé de la base de données d’environ 1 million de dollars à 500 000 dollars
- L’Advanced Analytics Platform, retardée pendant des années, dépendait même après son lancement d’une chaîne ETL complexe mêlant feuilles de calcul, S3, Lambda, MongoDB, Snowflake et procédures stockées JavaScript
- Au cœur du gaspillage de coûts se trouvait une architecture où, malgré moins de 1 To de données traitées par jour, le compute restait allumé longtemps après des requêtes de 2 secondes en moyenne
- La modification a d’abord été appliquée à une partie du compute, et le manager, tout en reconnaissant les économies, a voulu retarder son déploiement complet ; dans PowerPoint, cela a été présenté comme une optimisation issue d’une analyse des modèles d’utilisation
- Même après avoir réduit les coûts de 500 000 dollars, la récompense restait incertaine, tandis que la charge en réunions et en reporting augmentait : un cas où l’inefficacité de l’organisation a créé un coût politique plus élevé qu’une courte exécution individuelle
Une plateforme d’analyse repoussée pendant des années
- L’entreprise a décidé de construire une plateforme d’analyse afin de travailler de manière plus data-driven, et a recruté les personnes correspondantes
- L’ingénieur, embauché comme data scientist, n’a en réalité pas pu faire de travail de data science, et lorsqu’il demandait du compute pour du machine learning ou des pipelines de données, on lui répondait d’attendre le déploiement de l’Advanced Analytics Platform, ou AAP
- Au départ, la sortie d’AAP était prévue pour janvier, puis repoussée à mars, avant d’être suspendue en invoquant le Covid
- Trois ans après son départ de l’entreprise, AAP était enfin prête à être lancée, mais il est apparu que les fonctionnalités réellement nécessaires ne faisaient pas partie du plan initial
- La même semaine, quatre ingénieurs ont quitté l’entreprise, et il a rejoint l’équipe AAP après avoir posé ses conditions
La dette technique révélée juste après le lancement
- Peu après sa mise en ligne, AAP présentait déjà beaucoup de dette technique et de risques opérationnels
- Un collègue fraîchement recruté a découvert dès son premier jour un fichier dans le dépôt du projet qui permettait de supprimer la production via le pipeline CI/CD si l’on se déplaçait dans le mauvais dossier
- Ce fichier contenait aussi les clés et mots de passe nécessaires pour un compte administrateur
- Modifier les droits d’accès à la base de données, alors qu’il s’agissait simplement d’uploader un CSV d’environ 2 Ko, passait par un chemin excessivement long
- Python parse une feuille de calcul
- le résultat est placé dans S3
- Lambda le reconvertit vers S3
- MongoDB récupère le fichier S3
- une autre Lambda envoie les enregistrements MongoDB vers S3
- Snowpipe importe les données S3 dans Snowflake
- une procédure stockée JavaScript pivote les données Snowflake vers un format relationnel
- L’équipe sécurité avait exigé un format facilement scannable contre les contenus malveillants, si bien que tout avait été converti en CSV, mais l’outil de scan lui-même n’a jamais été déployé
- Les fonctions Lambda commençaient par un vestige d’implémentation précédente,
counter = 1, et cette ligne a continué à être copiée - Les tests CI/CD étaient en échec depuis des mois, car lors du débogage, l’utilisation de la commande
teeavait écrasé les codes d’échec - La récupération des mots de passe d’API était elle aussi inutilement compliquée en deux étapes
- En cherchant une clé comme
service-passworddans un service AWS, on obtenait aussiservice-passwordcomme valeur - Cette valeur était ensuite utilisée dans un autre service pour retrouver le vrai mot de passe
- En cherchant une clé comme
- Le script de génération des fichiers de configuration du pipeline commençait par 600 lignes commentées, au cas où elles serviraient un jour
La configuration Snowflake à l’origine du dépassement de coûts
- La plateforme coûtait plusieurs fois plus cher que le modèle d’exploitation précédent et dépassait largement le budget prévu pour la base de données
- Les coûts annuels d’exploitation semblaient à l’origine avoir été pensés autour de 200 000 dollars, mais l’estimation réelle approchait presque 1 million de dollars
- La base de données était Snowflake, qui facture selon la taille des machines exécutant les requêtes
- Le compute n’engendre des coûts que tant qu’il reste allumé
- L’équipe exécutait quelques milliers de requêtes par semaine, la plupart étant des requêtes d’expérimentation de développeurs ajustant légèrement des rapports PowerBI que personne ne lisait
- Le temps moyen d’exécution des requêtes était d’environ 2 secondes, mais le compute était configuré pour rester inactif pendant 10 minutes après chaque requête
- Environ un mois après son arrivée, il a découvert ce réglage et proposé de l’ajuster, mais la discussion est restée bloquée sur des considérations de procédure autour d’un travail de découverte, sans passage à l’action
Une modification de 5 minutes et sa vérification
- Quelques mois plus tard, ayant reçu une carte « Discovery: Optimise Costs », il avait besoin d’un résultat à présenter au stand-up suivant et a décidé de vérifier lui-même son hypothèse initiale
- Il a demandé qu’on donne des droits administrateur à un nouvel ingénieur d’une autre équipe qui lui semblait compétent, mais le manager a refusé
- À la place, il a partagé des identifiants de base de données de niveau inférieur, non administrateur, et cet ingénieur a effectué une vérification de bon sens du potentiel d’économie
- Le dernier jour de la semaine à 16 h, après avoir vérifié dans un salon de discussion d’ingénieurs sans administrateurs qu’il n’y avait pas de problème, il a modifié le paramètre
- Par sécurité, il ne l’a d’abord appliqué qu’à une partie du compute, et non à l’ensemble
L’effet des économies et la réaction de l’organisation
- Le lundi suivant, la facture prévisionnelle est tombée d’environ 1 million de dollars à 500 000 dollars
- L’équipe a présenté cela comme une grande réussite en matière de réduction des coûts, mais de son point de vue, il s’agissait surtout d’arrêter une dépense déjà absurde
- D’autres équipes ont soulevé le fait qu’un nouvel ingénieur soit arrivé au même moment que ces économies et ont demandé pourquoi personne n’avait identifié cela plus tôt
- Le manager s’est réjoui, mais estimait aussi qu’appliquer immédiatement le changement à tout le compute attirerait trop l’attention sur le département et susciterait des questions indésirables
- Il y avait l’idée implicite qu’il valait mieux le déployer lentement, afin que cela ressemble à un travail de longue haleine
- Il a dû préparer un PowerPoint, avec une formulation du type : « Une analyse statistique rigoureuse des modèles d’utilisation a mis en évidence des opportunités de répartition plus efficace des ressources »
- En réalité, la modification consistait simplement à ajuster un réglage pour éviter qu’un compute coûteux reste inactif toute la journée
La charge laissée par le succès
- Il estime qu’en trouvant quelques bons ingénieurs et en agissant de façon informelle, il a obtenu plus facilement un résultat plus important que tout le département
- Selon lui, des personnes compétentes existent dans l’organisation, mais la structure les empêche d’exercer leur influence
- Après avoir économisé 500 000 dollars, il a demandé une augmentation de 30 000 dollars, mais son message a été laissé sans réponse, et il s’attend à ne rien recevoir ou peut-être environ 5 000 dollars
- Les réunions pour parler de ces économies se sont multipliées, et la charge de produire des PowerPoint s’est ajoutée
- Il conclut qu’il aurait peut-être mieux fait de ne rien faire : en agissant pendant 5 minutes, il a obtenu la plus grande réussite de sa carrière, avant d’hériter aussitôt d’une charge supplémentaire
1 commentaires
Commentaires sur Hacker News
Je me reconnais beaucoup trop dans tout cet article
Dans l’US Navy, j’avais à mon actif des économies de coûts de plus de 50 millions de dollars. À chaque fois que je faisais quelque chose, je devais préparer un PowerPoint et le présenter à des officiers généraux, et une fois j’ai même failli être sévèrement sanctionné parce qu’on m’accusait de ne pas avoir laissé mon supérieur s’attribuer le mérite. En réalité, ce supérieur n’avait absolument aucune idée de ce que j’avais fait, donc il n’avait même pas l’intention de s’en attribuer le mérite
Une partie de cela remonte à l’époque où je menais des projets transverses en tant que Lean Six-Sigma Black Belt, et je déteste cette expression dans son ensemble. Mon travail consistait littéralement à réduire au maximum les coûts du DOD, et ça a été la pire période de ma carrière. Pour avoir résolu de ma propre initiative des problèmes qui avaient permis d’économiser des millions de dollars, ma récompense a été ce poste
Je suis d’accord avec la fin du billet. Il faut faire attention quand on fait du bon travail au bureau. La récompense n’est presque jamais de l’argent, mais davantage de travail pour le même salaire
Avant, j’étais dans un endroit bien meilleur, et quand je prenais l’initiative d’économiser des millions de dollars, on me félicitait vraiment et mon manager reconnaissait effectivement mon mérite
Il ne faut jamais rester dans une entreprise à la culture toxique. Même si le salaire est meilleur. Il n’y a rien de plus destructeur pour l’âme que d’être écrasé par des carriéristes incompétents et mesquins, ou des maniaques du contrôle
En gros, il disait : « L’avantage du gouvernement américain, c’est qu’il est tellement énorme que, même si la solution optimale permet d’économiser 30 % et que votre solution de second rang n’en économise que 29 %, cela représente quand même des dizaines ou des centaines de millions de dollars, donc personne ne s’en aperçoit »
Un de ses gros projets portait sur l’efficacité énergétique des camps militaires isolés. Dans certaines zones d’Afghanistan, livrer du carburant revenait à environ 100 dollars le gallon, et quantité de générateurs mobiles tournaient à 20 à 40 % de leur capacité. De mémoire, le rendement optimal se situait autour de 70 %, et on pouvait réduire fortement la consommation de carburant tout en améliorant la qualité de service en construisant de petits bâtiments ou en raccordant plusieurs tentes à un même générateur
En tant qu’ingénieur FAANG, j’ai travaillé sur des sujets directement liés aux flux financiers et j’ai aussi de l’expérience dans divers domaines où cela pourrait être utile
Puis je me dis que trouver les bonnes personnes et le bon périmètre d’action représenterait probablement 95 % du travail, et j’abandonne l’idée
En revanche, d’après ce que j’ai compris du système, suivre ce parcours accélérait rapidement les promotions
Je veux un travail salarié stable, mais je sais que si je suis performant, les managers y verront du temps disponible et me chargeront davantage jusqu’à la limite. Les gens cupides refusent catégoriquement toute répartition du chiffre d’affaires ou partage des bénéfices, et se contentent de dire en gros : tais-toi et travaille, on te donnera 5 % d’augmentation par an
Quelques postes auparavant, on m’avait demandé dans l’entreprise d’indiquer les noms des projets dont j’assurais activement la maintenance ; dans Excel, avec la taille de police par défaut, la liste remplissait deux écrans entiers. J’ai fait un burnout au point de sombrer dans une dépression sévère
Ce qui est encore pire, c’est que je déteste aussi tout le cirque absurde de la recherche d’emploi, comme une sorte de rituel de soumission
Ça me fait penser aux billets de Dan Luu : https://danluu.com/nothing-works/
Les outils logiciels pour les puces, c’était pareil. Le standard consistait à sous-traiter les outils à de grands éditeurs EDA, mais nous avions obtenu d’excellents résultats avec des outils sur mesure, généralement créés ou maintenus par une seule personne
Pendant la majeure partie de mon temps là-bas, la plupart des cycles de simulation tournaient sur un simulateur sur mesure maintenu par une seule personne, ce qui permettait d’économiser plusieurs millions de dollars par an en coûts de simulation. À l’époque, le prix standard était de plusieurs milliers de dollars par an pour une seule licence de simulateur, et la ferme de machines de simulation comptait environ un millier de machines
Si une seule personne peut créer ou maintenir un outil qui vaut plusieurs millions de dollars par an à une entreprise, on pourrait croire que les concurrents feraient évidemment la même chose, mais en pratique la plupart ne le faisaient pas. C’est comme le fait que les concurrents n’embauchaient pas des gens capables d’ouvrir et d’inspecter des wafers, alors même que cela leur aurait permis de sortir leurs produits plus vite et à moindre coût
Dan Luu parle de la « version cocktail de l’hypothèse de marché efficient », mais la version économique de « rien ne marche » se rapproche davantage de https://en.wikipedia.org/wiki/The_Market_for_Lemons. C’est un texte sur le rôle de l’information et de l’asymétrie d’information sur les marchés
L’hypothèse de marché efficient échoue parce qu’une connaissance parfaite est impossible et que la sélection adverse existe réellement
Il existe aussi des entreprises qui sont l’exact opposé de ce que décrit le billet d’origine. Une fois qu’on a travaillé dans ce genre d’entreprise, il devient impossible de se résigner à retourner dans un mauvais endroit
Tout l'article est de l'or pur
Les managers ont demandé comment il avait pu économiser autant sans leur aide, ont exigé des slides, ont posé plusieurs fois des questions sur ce qui s'était passé, et il a fallu déployer ça lentement pour donner l'impression que ce n'était pas juste un petit toggle mais quelque chose de progressif construit avec le temps ; il a demandé une augmentation au vu de l'impact, mais ça n'a pas abouti
Pour lui-même aussi, il ferait mieux de postuler dans une boîte type FAANG. Au minimum, il y a plus de chances qu'on s'occupe mieux de lui
Et s'il ajoutait des métadonnées de carte Twitter sur le blog, ça rendrait sans doute mieux sur Twitter
« Bonjour, je vais vous expliquer comment il a été possible d'économiser 500 000 dollars. En gros, j'ai examiné à quel point l'infrastructure d'origine avait été déployée n'importe comment sur une journée, puis j'ai supprimé une fonctionnalité de test de code qui causait des problèmes. C'était un oversight complet sur tous les plans : développement, management, tests, tout. Globalement, ce code était aussi proche du pire que possible et il a quand même été mis en production. Et on m'a dit de ne pas dire ça parce que tout le monde aurait l'air mauvais, et de le déployer progressivement pour que les managers aient l'air d'avoir fait quelque chose »
Puis j'aurais posé le micro et quitté la scène
Honnêtement, j'aurais eu énormément moins envie de m'en soucier. Ça fait presque 20 ans que je fais ce métier, et même du point de vue de quelqu'un qui se soucie de son travail parce qu'il faut payer les factures et nourrir les enfants
J'ai monté un tableur de modèle de coûts, je l'ai documenté et je l'ai donné à mon chef, qui m'a dit : « Je vais regarder. » Deux semaines plus tard, je lui ai demandé s'il l'avait vu, et il m'a répondu : « Oui, ça a l'air juste. Bon boulot. » Je lui ai demandé s'ils allaient le tester, et sa réponse était mémorable
« Non, on n'est pas payés pour économiser de l'argent, on est payés pour en dépenser »
C'est à ce moment-là que j'ai vraiment compris les contrats publics de type Cost+Award Fee
L'inconvénient, c'est qu'il faut probablement écrire ce document avant de faire le changement, obtenir une review de toute l'équipe et s'aligner
Il n'a pas économisé 500 000 dollars par accident ; il a délibérément économisé 500 000 dollars et il le regrette maintenant. Ce n'est pas la même chose
Les grandes organisations sont tellement inefficaces qu'il est étonnant qu'elles puissent rester compétitives, mais elles ont beaucoup d'argent, des économies d'échelle, et tout le reste. Au passage, elles peuvent brûler des millions en gaspillage stupide et en inefficacité sans que ça n'inquiète vraiment grand monde
Malgré cela, elles continuent à fournir des services ou des produits de valeur. Aussi inefficaces soient-elles, c'est toujours plus efficace que de ne pas exister du tout. C'est pour ça que ce genre d'organisation continue d'exister même sans concurrence
On peut demander ce qu'il en est de la concurrence avec les petites organisations. Les petites structures ont moins d'efficacité d'échelle, mais si elles sont plus efficaces sur d'autres plans, elles peuvent parfois concurrencer efficacement les grandes entreprises. Mais si elles grandissent et deviennent de grandes organisations, elles finissent elles aussi par accumuler les inefficacités des grandes organisations
C'est juste comme ça que ça marche. Ce n'est pas que personne ne s'en soucie ; au contraire, les propriétaires de l'entreprise s'en soucient énormément. Le problème, c'est littéralement que personne ne sait comment le résoudre
Les grandes entreprises ont tendance à finir avec des modes d'échec similaires à ceux des entreprises d'État autoritaires. Il est d'ailleurs intéressant de voir à quel point la Chine a bien réussi à faire le grand écart entre contrôle et croissance sur ce point
Elles étranglent le marché tout en devenant elles-mêmes plus inefficaces
La concurrence est un conte qu'on raconte aux MBA pour les pousser à créer de nouvelles entreprises et donner l'impression qu'il existe une concurrence. En réalité, ils n'ont jamais eu leur chance
Si on pouvait éliminer tous les gaspillages par l'optimisation, on aurait sans doute eu au contraire de la déflation, pendant que les ordinateurs et les processus métier continuaient à gagner en efficacité
J’ai déjà trouvé un bug qui a permis de récupérer 4 millions de dollars de chiffre d’affaires annuel
Ça a été étouffé pour protéger l’équipe et les dirigeants qui avaient laissé cette erreur durer si longtemps. Je n’ai pas eu d’augmentation, mais je me suis fait quelques alliés et j’ai pu vivre tranquillement pendant un moment
Deux serveurs étaient liés à certaines données de flux, et j’ai remarqué que les câbles semblaient branchés bizarrement, contrairement à la description fonctionnelle qu’on m’avait donnée
Le coût estimé d’une indisponibilité de ce système était d’environ 7 millions de dollars par minute. J’ai signalé le problème à quelques personnes responsables et à l’équipe réseau, mais on m’a complètement ignoré, au motif que « nous n’aurions jamais pu le câbler comme ça » et parce que j’étais nouveau
Comme ça me semblait important, j’ai remis le sujet sur la table lors de la réunion hebdomadaire du groupe, et quelqu’un est allé vérifier en personne avant de revenir confirmer que c’était exactement comme je l’avais dit. C’était grave, et l’équipe réseau a dû faire environ deux semaines d’intervention d’urgence pour corriger proprement le problème
Tout le monde m’en a voulu. J’avais empêché une catastrophe pour l’entreprise, mais en faisant ça j’avais donné une mauvaise image de tout le monde, et surtout parce que j’étais très bas dans la hiérarchie de l’équipe. Une leçon importante
Le système que j’ai créé pour corriger un bug était en pratique une attaque de l’homme du milieu sur la transmission d’ordonnances aux pharmacies. Comme les pharmacies n’appliquaient jamais les mises à jour de prix, on recalculait le prix juste avant que l’ordonnance ne parte vers le système de l’assureur. Je travaillais dans une petite chaîne indépendante de pharmacies, sans système central de préparation
Avec le génie sans bornes de l’époque, j’ai donné au système le nom de la personne pour qui j’avais le béguin. Le siège a tellement aimé ça qu’il a créé un prix annuel portant le nom de mon système, ce qui en a fait au final un prix au nom de cette ancienne personne qui me plaisait, mais j’avais bien trop honte pour expliquer la véritable origine
Ça remonte à 25 ans, et chaque année depuis, on fabrique et on remet un trophée portant le nom de mon ancien béguin. Si cette personne l’apprenait, elle serait horrifiée
Ce genre de chose existe depuis toujours
Il y a longtemps, je suis entré dans une salle pleine de terminaux VT100, en fin de semestre un week-end, avec des étudiants en informatique qui s’ennuyaient en attendant la fin de leurs compilations. En regardant le système, j’ai vu que toutes les compilations avaient été envoyées dans une file batch dont la priorité par défaut était inférieure à celle des tâches interactives. Du coup, chaque frappe au clavier, où qu’elle soit, passait avant, si bien que plus les gens vérifiaient l’avancement de leur compilation, plus tout ralentissait
Pendant les 15 minutes suivantes, j’ai continué à augmenter la priorité du travail en tête de file, et une heure plus tard tout le monde avait fini et était rentré chez soi. La salle était à moi. Victoire de l’administrateur système autoproclamé ;-)
Il y a quelques mois, j’ai repéré un bucket S3 qui ne cessait de grossir et coûtait 80 000 dollars par mois, ce qui a fait économiser à l’entreprise 1 million de dollars par an
En regardant de plus près, un système qui n’était plus utilisé copiait encore des fichiers dans ce bucket. J’ai contacté les parties prenantes, et ils l’ont arrêté puis ont supprimé les fichiers
La direction n’avait pas l’air de s’en soucier plus que ça. Le n+2 de mon manager m’a dit de contacter l’autre équipe qui aurait dû détecter ça à l’origine, et l’histoire s’est arrêtée là
« Par exemple, nous avons exécuté 234 745 INSERT sur [table name deleted]_HOURLY, et tous portaient sur moins de 1000 lignes »
C’est une phrase réellement postée sur le Slack support Snowflake de notre organisation, et c’était quasiment le même problème. De petites transactions étalées dans le temps qui ne cessent de réveiller le cluster. Ce produit n’a pas été conçu pour un cas d’usage courant comme le chargement continu de petits volumes
Je suis un administrateur d’entrepôt de données avec de l’expérience réelle, et je regarde les gens redécouvrir point par point ma fiche de poste à mesure qu’ils se heurtent aux dépassements de coûts. Ils disent très sérieusement des choses comme « c’est autogéré, mais il faut surveiller les coûts et réécrire les chargements et les requêtes pour les rendre plus efficaces ». J’ai peur de demander ce qu’ils pensent que je fais de mes journées
Il y a très longtemps, dans une galaxie lointaine, j’ai remplacé un travail qui nécessitait N × (licence Oracle + serveur Sun) par un script Perl de moins de 100 lignes et un seul serveur Sun, économisant plus de 300 millions de dollars par an
Et au passage, j’ai aussi inventé MapReduce. Avant Google
Le problème consistait à calculer diverses statistiques à partir des logs de serveurs web. Par exemple, les 10 pages les plus populaires. La solution d’origine consistait à charger tous les logs, énormes, dans des bases Oracle réparties sur plusieurs serveurs, puis à exécuter plusieurs requêtes SQL et à recommencer tous les jours
L’impressionnante galerie de commentaires HN sous l’article de l’auteur est excellente : https://ludic.mataroa.blog/compliments/
Il est aussi très possible que beaucoup de gens dans l’organisation aient eu plusieurs longueurs d’avance sur l’auteur. Il est encore plus probable qu’un ingénieur ou un manager du même groupe gardait cette inefficacité en réserve pour l’utiliser au moment opportun dans un plan d’économies, et que l’auteur ait gâché cette opportunité. Dans ce cas, une fois qu’il n’y a plus rien à couper, de grandes souffrances et une mauvaise évaluation de performance peuvent devenir inévitables
Il est probablement inactif parce que le niveau du débat sur HN a baissé au point que presque tous les commentaires pourraient désormais entrer dans son périmètre
[1] https://twitter.com/shit_hn_says