O Impacto Invisível dos Algoritmos: Uma História de Otimização e Produtividade
Recentemente, me foi atribuída uma tarefa para melhorar o tempo de carregamento de uma aba em um projeto. A aba listava informações sobre produtos que o cliente havia adquirido. Era só uma seção em que fazia uma requisição para o servidor e “renderizava” na tela os dados retornados.
Os usuários desse sistema sempre reclamaram dessa seção, pois “atrasava” todo o fluxo de trabalho deles, visto que, como precisavam acessar essa seção várias vezes ao dia isso acabava impactando a produtividade deles tendo que esperar toda vez a aba carregar.
O tempo de carregamento da aba variava de aproximadamente 1 minuto para casos em que se tinha poucos itens e de 2 a 3 minutos para situações onde se tinha muitos itens. Por exemplo, ao tentar listar 2 linhas de produtos já adquiridos em uma das amostras que testei, o tempo de carregamento chegava a aproximadamente 1 minuto para carregar por completo.
Talvez você pense: “1 minuto nem demora tanto assim”. Mas para quem está no dia a dia, ter que esperar 1 minuto para cada cadastro que acessar pode ser um pouco desanimador. Um usuário que precise entrar em pelo menos 30 cadastros ao longo do dia, vai perder pelo menos 30 minutos do seu tempo esperando o sistema carregar. O que acaba impactando diretamente na produtividade. Sem contar que esse tempo não volta. Ao longo de uma semana ou mês você perdeu horas de vida, só por conta de ter que esperar o tempo de carregamento.
Ao olhar mais de perto, basicamente, o ofensor era uma View no banco de dados que continha diversos “joins“. Após me dedicar um período lendo diretamente a consulta, para entender os relacionamentos, e me passar um tempo pesquisando sobre como otimizar queries SQL, tive um insight e comecei a refazer toda a consulta.
Não demorou muito e o resultado foi bem bacana. O tempo de carregamento diminuiu mais da metade, passando de minutos para segundos. No caso da amostra em que tinha testado, foi de 1 minutos para 20 segundos. Recebi alguns feedbacks positivos sobre o resultado e com certeza economizei o tempo de vida de muitos usuários.
Resumidamente, o que mudou de uma consulta para outra?
Apenas uma ideia. Uma nova forma de implementar considerando outros tipos de recursos.
Isso me fez pensar sobre como um algoritmo pode ser um fator importante para influenciar a produtividade de uma empresa. Não pensamos com frequência, mas um algoritmo pode ser considerado uma tecnologia. Não por se tratar de algo derivado de uma linguagem de programação ou por estar ligado a computadores, mas por ter o potencial de agregar imenso valor em toda uma companhia, por ter a possibilidade de dar uma vantagem competitiva.
Imagina no caso de uma empresa de logística. Conseguir calcular a melhor rota para as entregas de mercadorias pode significar o sucesso ou o fracasso do negócio. Quanto melhor o algoritmo, menor será o custo de entrega e tempo.
Como programadores, estamos a todo momento escrevendo código e pensando em algoritmos. Precisamos ter em mente que apesar de nem sempre produzimos o melhor possível, o que produzimos pode impactar uma cadeia de pessoas. Por exemplo, um algoritmo ruim pode consumir mais recursos do servidor em que está alocado, o que pode elevar os custos para empresa, o que pode impactar negativamente nos resultados contábeis, o que poderia levar a uma demissão para enxugar os custos.
Talvez você enxergue como exagero essa última parte, mas espero que entenda o meu ponto. Ao escrever código não criamos apenas a possibilidade de impactar nossos usuários, mas criamos a possibilidade de impactar todo o futuro de uma empresa.