Quando estamos conduzindo a gestão de projetos de software, lidamos com o velho tripé de tempo, escopo e orçamento.
De acordo com o célebre Uncle Bob (Robert C. Martin) em seu livro Desenvolvimento Ágil Limpo, um dos grandes motivos dos projetos fracassarem é a simples falta de compreensão de muitos gestores acerca da lógica fundamental que restringe o desenvolvimento de software a obedecer uma lei praticamente irrefutável: a lógica da restrição tripla.
Essa lei propõe que ao gerenciar um projeto de software, você tem as seguintes opções: bom, rápido, barato e concluído… sendo que você só pode escolher três! Definitivamente você não pode ter os quatro, sob nenhuma hipótese, pois:
Se um projeto é bom, barato e concluído, certamente não será rápido. Para alcançar qualidade e manter os custos baixos, um projeto simplesmente vai exigir mais tempo. Isso significa etapas mais longas de desenvolvimento, revisões e otimização de recursos, o que demanda tempo para ser feito.
Se um projeto é bom, rápido e concluído, certamente não será barato. A combinação de alta qualidade com uma entrega rápida exige mais recursos e, muitas vezes, uma equipe maior ou mais experiente, logo, mais custosa.
Se um projeto é rápido, barato e concluído, certamente não será bom. Quando o foco é entregar algo rapidamente e com baixo custo, a qualidade do produto geralmente sofre, levando a um resultado insatisfatório ou incompleto, a exemplo de falhas, débitos técnicos e códigos espaguete.
Se um projeto é rápido, bom e barato, ele não será concluído. Essa combinação é insustentável, pois tentar manter velocidade, qualidade (o que já é bem difícil) e ainda baixo custo ao mesmo tempo vai gerar sobrecarga, falta de recursos e, no final, o projeto provavelmente não será concluído de forma adequada.
Afinal, o que faz um software ser ‘bom’?
"O que pode ser medido, pode ser melhorado." — Peter Drucker
Embora aparentemente o conceito de ‘bom’ ou ‘ruim’ possa ser subjetivo, podemos dizer que um bom software atende as necessidades reais dos clientes, possui uma navegabilidade intuitiva para seus usuários e é livre de erros. Isso quer dizer que qualidade demanda tempo e recursos.
Para garantir um resultado de alta qualidade, o time muitas vezes precisa sacrificar prazos apertados ou aumentar os custos. Veja algumas métricas que permitem avaliar a qualidade de um software:
Qualidade de código
Cobertura de Testes (Test Coverage): percentual de código que é coberto por testes automatizados (unitários, de integração e end-to-end). Uma cobertura maior geralmente indica um software de melhor qualidade e menos suscetível a bugs.
Taxa de Erros (Defect Rate): número de erros ou bugs detectados por mil linhas de código (KLOC). Uma taxa de erros baixa indica um código mais estável e confiável.
Débito Técnico (Technical Debt): medida da quantidade de retrabalho ou refatoração necessária para melhorar a qualidade do código existente. Pode ser calculada em termos de horas estimadas para "limpar" o código, story points ou outra forma de estimativa.
Complexidade Ciclomática: métrica que avalia a complexidade do código com base no número de caminhos lógicos que ele pode seguir. Menos complexidade geralmente significa um código mais fácil de manter e de menor risco de erros. Essa métrica pode ser mensurada por meio de ferramentas como SonarQube, PyLint (Python) ou CodeClimate.
Índice de Qualidade de Código (Code Quality Index): avalia aspectos como estilo de código, duplicação, uso de práticas recomendadas, e pode ser medido por ferramentas como SonarQube, que atribuem uma "nota" à qualidade do código.
Velocidade de Resolução de Bugs: mede o tempo que a equipe leva para resolver bugs críticos ou emergenciais. Uma resolução rápida indica um processo de correção eficaz e manutenção de alta qualidade.
Taxa de Sucesso (Success Rate)
Mede a porcentagem de usuários que conseguem completar uma tarefa com sucesso. Podemos calcular da seguinte forma: (Número de usuários que completaram a tarefa / Número total de usuários) * 100.
Tempo para Completar Tarefa (Task Completion Time)
É o tempo que um usuário leva para concluir uma tarefa específica, desde o início até o final. Por exemplo, em um aplicativo de banco, seria quanto tempo os usuários demoram para realizar uma transferência bancária.
Taxa de Erros (Error Rate)
A quantidade de erros cometidos pelos usuários ao tentar completar uma tarefa. Podemos calcular da seguinte forma: (Número total de erros cometidos / Número total de tentativas de tarefa) * 100.
Por exemplo, se os usuários digitam incorretamente o número do cartão de crédito 15 vezes em 100 tentativas, a taxa de erros é 15%.
Tempo Médio para Recuperação de Erros (Error Recovery Time)
O tempo que um usuário leva para corrigir um erro depois de cometê-lo, por exemplo, em um formulário online, podemos medir em minutos ou segundos quanto tempo os usuários levam para corrigir um campo incorretamente preenchido.
Taxa de Abandono de Tarefa (Task Abandonment Rate)
Mede a porcentagem de usuários que desistem ou abandonam uma tarefa antes de completá-la. Podemos calcular da seguinte forma: (Número de usuários que abandonaram a tarefa / Número total de usuários) * 100.
Se 4 de 20 usuários desistem de um processo de checkout em um site de compras, a taxa de abandono é de 20%.
Número de Cliques ou Ações para Concluir Tarefa (Click/Action Count)
Quantidade de cliques ou ações necessárias para concluir uma tarefa. Por exemplo, no preenchimento de um formulário online, pode-se contar quantos cliques são necessários para concluir o envio.
Taxa de Retenção de Usuários (User Retention Rate)
Mede quantos usuários retornam ao sistema após um certo período de uso inicial. Forma de calcular: (Número de usuários retornando / Número total de usuários) * 100.
Se 30 de 50 novos usuários retornam a um app após a primeira semana de uso, a taxa de retenção é 60%.
Taxa de Eficiência (Efficiency Rate)
Mede o quão eficiente os usuários são em completar uma tarefa, considerando o tempo ideal esperado. Podemos calcular da seguinte forma: (Tempo ideal para completar a tarefa / Tempo real gasto pelos usuários) * 100.
Se o tempo ideal para finalizar uma busca em um site é de 2 minutos, mas os usuários demoram em média 4 minutos, a eficiência seria 50%.