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!

Introdução

Uma das motivações para escrever este artigo foi um acontecimento recente em uma instituição bancária. Eu retirei uma senha para abertura de conta e aguarei 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, notei 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.”.

Ponto final. Culpa do software. Este tempo de reinício atrasou o itinerário de todas as pessoas que estavam ali, esperando na fila. 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…

Tempo é dinheiro

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. Vamos voltar 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. Sabe por quê? A culpa é do software.

Parece radicalismo, mas 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.

Foco no desempenho!

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 grande 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), gerenciamento de recursos 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 blog que abordam um pouco dessas otimizações:

Enquanto isso, a única saída é esperar na fila…
Abraços, pessoal!


André Celestino