No nosso capítulo anterior, Conceber para a Testabilidade: Quebrar a Próxima Barreira, explorámos como a testabilidade se tornou um foco principal após resolver os estrangulamentos iniciais na configuração da equipa e nos testes manuais. Esse capítulo marcou um ponto de viragem na nossa transformação DevOps, à medida que mudámos a atenção para princípios de design de software mais profundos que permitiram testes mais suaves e rápidos.
Agora, no Capítulo 4, entramos numa próxima fase crítica: definir e monitorizar os KPIs certos e configurar painéis de controlo para medir o nosso progresso. Com práticas fundamentais implementadas e a testabilidade a melhorar, precisávamos de formas objetivas e baseadas em dados para visualizar o fluxo, identificar constrangimentos e melhorar continuamente.
Porquê os KPIs e os Painéis de Controlo São Importantes no DevOps
À medida que avançávamos na nossa jornada para otimizar a entrega End-to-End, reconhecemos a necessidade de um mecanismo visual e objetivo para acompanhar o trabalho e identificar estrangulamentos. Isso significou definir KPIs que não se tratavam apenas de números, mas de destacar informações acionáveis e impulsionar os comportamentos certos.
Ao configurar KPIs, é essencial reconhecer que equipas e organizações tendem a otimizar as métricas que monitorizam. Isto está em linha com a Lei de Goodhart, que afirma:
"Quando uma medida se torna um alvo, deixa de ser uma boa medida."
Este princípio realça a importância de selecionar KPIs que guiam as equipas para os resultados certos, em vez de as encorajar a simplesmente atingir metas. O objetivo destes KPIs é medir o progresso em direção ao nosso objetivo primordial. Mas qual é exatamente esse objetivo?
Definir o Objetivo
Conforme discutido em The Goal de Eliyahu M. Goldratt, o objetivo de um negócio é aumentar o lucro líquido enquanto melhora simultaneamente o ROI e o fluxo de caixa. Traduzindo isto para o nosso contexto de desenvolvimento de software, onde estamos atualmente na fase de investimento, identificámos o objetivo como:
“Desenvolver e entregar um produto de software comercializável que gere receita sustentável.”
Alcançar este objetivo requer o cumprimento de várias condições necessárias, incluindo:
- Tempo de Colocação no Mercado → Entregar funcionalidades e produtos rapidamente para capturar oportunidades de mercado.
- Escalabilidade Futura → Garantir que o software é concebido para crescer com a procura sem comprometer o desempenho.
- Otimização de Custos → Equilibrar as despesas de desenvolvimento enquanto se maximiza a entrega de valor.
- Retorno sobre o Investimento (ROI) → Garantir que o produto oferece benefícios financeiros a longo prazo que justifiquem o investimento.
Estas condições guiaram a forma como definimos os nossos KPIs, focando não apenas na velocidade e eficiência, mas também na construção de um produto escalável e rentável que oferece valor de negócio a longo prazo.
Visualizar o Fluxo: Configurar Painéis de Controlo
Conforme descrito em Accelerate por Nicole Forsgren, Jez Humble e Gene Kim, o nosso objetivo era configurar um painel de controlo que pudesse visualizar e monitorizar as quatro principais métricas DevOps:
- Frequência de Implementação → Com que frequência as equipas implementam código em produção.
- Tempo de Ciclo para Alterações → Com que rapidez o código passa do commit para a produção.
- Taxa de Falha de Alterações → A percentagem de implementações que causam falhas.
- Tempo Médio de Recuperação (MTTR) → Com que rapidez as equipas recuperam de falhas.
No entanto, gerar estas métricas de uma forma significativa foi inicialmente desafiador devido à falta de monitorização sistemática do trabalho entre as equipas. Foi aqui que a adoção do Azure DevOps como uma solução única e comum de gestão de trabalho para todas as equipas fez uma diferença significativa.
Começámos por configurar painéis de controlo específicos da equipa para monitorizar:
- Todos os itens de trabalho atribuídos por equipa.
- Trabalho atualmente em curso.
- Trabalho concluído.
- Defeitos categorizados por fase e prioridade.
Primeiro Desafio: Utilização Inconsistente
Mesmo com diretrizes claras, as equipas utilizavam os estados e as categorias de defeitos de forma diferente. Esta inconsistência tornou a análise do fluxo entre equipas quase impossível.
O primeiro desafio que encontrámos foi a utilização inconsistente dos estados dos itens de trabalho e das classificações de defeitos, apesar de existirem diretrizes claras. Diferentes equipas utilizavam os estados de forma distinta, o que dificultava a identificação de problemas de fluxo entre equipas. Tornar consistente a forma como o trabalho era monitorizado tornou-se crucial, garantindo que os painéis de controlo pudessem ser utilizados não só para equipas individuais, mas também para a otimização do fluxo em toda a organização.
Em seguida, focámo-nos em definir os itens de trabalho de forma adequada, garantindo que pudessem refletir com precisão onde o trabalho se encontra na cadeia de valor, ao mesmo tempo que eram suficientemente genéricos para serem utilizados por várias equipas. A maioria das ferramentas oferece categorias de estado predefinidas, mas estas nem sempre eram suficientes. Era importante definir categorias de estado que estivessem alinhadas com a nossa estrutura de equipa, com a forma como o trabalho fluía e com os nossos estrangulamentos conhecidos.
Analisar o Fluxo de Trabalho para Identificar Estrangulamentos
Os primeiros painéis de controlo foram configurados principalmente para visualizar o trabalho em curso – para obter uma imagem clara do que estava a acontecer entre as equipas. Isto incluía histórias de funcionalidades, histórias de utilizadores, defeitos e planos de teste. Estes forneciam um instantâneo do trabalho em andamento, mas ainda não ofereciam uma imagem clara do fluxo geral de trabalho e valor.
Ter visibilidade do trabalho em curso foi um primeiro passo importante, mas o próximo desafio foi ligar esta visibilidade a métricas baseadas no fluxo que pudessem realçar onde o trabalho estava a ficar parado e onde precisávamos de melhorar.
Utilizando o estado dos itens de trabalho, criámos métricas para mostrar o número de itens de trabalho em cada estado. Inicialmente, tínhamos apenas informações sobre a contagem de itens de trabalho em diferentes estados. Análises mais avançadas – como o acompanhamento do tempo que os itens de trabalho permaneciam em cada estado – exigiam ferramentas adicionais, que introduzimos mais tarde. Nesta fase inicial, no entanto, começámos a nossa análise utilizando apenas as contagens.
Mesmo com estes dados básicos, os painéis de controlo revelaram-se valiosos na identificação de estrangulamentos chave:
- Demasiados itens de trabalho em curso em comparação com o número de itens concluídos num determinado período.
- Um número crescente de itens de trabalho em atraso que excedia em muito o que poderíamos realisticamente concluir nos próximos 3 a 6 meses.
- Equipas com o maior número de itens de trabalho por concluir, indicando onde era necessário um foco e apoio adicionais.
Cada uma destas perspetivas exigiu uma solução diferente, mas a capacidade de visualizar o fluxo de trabalho foi um grande avanço. Esta melhoria levou o aspeto Ferramentas do nosso Triângulo DevOps mais longe, dando o ímpeto para o progresso nos outros dois aspetos – Arquitetura e Pessoas.
Utilizar KPIs para Impulsionar a Melhoria Contínua
Voltámos ao tópico dos KPIs em várias fases da nossa transformação DevOps. À medida que as nossas capacidades de monitorização melhoraram, conseguimos gerar métricas mais detalhadas que nos ajudaram a:
- Medir o progresso ao longo do tempo para garantir que estávamos a avançar em direção ao nosso objetivo de desenvolver um produto de software comercializável.
- Identificar dependências e transferências que estavam a causar atrasos no fluxo de trabalho.
- Identificar áreas onde as equipas necessitavam de apoio adicional ou melhorias de processo.
- Alinhar os nossos KPIs mais de perto com as quatro principais métricas DevOps de Accelerate, fornecendo uma medida objetiva do nosso sucesso.
Ao alinhar Ferramentas, Arquitetura e Pessoas com os KPIs certos, criámos um sistema que proporcionou visibilidade clara do nosso progresso, nos ajudou a identificar e desbloquear estrangulamentos e garantiu que permanecemos focados em entregar valor de negócio a longo prazo.
O Que Se Segue? Ramificação e Implementação Contínua
Com os nossos KPIs e painéis de controlo implementados, estamos agora prontos para otimizar o fluxo de código através dos ambientes e para produção. No Capítulo 5, iremos aprofundar a forma como abordámos o Branching e a Implementação Contínua, e as mudanças culturais e técnicas que nos permitiram implementar de forma mais rápida e segura.
Fique atento!