Cloud é caro ou o seu software é ruim?

4 de outubro de 2024 Por Ramon Durães

Nos últimos anos, as plataformas de cloud se tornaram fundamentais para a transformação digital, oferecendo flexibilidade, inovação e serviços gerenciados que simplificam operações. Elas permitem o uso de recursos sob demanda, possibilitando que startups, pequenas, médias e grandes empresas acessem as mesmas tecnologias, promovendo uma competição mais equilibrada. O resultado tem sido operações de TI mais enxutas e um maior foco na entrega de valor ao negócio.

Lembro-me de quando provisionar um novo ambiente levava meses. O processo envolvia a área de compras, desligamento de servidores para atualizações e um planejamento prévio para suportar picos de acesso, como em vendas de ingressos ou e-commerce. As empresas precisavam estimar a demanda, adquirindo ou alugando máquinas para cobri-la, o que nem sempre era eficiente.

A modernização se acelerou recentemente, impulsionada pela demanda por serviços digitais mais ágeis. As empresas foram forçadas a atualizar seus sistemas e desenvolver novos produtos. No entanto, muitos sistemas legados — ou até mesmo novos — não foram projetados para a realidade cloud native, que exige sistemas distribuídos, altamente escaláveis e disponíveis. Embora a cloud ofereça segurança e flexibilidade, o custo de operação depende da adequação dessas aplicações ao ambiente.

Estudos de mercado indicam que o TCO (Total Cost of Ownership) de operar um datacenter é mais alto do que soluções em cloud a longo prazo, principalmente ao considerar manutenção de hardware, contratação de especialistas e suporte 24/7.

No entanto, algumas empresas estão retornando a datacenters próprios ou sublocados para tentar reduzir custos. Essa decisão, por vezes, reflete uma visão de economia a curto prazo, sendo mais marketing do que estratégia real.

A reflexão que proponho é: será que o problema está no modelo de negócios da empresa ou o software utiliza implementações inadequadas, tornando inviável rodar na cloud? Muitas empresas evitam reconhecer esse problema, algo que observo frequentemente em auditorias de projetos. Após 20 anos auditando empresas de todos os tamanhos, incluindo algumas que faturam mais de 1 bilhão, posso afirmar que o maior desafio é admitir a falha ou o “reconhecimento da dor”.

As plataformas de cloud computing, muitas vezes, foram mal utilizadas ao longo dos anos como um refúgio para software malfeito, sem investimentos em otimização de performance, escalabilidade, disponibilidade e cache, na esperança de que um datacenter moderno e altamente escalável mitigasse os problemas existentes. Em alguns cenários, isso pode funcionar; porém, o custo de manter tende a ser elevado.

Discutir uma estratégia moderna de software é essencial e passa pela colaboração com profissionais experientes: arquitetos de solução, arquitetos de software, arquitetos de cloud, especialistas em segurança e DevOps. A complexidade de uma plataforma digital exige especialistas nessas áreas para garantir que a solução seja eficiente tanto para o negócio quanto para a operação em cloud.

É crucial que as empresas adotem uma cultura que compreenda “o custo de servir o cliente”. Cada implementação afeta os custos da cloud, e essa ineficiência geralmente está relacionada à má otimização de software, gestão de recursos, práticas deficientes de arquitetura de cloud e falta de governança.

Em quantos projetos de software a arquitetura foi realmente discutida como base do projeto? Quantas vezes foi realizada uma análise de performance local, ainda no ambiente do desenvolvedor, acompanhando o uso de CPU, memória e caminhos mais críticos? Analisou-se procedimentos de código equivocados que provocam esse tipo de problema? Após a entrega do sprint, quais testes de carga foram feitos? Como foi o monitoramento da performance após essa entrega? Já pararam para refletir que uma linha de código pode parar uma empresa e trazer um prejuízo milionário?

A ausência de uma gestão forte resulta em custos inesperados e leva à “fuga para o datacenter”, uma solução temporária que não resolve o problema de um software mal projetado. Eu vejo a propaganda do “retorno ao datacenter” como uma abordagem de sobrevivência, ao custo de abandonar a flexibilidade, escalabilidade e inovação que a cloud oferece. O datacenter traz de volta problemas operacionais superados há mais de uma década, como infraestrutura física, depreciação e manutenção, criando barreiras para a inovação.

A dura realidade é que legados modernos surgem todos os dias. Isso me lembra de uma experiência de consultoria em uma grande empresa de software que estava desenvolvendo um novo ERP no modelo Software as a Service (SaaS). Realizei uma análise de aplicação e identifiquei um problema sério: uma aplicação trazia um enorme volume de dados do banco de dados sem necessidade. Na época, programadores argumentaram que memória e CPU eram baratos e “infinitos”. Após uma segunda conversa, demonstrei o impacto do tráfego de dados e do processamento excessivo.

Esses programadores, embora habilidosos, não estavam preparados para aplicações SaaS com alta volumetria e usuários simultâneos. Era uma época de escassez computacional, e mesmo assim havia dificuldade em entender a importância do desenvolvimento eficiente de software.

