A crueldade de um software lento

Olá, caros leitores!

Acredito que todos vocês, pelo menos alguma vez, já se irritaram com um software lento em algum estabelecimento. O que pode passar despercebido é que, além da irritação, a lentidão pode causar outros impactos, até mesmo na sociedade!
O papo de hoje, portanto, é sobre desempenho, um dos requisitos não-funcionais de uma aplicação. Acompanhe!

Uma das motivações para escrever este artigo foi um acontecimento recente em uma instituição bancária. Eu e minha noiva retiramos uma senha para abertura de contas e aguardamos a chamada no telão. Nesse horário, haviam apenas dois atendentes disponíveis (a propósito, isso parece ser normal). Após algum tempo, notamos que um dos atendentes parecia estar ocioso, como se estivesse esperando algo. Um homem que estava ao nosso lado, inconformado com a demora, questionou o atendente, que logo justificou-se: “O sistema está reiniciando”.

Imagem via Shutterstock

Imagem via Shutterstock

Ponto final. Culpa do software. Este tempo de reinício atrasou o itinerário de todas as pessoas que estavam ali, esperando na fila, inclusive nós. E o pior: de uma forma misteriosa, o sistema precisava ser reiniciado a cada atendimento.
Como consequência, cheguei vinte minutos atrasado no trabalho e perdi boa parte de uma reunião de planejamento de Sprint para definir estimativas e prioridades. Para que eu pudesse acompanhá-la, os participantes tiveram de voltar e fazer alguns repasses do que eu havia perdido. Por fim, a reunião excedeu 40 minutos do horário do expediente, prejudicando um dos desenvolvedores, que perdeu o primeiro horário da faculdade em função do atraso.

Tudo isso porque o sistema estava reiniciando…

Se o exemplo acima não foi o suficiente, falaremos, então, de números. Afinal, tempo é dinheiro.
Suponha que uma empresa tenha 4 assessores contábeis e que o salário de cada um deles seja 4 mil reais. Associe os cálculos:

  • 4.000,00 / 20 dias = 200,00 por dia;
  • 200,00 / 8 horas = 25,00 por hora;
  • 25,00 / 60 minutos = 0,42 por minuto.

Agora, considere que um conjunto de operações contábeis diárias no software da empresa (cálculos, importações, exportações e emissão de relatórios fiscais) demore cerca de 15 minutos, no total, para ser processado. Voltamos aos cálculos:

  • 15 minutos * 0,42 = 6,30 por dia;
  • 6,30 * 20 dias no mês = 126,00 por mês;
  • 126,00 * 4 assessores = 504,00.

Mensalmente, há um custo improdutivo de 504,00 para a empresa devido aos 15 minutos diários de processamento, sem contar a insatisfação dos usuários. No ano, esse montante resulta em 6.048,00. É dinheiro pra dedéu, hein?
Prosseguindo com o exemplo, imagine que, após tomar conhecimento desse levantamento, o escritório contábil trocou os servidores e os equipamentos de rede na tentativa de reduzir o tempo e o stress dos assessores, porém, sem sucesso.
Ponto Final. Culpa do software.

Estou sendo radical? Creio que não. O software assume, sim, a maior parte desse custo, muitas vezes por falta de conformidade com a questão do desempenho.

Só a título de conhecimento, se o tempo de 15 minutos fosse reduzido para 12, já haveria uma economia de aproximadamente 100,00 por mês. O valor pode parecer baixo, mas, em um ambiente real de produção, com vários funcionários (e provavelmente com um tempo de processamento bem maior do que 15 minutos), a diferença pode ser gritante!

Pare e reflita sobre supermercados, farmácias, restaurantes, hotéis, lojas e clínicas. Se o software em cada um desses estabelecimentos fosse um pouco mais rápido, mesmo em questão de segundos, já notaríamos uma diferença no nosso cotidiano, como, por exemplo, atendimentos e soluções mais eficientes, maior número de pessoas atendidas e menos irritação com a demora.

