O marketing dos benchmarks
Publicado em: sexta-feira, 28 de mar de 2025
Categorias: .NET | Arquitetura

Já faz algum tempo que os benchmarks deixaram de ser apenas uma ferramenta técnica e passaram a ocupar espaço central no marketing de produtos e tecnologias. De linguagens de programação a frameworks web, de modelos de LLM a placas de vídeo, benchmarks são utilizados como argumentos de venda — e com razão: números impressionam.

Mas como todo dado isolado, os benchmarks contam apenas parte da história. Os números são reais, mas o contexto em que esses números são obtidos está longe da realidade da maioria dos sistemas em produção. E é justamente aí que mora o problema.

Quando o assunto é desenvolvimento, em muitos desses testes, o cenário se resume a algo extremamente simplificado: processar uma string, retornar um JSON estático, ou calcular algo em memória — tudo isso sem envolver banco de dados, sem serialização real, sem cache, sem autenticação, sem concorrência real.

Esses benchmarks não refletem o mundo real.

O que acontece no mundo real?

No mundo real, um request HTTP passa por diversas camadas:

  • Autenticação e autorização (muitas vezes com JWTs, que exigem criptografia)
  • Desserialização do payload recebido
  • Regras de negócio, que frequentemente acessam banco de dados ou serviços externos
  • Escrita em cache ou leitura de cache (Redis, por exemplo)
  • Log, tracing, métricas e demais elementos de observabilidade
  • Processamento concorrente, locks e contenção

Tudo isso consome tempo — e não são microssegundos. Estamos falando de milissegundos, muitas vezes dezenas deles. Um simples acesso ao banco pode levar 5, 10, 20ms. Um serviço externo pode adicionar 100ms ou mais de latência.

Decidir adoção ou migração de uma tecnologia baseando-se em menchmarks sintéticos é como escolher um carro pela velocidade de abertura da porta do carona.

Os percentuais escondem os valores reais…

Se um framework A responde uma requisição simples em 400 microssegundos e o framework B em 800 microssegundos, isso pode parecer uma diferença substancial, afinal um é 100% mais lento que o outro, ou talvez você prefira pensar que um deles é 2 vezes mais rápido, certo?

Mas se a requisição real do seu sistema leva 120ms para ser processada por conta de chamadas externas, então a diferença entre A e B representa menos de 0,5% do tempo total. Ou seja, menos da metade de 1%.

Em uma relação desse tipo temos:

Uma substituição, em nome do desempenho, pode parecer justificável ao olhar desatento, mas seria como otimizar o tempo de abrir a porta do carro para ganhar desempenho em uma corrida de 10 horas. Sim, pode fazer diferença em cenários extremos e altamente otimizados. Mas para 99.9% dos sistemas em produção, isso é irrelevante.

Aqui nos deparamos com o dilema da relevância de tal mudança. Um ganho tão pequeno não justifica, de forma consistente, decisão alguma na maioria absoluta dos casos. Estamos diante de um ganho irrisório, marginal, ínfimo.

Então por isso não devemos mudar?

Você pode encontrar diversos outros argumentos válidos, faça o exercício de buscá-los. É possível e provável que encontre argumentos mais atraentes e que justifiquem uma mudança.

Respondendo à pergunta original, “Então por isso não devemos mudar?”, onde “isso” é um ganho de desempenho de menos de 0.5%, a resposta é simples: Não há plausibilidade em realizar mudanças quando o ganho é tão marginal.

O que realmente importa?

Sob a ótica de uma empresa com fins lucrativos, o que importa é o lucro.

E isso pode ser obtido otimizando e maximizando o consumo de recursos com mais eficiência, mas também com a redução de custo. Ou trazendo mais receita, algo que contribua na margem final.

Portanto:

  • Latência total da requisição
    • Aumento da eficiência.
    • Aumento da percepção do seu usuário.
    • Redução de custos.
  • Capacidade de escalar horizontalmente
    • Aumento da eficiência
    • Capacidade de atender mais clientes com custo otimizado para a demanda.
  • Facilidade de observabilidade
    • Menor tempo até a descoberta de bugs
    • Menor tempo reprodução e de resolução de bugs.
    • Melhoria na percepção do usuário final
    • Permite ser proativo na correção de bugs
  • Custo de manutenção
    • Redução de tempo para entregar novas features
    • Redução de tempo para corrigir bugs
    • Redução dos skills de contratação
  • Confiabilidade e estabilidade
    • Redução do esforço de operações para suportar a aplicação.
    • Redução das interrupções nos times de desenvolvimento para correção de bugs.
    • Redução da frustração do cliente.
    • Aumento da percepção de qualidade pelo cliente.

Quando falamos de benefícios técnicos, precisamos ter em mente que queremos:

  • Mais clientes.
  • Por mais tempo.
  • Pagando mais durante toda a vida dele no seu software.
  • Gastando menos para produzir e manter o software e infraestrutura.

E muitas vezes, para que esses objetivos sejam alcançados, empresas fazem um zilhão de coisas para criar um ambiente legal para os devs, para contratar, para reter talentos e também seus clientes.

Entenda a regra do jogo, para entender quais são os melhores argumentos.

Conclusão

Benchmarks sintéticos servem para comparar aspectos específicos, mas não devem guiar decisões arquiteturais sem contexto.

No mundo real, a performance relevante é medida de ponta a ponta, em cenários reais, sob carga real.

Antes de trocar de framework por uma diferença de microssegundos ou nanosegundos, pergunte-se: qual será o ganho real? E o que vai realmente mover o ponteiro da performance no meu sistema?

Será que não há outros argumentos mais interessantes que foram ignorados?

No fim das contas, escolher um framework apenas por benchmarks é como escolher um carro olhando apenas o velocímetro, ignorando conforto, segurança, consumo e confiabilidade.

A performance importa, mas no contexto certo.

O Cloud Native .NET é meu principal projeto.

Onde empenho energia para ajudar, acompanhar, direcionar Desenvolvedores, Líderes Técnicos e jovens Arquitetos na jornada Cloud Native.

Conduzo entregando a maior e mais completa stack de tecnologias do mercado.

Ao trabalhar com desenvolvedores experientes, eu consigo usar seu aprendizado com .NET, banco de dados, e arquitetura para encurtar a jornada.

Ao restringir à desenvolvedores .NET eu consigo usar do contexto de tecnologias e problemas do seu dia-a-dia, coisas que você conhece hoje, como WCF, WebForms, IIS e MVC, por exemplo, para mostrar a comparação entre o que você conhece e o que está sendo apresentado.

É assim que construímos fundamentos sólidos, digerindo a complexidade com didática, tornando o complexo, simples.

É assim que conseguimos tornar uma jornada densa, em um pacote de ~4 meses.

Eu não acredito que um desenvolvedor possa entender uma tecnologia sem compreender seus fundamentos. Ele no máximo consegue ser produtivo, mas isso não faz desse desenvolvedor um bom tomador de decisões técnicas.

É preciso entender os fundamentos para conseguir tomar boas decisões.

0 comentários

Enviar um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.


4x Microsoft MVP

Categorias

Assine

Luiz Carlos Faria

Mensagem do Autor

Espero que goste desse post. Não deixe de comentar e falar o que achou.

Se acha que esse post pode ajudar alguém que você conheça, compartilhe!

 

Lives

Fique de olho nas lives

Fique de olho nas lives no meu canal do Youtube, no Canal .NET e nos Grupos do Facebook e Instagram.

Aceleradores

Existem diversas formas de viabilizar o suporte ao teu projeto. Seja com os treinamentos, consultoria, mentorias em grupo.