Tudo que pode ser contado não necessariamente conta; Tudo que conta não necessariamente pode ser contado.” Albert Einstein

Recentemente falamos do papel do Tracker no método XP (Extreme Programming), que entre outras coisas deve ficar atento às métricas. Vejamos agora que tipos de métricas existem e quais podem ser úteis em um ambiente de desenvolvimento de software.

Tipos de Indicadores

Jurgen Appelo [2] e Mike Cohn [3] recomendam que se use ambos os tipos de indicadores: Indicadores Indutores (Leading indicators): ajudam a detectar um aumento na probabilidade ou na gravidade de um evento antes que apareçam nos indicadores de resultado [1].  

Quando um indicador indutor muda, ele indica que você pode estar no caminho para atingir um objetivo ou meta [2]. 

Por exemplo, aumentar a cobertura de testes ou a quantidade de testes criados pode indicar mais qualidade no produto [2].

Você pode ter diversos objetivos em uma equipe de desenvolvimento de software, como por exemplo, aumento na qualidade, aumento na produtividade, produção de melhores estimativas, redução do custo do desenvolvimento, maior previsibilidade do cronograma, aumento na satisfação do usuário, releases mais frequentes, etc. [3].

Para cada objetivo você deve ter ao menos um indicador indutor e um de resultado [3].

Indicadores de Resultado (Lagging indicators): ajudam a confirmar que um evento pode ocorrer e reagem mais lentamente às mudanças no ambiente do que os indicadores indutores[1].

São métricas que verificam que você atingiu seu objetivo depois de ter completado o trabalho. Por exemplo, reduzir o número de defeitos reportados por clientes aponta que a qualidade do produto de fato melhorou.

Balanced Scorecard

De acordo com a Wikipedia, “Balanced Scorecard (BSC) é uma metodologia de medição e gestão de desempenho desenvolvida pelos professores da Harvard Business School, Robert Kaplan e David Norton, em 1992” [6]. 

Kaplan e Norton percebiam o fato de a maioria das organizações gerenciarem os negócios através apenas de métricas financeiras como um problema, por isso, o BSC visa a integração e balanceamento de todos os principais indicadores de desempenho existentes em uma empresa de modo holístico, ou seja, visando a organização como um todo.

O BSC é formado por quatro perspectivas que devem ser equilibradas:

  1. Financeira: Gerenciar bem o dinheiro é fundamental para a sobrevivência de qualquer negócio em um sistema capitalista como  este em que estamos inseridos. Você precisa saber de onde vem o dinheiro da sua organização e onde o investirá;
  2. Clientes (satisfação com a organização, produtos e serviços): Pergunte-se o seguinte: “Será que cada pessoa da minha organização sabe o que os clientes querem e como o trabalho deles afeta os clientes? [7]” Vá em frente e faça essa pergunta para eles. Que tipo de resposta você recebeu? Algo genérico como “Humm…. um trabalho de qualidade, acho..”, ou algo específico e mensurável? Você precisa saber quem são seus clientes e o que eles querem de você para atendê-los bem.
  3. Processos internos (criação de valor): Diz respeito aos processos relacionados ao suporte à produção ou prestação de serviços da organização;
  4. Aprendizado e Crescimento (treinamento, educação, conhecimento): Cuidar das pessoas e do desenvolvimento de competências.

Este curto vídeo apresenta de maneira bem didática os conceitos do BSC (em inglês):

Indicadores Ágeis – Agile Balanced Scorecard

Steve Garnett sugere 4 áreas para que os times ágeis criem Balanced Scorecards, para acompanhar métricas importantes, com quatro áreas distintas:

  1. Valor de Negócio: através de um Burndown Chart.
  2. Débito Técnico: não aderência a Definição de Pronto (DoD) e Padrões de Qualidade
  3. Melhoria Contínua: Retrospectiva, Planos de Ação, Impedimentos Levantados e Removidos
  4. Lean: Tempo de Ciclo e Quantidade de Desperdício

Já os autores do blog LitheBlog, sugerem de forma diferente:

  1. Produto: Estamos criando produtos que agregam valor para nossos clientes?
  2. Finanças: Estamos conquistando bons resultados financeiros?
  3. Equipe: Estamos trabalhando bem juntos como equipe para atender às necessidades dos stakeholders?
  4. Cronograma: Estamos conseguindo atender os prazos estabelecidos?

Indicadores Chave de Performance (KPIs)

What You Measure Is What You Get” John H. Hummel and William G. Huitt [11]