Bom, a boa notícia é que isso é possível!

O desempenho de uma aplicação pode ser melhorado de várias formas. A primeira ação, na qual considero extremamente importante, é a otimização de consultas SQL. Eu acredito que esse item é um dos grandes vilões das lentidões em softwares. A simples remoção de uma cláusula JOIN em uma consulta já pode apresentar uma melhoria visível. Lembre-se do exemplo dos cálculos: qualquer segundo mais rápido é uma vantagem.

Uma boa dica é utilizar um monitor de instruções SQL para identificar leaks de consultas demoradas, duplicadas ou indevidamente executadas.

Em segundo lugar, existem várias técnicas para melhorar a performance do código da aplicação, principalmente relacionados a loops de repetição, I/O (leitura e escrita de arquivos), condições de guarda e manipulação de dados em memória. Não basta o software simplesmente fazer o que tem que fazer. Ele deve fazer bem feito.

Por fim, em terceiro lugar, apele para o bom senso e invista na simplicidade e usabilidade do software para agilizar o trabalho dos usuários e evitar insatisfações. Quanto mais prático, melhor. Nesse ponto, vale ressaltar o conceito de Engenharia de Valor. 🙂

Para finalizar, deixo três tópicos interessantes do meu blog que abordam um pouco dessas otimizações:

Enquanto isso, a única saída é esperar na fila

Abraços, pessoal!

Publicado originalmente em Blog André Celestino

André Celestino

Mais artigos deste autor »

Desenvolvedor de software há 7 anos e autor do blog AndreCelestino.com. Graduado em Sistemas de Informação e pós-graduado em Engenharia e Arquitetura de Software com ênfase em Desenvolvimento Ágil. Atualmente trabalha como Engenheiro de Software.


4 Comentários

Marcos Soares
1

Primeiramente devo parabenizar pelo post, gostei muito do titulo tambem, muito bom.
Sempre quando faco comparacoes do tipo Tempo x Dinheiro. E essa sua colocacao foi perfeita!
Imagine por exemplo o Facebook por exemplo. Eles possuem em media 757 milhoes por dia. Vamos supor que nesses acessos tivesse um delay de apenas 1 segundo. Isso sao 210277 horas; Isso da em torno de 24 anos, Isso apenas em 1 dia!
Isso e o Facebook e claro, imagina o Google?
Nao substime a diferenca que fara 1 segundo que seja no software que voce desenvolve, mesmo esse software sendo usado para um pequeno nicho de mercado.
Muito obrigado pelo post Andre Luis, abracos!
Marcos Soares – Slipmp
Performance matters

siga0984
2

Muito bem colocado o exemplo de relação entre dinheiro e tempo. Tão simples quanto isso. Em se tratando de um sistema informatizado, onde podemos ter várias camadas e a integração de vários componentes de software, todos precisam fazer bem a tarefa para o qual foram desenhados. Qualquer componente não funcionando direito causa um efeito cascata no sistema inteiro. Vale sempre a máxima da simplicidade. Parabéns pelo artigo. 😀

André Luis Celestino
3

Olá, Marcos!
Isso mesmo! A diferença de 1 segundo é ainda mais crítica em redes sociais. Acredito que a equipe de desenvolvimento dessas redes, como o Facebook, preza muito pelo aspecto de desempenho em função dos bilhões de usuários.
Aplicativos comerciais também devem seguir o mesmo critério e proporcionar uma boa experiência para os usuários.
Obrigado pelo comentário! Abraço!

André Luis Celestino
4

Olá, siga0984, tudo bem?
Ótimo comentário! Acredito que essa falha na arquitetura, causada por componentes instáveis, também é um dos grandes responsáveis pelas lentidões em softwares. Quando isso ocorre, o efeito cascata normalmente é ignorado e somente a “ponta do iceberg” é corrigida. Em outras palavras: soluções paliativas.
Obrigado pelo ponto de vista! Abraço!

Deixe seu comentário

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