No cenário atual de cloud, o problema se agravou. Na cabeça de muitos, basta escalar a cloud para resolver qualquer problema de performance. No entanto, a ineficiência computacional persiste, agora ampliada pelo uso inadequado da cloud.

Ao ajudar um grande serviço de ingressos, identificamos um gargalo enorme na verificação de uma regra de negócio de clientes. Mesmo escalando o serviço em várias réplicas, o software travava na operação com o banco de dados. Nesse contexto, atuamos de forma cirúrgica, removendo o fator bloqueante e incorporando uma nova estratégia compatível com a alta demanda de acessos simultâneos. Essa pequena mudança permitiu atender mais clientes com mais agilidade e reduziu drasticamente o custo computacional.

Em outro projeto de e-commerce de grande porte, não foi diferente. Scripts no front-end geravam processos inúteis no backend, como uma espécie de “auto” distributed denial-of-service (DDoS), e, pelo volume, a situação estava crítica. Depois de desativar esse item, aloquei uma equipe para atuar em outros itens no front-end que estavam gerando alto tráfego de dados e retardando o tempo de processamento. Se vocês não sabem, a performance reflete diretamente na conversão. Após isso, iniciamos a refatoração de processos mais críticos no backend, que exigiam escalar uma aplicação monolítica gigantesca para processar a demanda do carrinho de compras ou um simples cálculo de cep.

O conhecimento acumulado em erros e acertos de desenvolvimento não é transferido automaticamente para novos desenvolvedores. Muitos, após um bootcamp de seis meses, acreditam estar prontos para projetos complexos de microsserviços e sistemas distribuídos, sem ter atuado em projetos diversificados e de alta demanda computacional.

Atualmente, temos um universo de aplicações migradas para a cloud no estilo “Shift Left”, movendo o legado para a nuvem e, depois, modernizando-o com tecnologias modernas. No entanto, é comum continuarem cometendo os mesmos erros. A ineficiência computacional deveria ser tratada desde o início, com um projeto eficiente de arquitetura de software, onde decisões são tomadas por desenvolvedores com experiência em cenários complexos e alta volumetria transacional.

Costumo dizer aos clientes que o custo de manutenção e operação é maior do que o de desenvolvimento. Muitas vezes, as pessoas reagem com desconfiança, mas após uma conversa mais aprofundada, reconhecem os problemas de manter o “monólito distribuído” online, percebidos mais claramente nas faturas de cloud.

Um fator muito relevante na cloud, que deve ser priorizado em qualquer projeto moderno de software, é adotar uma estratégia Cloud Native. O uso de recursos como Docker, Kubernetes e serviços gerenciados (AKS, EKS, GKE), associado a práticas de automação de processos de DevOps e Infrastructure as Code (IaC), melhora a eficiência operacional e habilita a portabilidade da infraestrutura.

Ao estruturar uma abordagem cloud native, é fundamental adotar arquiteturas modernas, como a event-driven architecture, explorando o potencial de aplicações distribuídas e comunicação assíncrona. O correto desacoplamento permite utilizar estratégias como Kubernetes Event-driven Autoscaling (KEDA), que ajusta a escalabilidade dos serviços com base no comportamento do negócio.

O crescimento do consumo de cloud levou ao aperfeiçoamento de novas disciplinas, como a FinOps, permitindo uma colaboração entre finanças, desenvolvimento e operações para otimizar custos e melhorar a governança financeira. Isso historicamente tem trazido bons resultados na diminuição do consumo de cloud.

As empresas comprometidas com boas práticas na redução da pegada de carbono e do impacto ambiental se beneficiam do uso de clouds em comparação com datacenters privados. Esse tema também se estende à disciplina Green Software, que promove a eficiência na arquitetura do software e o uso otimizado da cloud, seguindo os princípios essenciais de “software bem feito”.

As ferramentas para gestão e monitoramento de cloud amadureceram muito, principalmente com o uso de inteligência artificial. Elas permitem otimizar ainda mais os custos de autoscaling, armazenamento e monitoramento granular de recursos, além de habilitar o uso de workloads mais baratos.

Adotar uma abordagem cloud native, com práticas modernas como sistemas distribuídos, desacoplamento, arquitetura orientada a eventos, decomposição de responsabilidades e alta performance, além de tecnologias como contenização e automação com DevOps, é essencial para explorar a flexibilidade e inovação da cloud. Isso evita que o retorno a datacenters se torne uma solução paliativa e ineficaz.

Diversos fatores, além dos tecnológicos, podem levar uma empresa a optar por uma infraestrutura local, e essas decisões são compreensíveis em determinados contextos. Contudo, o verdadeiro custo da cloud está diretamente ligado à eficiência do software.

Por fim, é fundamental que os líderes de tecnologia e operações assegurem que as decisões sobre a arquitetura do software e os ambientes de execução sejam tomadas por profissionais experientes e responsáveis pela continuidade. Lembre-se: a cloud não é cara; o que realmente encarece são os softwares mal feitos, sem uma estratégia de cloud adequada à realidade do negócio.

Faz sentido? Compartilhe e colabore com comentários. Precisa de ajuda especializada em estratégia de software para apoiar a modernização do seu software? Entre em contato.

Até a próxima !!!

Ramon Durães

VP Engineering