Há 3 tipos de KPIs:

  • Números (quantidades): 2988 defeitos, 689 produtos vendidos, 788 novos clientes.
  • Progresso (percentual de completo): 5% pronto.
  • Alterações: 5% mais clientes, 10% de aumento nas vendas no último mês.

KPI’s geralmente estão associados com metas: Quanto clientes queremos conquistar neste ano? Qual o percentual de redução de defeitos esperado? Quantos story points o time espera entegar? etc.  

Segundo Dave Nicolette [8], uma Métrica é um padrão para medir ou avaliar algo, já uma Medida é uma quantidade, uma proporção, ou comparação quantitativa de alguma natureza.  

No artigo Appropriate Agile Measurement, Deborah Hartmann Preuss e Robin Dymond apresentam características das boas métricas ágeis, algumas delas são [9]:

  • Confirmam e reforçam princípios de Lean e Agile
  • Medem Resultado e não Produção
  • Acompanham tendências, não números
  • São fáceis de se coletar
  • Oferecem combustível para discussões significantes
  • Podem medir Valor (produto) ou Processo

Para John Seddon as características dos bons KPI são:

  1. O KPI está ligado a um propósito do stakeholder.
  2. O KPI ajuda a melhorar um aspecto do sistema.
  3.  O KPI é parte do trabalho daqueles que estão interessados nele.

Jurgen Appelo afirma que deve-se medir para atender a necessidades de diferentes stakeholders e perspectivas [2]:

  1. Colaborador
  2. Time
  3. Organização
  4. Cliente
  5. Fornecedor
  6. Gerente
  7. Comunidade

Exemplos de Métricas e KPI’s

Note que nem todas vão atender as recomendações supracitadas.

  • Lead time: O tempo entre o pedido do cliente e a entrega (o início e o fim do proceso). Ex: 2 dias do backlog (registro do pedido do cliente) à produção (entrega do software funcionando).
  • Cycle time (tempo de ciclo): O tempo total entre o início e o fim da produção ou da prestação de serviço. Ex: 6 horas por estória de usuário do “to do” ao “done“.
  • Takt time: Takt é uma palavra em alemão que significa batida de orquestra [7], refere-se a taxa (batida, ritmo) em que um processo é capaz de operar para atender a demanda dos clientes. Ex: A equipe desenvolve 14 story points a cada 2 horas.
  • Defeitos por unidade: A quantidade de defeitos para cada unidade produzida ou serviço prestado. Ex: Defeitos por Estória de Usuário Desenvolvida. Há variações como defeitos por milhão, ou defeitos por milhão de oportunidades.
  • Nível de Maturidade em Competências: Quais são as habilidades ou competências chave que as pessoas devem desenvolver para que seu negócio tenha sucesso? Como as pessoas estão em nível de maturidade para cada uma dessas competências?
  • Custo do Retrabalho
  • Valor Agregado
  • Horas Trabalhadas
  • Linhas de Código
  • Cobertura de Testes
  • Quantidade de Casos de Teste
  • Lucro
  • Velocidade do Time
  • Throughput (Produção)
  • Happiness Index da Equipe
  • Trabalho em Progresso (WIP)

Dashboards

O painel (dashboard) do seu carro te fornece informações precisas de forma rápida e confiável sobre a situação atual dos principais elementos necessários para que o automóvel possa operar com perfeição: combustível, temperatura do carro, velocidade, autonomia, etc.

Da mesma forma recomenda-se que você use um dashboard com as principais métricas e indicadores de performance da sua organização, para que possa rapidamente identificar como as coisas estão caminhando e tomar providências se necessário.

Alguns softwares como o Acelerato, criam um Dashboard para projetos com base nos dados das Iterações:

Ferramentas para Medição

Cada plataforma e linguagem de programação possui um conjunto de ferramentas específicas para colher métricas no código fonte produzido por um time de desenvolvimento de software, mas essas são algumas interessantes que podem ser usadas na plataforma Java:

  • Sonar – Oferece uma série de métricas interessante como complexidade ciclomática e código duplicado. Possui dezenas que plugins que podem oferecer métricas das mais diversas naturezas como bugs óbvios (FindBugs), alinhamento aos padrões de codificação do time (PMD, Checklist, JLint), entre outras coisas [8].
  • JDepend – Mensura dependências entre objetos.

Desafios

  • Quais métricas você e seu time utilizam?
  • Suas métricas agregam valor, motivam o time ou os ajudam a melhorar de alguma forma?
  • Suas métricas atendem as diversas características que os especialistas apontam para “métricas ágeis”?
  • Que tal criar um Balanced Scorecard para garantir que a Estratégia de Organização está Equilibrada?
  • Que tal criar um Dashboard para seu Time?

Referências