Meu erro acabou economizando US$ 500 mil para a empresa
(ludic.mataroa.blog)- Um engenheiro reduziu a configuração de 10 minutos de ociosidade após consultas no Snowflake, fazendo o custo anual estimado do banco de dados cair de cerca de US$ 1 milhão para US$ 500 mil
- A Advanced Analytics Platform, atrasada por anos, mesmo após o lançamento dependia de uma cadeia de ETL complexa envolvendo planilhas, S3, Lambda, MongoDB, Snowflake e stored procedures em JavaScript
- O principal desperdício de custos vinha de uma arquitetura que processava menos de 1 TB de dados por dia, mas mantinha o compute ligado por muito tempo após consultas de 2 segundos em média
- A mudança foi aplicada primeiro a parte do compute; o gestor reconheceu a economia, mas tentou adiar a aplicação completa, enquanto no PowerPoint ela foi apresentada como uma otimização baseada em análise de padrões de uso
- Mesmo depois de cortar US$ 500 mil, a recompensa era incerta e só aumentaram as reuniões e a carga de relatórios, tornando-se um caso em que a ineficiência organizacional criou um custo político maior que a execução rápida de uma pessoa
Uma plataforma de analytics adiada por anos
- A empresa decidiu criar uma plataforma de analytics para trabalhar de forma mais orientada por dados e contratou pessoas para isso
- O engenheiro, contratado como cientista de dados, não conseguiu fazer trabalho real de ciência de dados, e pedidos de compute para machine learning ou pipelines de dados recebiam a resposta de que era preciso esperar a implantação da Advanced Analytics Platform, ou AAP
- Inicialmente, a AAP estava prevista para janeiro, mas foi adiada para março e depois suspensa por causa da Covid
- Três anos depois de ele sair da empresa, a AAP ficou pronta para lançamento, mas ficou claro que as funcionalidades de que realmente precisavam nem sequer estavam no plano original
- Na mesma semana, 4 engenheiros deixaram a empresa, e ele entrou para a equipe da AAP após apresentar suas condições
Dívida técnica revelada logo após o lançamento
- Embora tivesse sido lançada havia pouco tempo, a AAP já tinha muita dívida técnica e riscos operacionais
- Um colega recém-contratado encontrou, já no primeiro dia, um arquivo que poderia apagar a produção via pipeline de CI/CD caso alguém navegasse para a pasta errada no repositório do projeto
- Esse arquivo também continha as chaves e senhas necessárias para a conta de administrador
- Alterar permissões de acesso ao banco de dados era apenas fazer upload de um CSV de cerca de 2 KB, mas passava por um caminho exageradamente longo
- Uma planilha era analisada por Python
- O resultado era colocado no S3
- Uma Lambda o transformava novamente para S3
- O MongoDB buscava o arquivo no S3
- Outra Lambda enviava os registros do MongoDB para o S3
- O Snowpipe levava os dados do S3 para o Snowflake
- Uma stored procedure em JavaScript pivotava os dados do Snowflake para um formato relacional
- A equipe de segurança exigia um formato que pudesse ser facilmente escaneado em busca de conteúdo malicioso, então tudo era convertido para CSV, mas a ferramenta de varredura em si nunca foi implantada
- As funções Lambda começavam com
counter = 1, vestígio de uma implementação anterior, e essa linha continuou sendo copiada - Os testes de CI/CD ficaram em estado de falha por meses porque, durante a depuração, o uso do comando
teesobrescrevia o código de falha - A consulta de senhas de API também era enrolada em duas etapas
- Ao procurar uma chave como
service-passwordem um serviço da AWS, o valor retornado também eraservice-password - Esse valor era então usado para encontrar a senha real em outro serviço
- Ao procurar uma chave como
- O script que gerava arquivos de configuração do pipeline começava com 600 linhas comentadas sob a justificativa de que poderiam ser necessárias mais tarde
A configuração do Snowflake que causou o estouro de custos
- A plataforma era várias vezes mais cara que o modelo operacional anterior e estourou bastante o orçamento de custos de banco de dados
- O custo operacional anual originalmente parecia ter sido pensado em torno de US$ 200 mil, mas o custo real estimado chegou a quase US$ 1 milhão
- O banco de dados era o Snowflake, e o Snowflake cobra de acordo com o tamanho dos computadores que executam as consultas
- O compute só gera custo enquanto está ligado
- A equipe executava alguns milhares de consultas por semana, e a maioria eram consultas experimentais de desenvolvedores ajustando aos poucos relatórios do PowerBI que quase ninguém lia
- O tempo médio de execução das consultas era de cerca de 2 segundos, mas o compute estava configurado para permanecer ocioso por 10 minutos após cada consulta
- Cerca de um mês depois de entrar, ele encontrou essa configuração e sugeriu ajustá-la, mas a discussão ficou apenas em procedimentos sobre a necessidade de uma etapa de discovery, sem execução
Uma mudança de 5 minutos e a validação
- Meses depois, ao receber um cartão “Discovery: Optimise Costs”, ele precisava de algo para dizer no próximo stand-up e decidiu verificar diretamente a hipótese antiga
- Pediu permissão para conceder privilégios de administrador a um novo engenheiro de outra equipe que parecia competente, mas o gestor não permitiu
- Em vez disso, compartilhou credenciais de banco de dados de nível mais baixo, sem privilégios de administrador, e esse engenheiro fez uma validação de bom senso da possibilidade de redução de custos
- Às 16h do último dia da semana, ele confirmou em um chat de engenheiros sem gestores se não havia problema e então alterou a configuração
- Por segurança, aplicou primeiro não a todo o compute, mas apenas a parte do compute
A economia e a reação da organização
- Na segunda-feira seguinte, a fatura estimada caiu de cerca de US$ 1 milhão para US$ 500 mil
- A equipe apresentou isso como uma grande conquista de redução de custos, mas, do ponto de vista dele, foi mais como simplesmente interromper dinheiro que já estava sendo desperdiçado
- Outras equipes questionaram o fato de o engenheiro recém-chegado ter entrado no mesmo período dessa economia e perguntaram por que essa redução não havia sido percebida antes
- O gestor ficou satisfeito, mas considerou que aplicar a mudança imediatamente a todo o compute poderia atrair atenção excessiva para o departamento e gerar perguntas indesejadas
- Havia a insinuação de aplicar a mudança lentamente para que parecesse um trabalho demorado
- Ele precisou preparar um PowerPoint, e o texto foi formulado em algo como “uma análise estatística cuidadosa dos padrões de uso revelou oportunidades para uma alocação mais eficaz de recursos”
- A mudança real foi apenas um ajuste de configuração para impedir que compute caro ficasse ocioso o dia inteiro
O peso que restou depois do resultado
- Ele viu que, ao encontrar informalmente alguns bons engenheiros e agir, conseguiu produzir um resultado maior com mais facilidade que o departamento inteiro
- Concluiu que pessoas competentes existem dentro da organização, mas não conseguem ter impacto por causa da estrutura organizacional
- Depois de economizar US$ 500 mil, pediu um aumento de US$ 30 mil, mas a mensagem foi lida e ignorada; ele esperava não receber nada ou talvez algo em torno de US$ 5 mil
- As reuniões para falar sobre a redução de custos aumentaram, e também surgiu a carga de preparar PowerPoints
- Ele concluiu dizendo que teria sido melhor para si não fazer nada: em 5 minutos de ação, produziu o maior resultado de sua carreira, mas imediatamente assumiu encargos adicionais
1 comentários
Comentários do Hacker News
Me identifiquei demais com o texto inteiro
Na Marinha dos EUA, meu histórico de carreira registrava mais de 50 milhões de dólares em economia de custos. Toda vez que eu fazia alguma coisa, precisava montar um PowerPoint e apresentar para os generais, e uma vez quase fui seriamente punido porque não deixei meu chefe levar o crédito. Na verdade, ele nem fazia ideia do que eu tinha feito, então nem estava tentando levar o crédito, mas mesmo assim foi assim
Parte disso foi na época em que eu fazia projetos em toda a organização como Lean Six-Sigma Black Belt, e detesto essa expressão inteira. Literalmente, meu trabalho era reduzir ao máximo os custos do DOD, e foi a pior fase da minha carreira. A recompensa por ter resolvido por conta própria um problema que economizou milhões de dólares foi aquele trabalho
Concordo com a parte final do texto. É preciso tomar cuidado ao fazer um bom trabalho no emprego. A recompensa quase nunca é dinheiro, e sim mais trabalho pelo mesmo salário
Já estive em lugares bem melhores, e quando eu tomava a iniciativa e economizava milhões de dólares, eu era realmente parabenizado e meu chefe reconhecia o mérito
Nunca se deve ficar em um trabalho com uma cultura tóxica. Mesmo que o dinheiro seja melhor. Não há nada que corroa mais a alma do que ser esmagado por carreiristas incompetentes e mesquinhos e por controladores
A ideia central era: “o lado bom do governo dos EUA é que ele é tão grande que, se a solução ótima reduz 30% e a segunda melhor reduz só 29%, ainda assim você economiza de dezenas a centenas de milhões de dólares, então ninguém percebe”
Um dos grandes projetos era a eficiência energética de acampamentos militares remotos. Entregar combustível a certas regiões do Afeganistão saía por cerca de 100 dólares por galão, e havia um monte de geradores móveis funcionando a 20%~40% da capacidade. Se bem me lembro, algo em torno de 70% era o mais eficiente, então dava para reduzir muito o consumo de combustível e ainda melhorar a qualidade do serviço construindo prédios menores ou ligando várias tendas a um único gerador
Já trabalhei como engenheiro em uma FAANG em coisas diretamente ligadas ao fluxo de dinheiro, e também tenho experiência em várias áreas que poderia ajudar
Aí acabo desistindo ao pensar que encontrar as pessoas certas e a área certa para atuar provavelmente seria 95% do trabalho
Mas, pelo que ouvi sobre o processo, isso acelerava bastante as promoções
Eu quero um emprego assalariado estável, mas sei que, se eu for bom no que faço, os gerentes vão interpretar isso como folga e continuar empurrando mais trabalho até o limite. Gente gananciosa nunca concorda com divisão de receita ou participação nos lucros; a postura é mais tipo “vamos te dar 5% de aumento por ano, então cala a boca e trabalha”
Alguns empregos atrás, pediram que eu escrevesse o nome dos projetos que eu estava mantendo ativamente na empresa, e a lista ocupou duas telas inteiras no Excel com fonte padrão. Fiquei tão sobrecarregado que cheguei a um burnout com depressão severa
O pior é que também odeio toda aquela palhaçada de procura de emprego que parece um ritual de submissão
Isso me lembrou os textos do Dan Luu: https://danluu.com/nothing-works/
Ferramentas de software para chips eram parecidas. O padrão era terceirizar as ferramentas para grandes fornecedores de EDA, mas tivemos ótimos resultados com ferramentas sob medida feitas por nós, normalmente criadas ou mantidas por uma única pessoa
Enquanto eu estava lá, a maior parte dos ciclos de simulador rodava em um simulador customizado mantido por uma pessoa, e isso economizava milhões de dólares por ano em custos de simulador. Na época, o preço padrão era de alguns milhares de dólares por ano por licença de simulador, e o parque de máquinas de simulação tinha cerca de mil máquinas
Se uma única pessoa consegue criar ou manter uma ferramenta que vale milhões de dólares por ano para a empresa, parece óbvio que os concorrentes fariam o mesmo, mas na prática a maioria não fazia. É igual ao fato de os concorrentes não contratarem gente capaz de abrir um wafer e examiná-lo, mesmo que isso permitisse lançar produtos mais rápido e mais barato
Dan Luu fala da “versão de coquetel” da hipótese do mercado eficiente, mas a versão econômica de “nada funciona” está mais próxima de https://en.wikipedia.org/wiki/The_Market_for_Lemons. É um texto sobre o papel da informação e da assimetria de informação no mercado
A hipótese do mercado eficiente falha porque conhecimento perfeito é impossível e a seleção adversa realmente existe
Também existem empresas que são o completo oposto do que o texto original descreve. Depois que você trabalha em uma dessas, fica impossível voltar a se acomodar em um lugar ruim
O texto todo é ouro
Os gerentes perguntaram como ele conseguiu economizar tanto sem a ajuda deles, pediram para preparar slides, perguntaram várias vezes o que tinha acontecido, disseram que precisava fazer a implantação aos poucos para parecer que não foi algo resolvido com um simples toggle, mas sim um processo gradual ao longo do tempo, e embora ele tenha pedido aumento proporcional ao impacto, não conseguiu
Pelo próprio bem, seria melhor se candidatar a algum lugar tipo FAANG. No mínimo, a chance de ser mais valorizado é maior
E se colocasse metadados de Twitter Card no blog, provavelmente ficaria melhor no Twitter
“Olá, vou explicar como foi possível economizar 500 mil dólares. Basicamente, passei um dia olhando o quão desastrosamente a infraestrutura original foi implantada e removi o recurso de teste de código que estava causando o problema. Foi uma completa oversight em desenvolvimento, gestão, testes, em tudo. No geral, esse código era quase o pior possível e mesmo assim foi para produção. E me disseram para não falar isso porque faria todo mundo parecer mal, e que eu deveria implantar gradualmente para parecer que os gerentes também fizeram alguma coisa”
Aí eu largaria o microfone e sairia do palco
Sinceramente, eu teria perdido quase toda a vontade de me importar. E olha que digo isso como alguém que faz esse trabalho há quase 20 anos, precisa pagar as contas e colocar comida na mesa dos filhos
Montei e documentei uma planilha do modelo de custos e entreguei ao chefe, que disse “vou analisar”. Duas semanas depois, perguntei se ele tinha visto e ele respondeu “parece certo. Bom trabalho”. Perguntei se iam testar na prática, e a resposta foi memorável
“Não, nós não somos pagos para economizar dinheiro, somos pagos para gastar dinheiro”
Foi aí que eu realmente entendi os contratos governamentais de Cost+Award Fee
A desvantagem é que provavelmente você precisa escrever esse documento antes de fazer a mudança, passar por revisão do time inteiro e buscar “alinhamento”
Ele não economizou 500 mil dólares por acaso; ele economizou 500 mil dólares de propósito e agora se arrepende. Não é a mesma coisa
Grandes organizações são tão ineficientes que chega a ser surpreendente como conseguem competir, mas elas têm muito dinheiro, economia de escala e essas coisas. No processo, queimam milhões de dólares com desperdício burro e ineficiência, e quase ninguém liga muito
Ainda assim, elas fornecem serviços ou produtos valiosos. Por mais ineficientes que sejam, ainda são mais eficientes do que não existir. É por isso que essas organizações continuam existindo mesmo sem concorrência
Dá para perguntar sobre a competição com organizações pequenas. Organizações pequenas têm menos eficiência de escala, mas, se forem eficientes em outros aspectos, às vezes conseguem competir de forma eficaz com grandes empresas. Só que, quando crescem e viram grandes organizações, acabam adquirindo as ineficiências de grandes organizações
É simplesmente assim que as coisas funcionam. Não é que ninguém se importe; pelo contrário, os donos das empresas se importam muito. O problema é que, literalmente, ninguém sabe como resolver isso
Grandes empresas tendem a terminar com padrões de fracasso parecidos com os de empresas estatais autoritárias. Também é interessante como a China tem conseguido equilibrar controle e crescimento nessa área
Estrangulam o mercado e ao mesmo tempo ficam mais ineficientes
Concorrência é um conto de fadas que MBAs contam para convencer gente a abrir novos negócios e fazer parecer que existe competição. Essas pessoas nunca tiveram chance desde o começo
Se todo desperdício pudesse ser eliminado por otimização, acho que teríamos deflação, já que computadores e processos de negócios continuam ficando mais eficientes
Uma vez encontrei um bug que recuperou US$ 4 milhões em receita anual
Isso foi abafado para proteger a equipe e os executivos que deixaram aquele erro continuar por tanto tempo. Não ganhei aumento, mas fiz alguns aliados e pude ficar de boa por um tempo
Dois servidores estavam ligados a alguns dados de feed, e percebi que os cabos estavam conectados de um jeito estranho, diferente da descrição funcional que eu tinha ouvido
O custo estimado de indisponibilidade desse sistema era de cerca de US$ 7 milhões por minuto. Levei o problema a alguns responsáveis e à equipe de rede, mas fui totalmente ignorado com o argumento de que “não teríamos conectado desse jeito” e por eu ser novato
Como parecia importante, voltei a levantar a questão na reunião semanal do grupo, e alguém foi verificar pessoalmente e voltou dizendo que era exatamente como eu tinha falado. Era sério, e a equipe de rede teve que fazer cerca de 2 semanas de trabalho emergencial para resolver o problema direitinho
Todo mundo ficou bravo comigo. Eu tinha evitado um desastre para a empresa, mas ao fazer isso fiz todo mundo parecer mal, e especialmente porque eu tinha baixa posição dentro da equipe. Foi uma lição importante
O sistema que criei para corrigir um bug era, na prática, um ataque man-in-the-middle na transmissão de prescrições para farmácias. Como as farmácias nunca aplicavam as atualizações de preço, eu recalculava o preço logo antes de a prescrição ir para o sistema da seguradora. Eu trabalhava em uma pequena rede independente de farmácias e não havia um sistema central de dispensação
Com a genialidade infinita da época, dei ao sistema o nome da pessoa por quem eu estava apaixonado. A sede gostou tanto que criou um prêmio anual com o nome do meu sistema e, no fim das contas, virou um prêmio com o nome daquela paixão, mas eu tinha vergonha demais para contar a origem real
Isso foi há 25 anos, e até hoje todo ano um troféu com o nome da minha antiga paixão é produzido e entregue. Acho que a pessoa ficaria horrorizada se soubesse
Essas coisas existem desde sempre
Há muito tempo entrei numa sala cheia de terminais VT100, num fim de semana de fim de semestre, e estudantes de CS entediados estavam esperando suas compilações terminarem. Olhei o sistema e vi que todas as compilações tinham sido colocadas na fila de batch, cuja prioridade padrão era menor que a de tarefas interativas. Então qualquer tecla pressionada em qualquer lugar ganhava prioridade mais alta, e quanto mais as pessoas verificavam a posição dos próprios jobs de compilação, mais devagar tudo ficava
Nos 15 minutos seguintes, fui aumentando continuamente a prioridade do job no topo da fila e, uma hora depois, todo mundo tinha terminado e ido para casa. A sala ficou para mim. Vitória do administrador de sistemas não autorizado ;-)
Há alguns meses encontrei um bucket S3 que só crescia e estava consumindo US$ 80 mil por mês, e economizei US$ 1 milhão por ano para a empresa
Fui investigar e descobri que um sistema que não era mais usado estava copiando arquivos para esse bucket. Entrei em contato com as partes interessadas, e elas desligaram isso e apagaram os arquivos
A liderança não pareceu se importar muito. O chefe do meu chefe pediu que eu tentasse falar com outra equipe que deveria ter detectado isso, e ficou por isso mesmo
“Por exemplo, executamos 234.745 INSERTs em [table name deleted]_HOURLY, e todos tinham menos de 1000 linhas”
Isso foi literalmente postado no Slack de suporte do Snowflake da nossa organização, e era quase o mesmo problema. Pequenas transações espalhadas ao longo do tempo continuam acordando o cluster. Este produto não foi feito para casos de uso comuns como carga contínua em pequenos volumes
Eu sou um administrador de data warehouse com experiência real, então fico vendo as pessoas redescobrirem a minha descrição de cargo à medida que vão estourando custos uma por uma. Elas dizem seriamente coisas como “é autogerenciado, mas precisamos monitorar os custos e reescrever cargas e consultas para serem mais eficientes”. Tenho medo de perguntar o que elas acham que eu faço o dia inteiro
Há muito tempo, em uma galáxia muito, muito distante, substituí algo que exigia N × (licença Oracle + servidor Sun) por um script Perl com menos de 100 linhas e um único servidor Sun, economizando mais de US$ 300 milhões por ano
No processo, também inventei o MapReduce. Antes do Google
O problema era calcular várias estatísticas a partir dos logs do servidor web. Por exemplo, as 10 páginas mais populares. A solução original era carregar tudo em bancos de dados Oracle executados em vários servidores, já que os logs eram enormes, depois rodar várias consultas SQL e repetir isso diariamente
A impressionante galeria de comentários do HN no post do autor é ótima: https://ludic.mataroa.blog/compliments/
Também é bem possível que muitas pessoas na organização estivessem muito mais adiantadas do que o autor. É ainda mais provável que algum engenheiro ou gerente do mesmo grupo estivesse guardando essa ineficiência para usar na época de cortar custos, e o autor tenha estragado essa oportunidade. Aí, quando não houver mais o que cortar, pode haver dor enorme e uma avaliação de desempenho ruim inevitavelmente
Acho que ela está inativa porque o nível do discurso no HN caiu tanto que agora quase todo comentário seria elegível
[1] https://twitter.com/shit_hn_says