37 pontos por xguru 2025-05-28 | Ainda não há comentários. | Compartilhar no WhatsApp
  • Para o sucesso em engenharia, é importante que haja equilíbrio entre três áreas: qualidade (Quality), velocidade (Velocity) e satisfação dos desenvolvedores (Happiness)
  • O ESSP (Engineering System Success Playbook) fornece um framework de 3 etapas para melhorar esses aspectos de forma integrada e maximizar os resultados de negócio
  • Com base em vários frameworks como SPACE, DevEx, DX Core 4 e DORA, ele permite entender a situação atual da organização por meio de 12 métricas principais, definir prioridades de acordo com os objetivos de melhoria e implementar e ajustar mudanças de forma gradual
    • Essas 12 métricas são estruturadas para acompanhar cada área de forma quantitativa e podem ser customizadas conforme o contexto de cada organização
  • Todas as melhorias se baseiam na sustentabilidade no nível da equipe e no pensamento sistêmico, enfatizando uma abordagem equilibrada que considera indicadores antecedentes e indicadores defasados
  • Busca-se uma transformação sustentável de longo prazo, em vez de melhorias rápidas
  • É possível começar com o ESSP mesmo sem ferramentas próprias de medição, e diagnósticos iniciais por métodos qualitativos, como pesquisas, também são úteis
  • O GitHub destaca, com base em seus próprios casos, que melhorias centradas em qualidade acabam tendo impacto positivo também na velocidade e na satisfação dos desenvolvedores

Métricas de sucesso em engenharia do GitHub

  • Quality
    • Change failure rate: taxa de falha de mudanças
      → proporção de mudanças que causaram incidentes ou problemas
      • Cálculo: (número de deploys com falha / número total de deploys) × 100
      • Dica: a equipe deve alinhar claramente o que será considerado falha (ex.: necessidade de rollback, alerta de monitoramento etc.)
    • Failed deployment recovery time: tempo de recuperação de deploy com falha
      → tempo necessário para reverter um deploy com falha ou restaurar o sistema ao estado normal
      • Cálculo: mediana de momento de conclusão da recuperação − momento em que a falha ocorreu para cada deploy com falha
      • Dica: recomenda-se extrair isso automaticamente de sistemas de alerta ou logs. Prefira usar a mediana em vez da média para evitar o efeito de valores extremos
    • Code security and maintainability: segurança e manutenibilidade do código
      • Cálculo: avaliação abrangente de número de vulnerabilidades, complexidade, cobertura etc. por meio de ferramentas de análise estática, GitHub Advanced Security, CodeQL e afins
      • Dica: configure varreduras automáticas periódicas. Isso pode ser usado para medir o efeito de refatorações ou mudanças em políticas de segurança
  • Velocity
    • Lead time: lead time
      → tempo até que uma mudança no código chegue à produção
      • Cálculo: tempo desde a criação do PR até o deploy após o merge
      • Dica: usar a mediana, e não a média, reduz distorções. Se o lead time estiver alto, meça separadamente o tempo de espera do PR ou o atraso nas revisões
    • Deployment frequency: frequência de deploy
      → com que frequência os deploys em produção acontecem
      • Cálculo: número de deploys em um determinado período (por dia/semana)
      • Dica: é preciso definir claramente se deploys automatizados também entram na conta; para equipes pequenas, uma base semanal pode ser mais adequada
    • PRs merged per developer: número de PRs com merge por desenvolvedor
      • Cálculo: número total de PRs com merge / número de desenvolvedores que contribuíram
      • Dica: use isso não como ferramenta de comparação, mas para medir a eficiência do fluxo de trabalho da equipe. É preciso interpretar junto com o tamanho ou a complexidade dos PRs
  • Developer Happiness
    • Flow state experience: experiência de estado de fluxo
      • Cálculo: avaliação, por pesquisa com desenvolvedores, da “frequência/duração recente de experiências de fluxo”
      • Dica: recomenda-se uma pesquisa regular ao menos uma vez por mês. Incluir respostas dissertativas pode gerar insights qualitativos
    • Engineering tooling satisfaction: satisfação com as ferramentas de engenharia
      • Cálculo: coleta, por pesquisa com desenvolvedores, do nível de satisfação com o uso das ferramentas e dos pontos de melhoria desejados
      • Dica: separe por categorias detalhadas de ferramentas (IDE, CI, issue tracking etc.) para identificar pontos de melhoria mais práticos
    • Copilot satisfaction: satisfação com o uso do Copilot
      • Cálculo: pesquisa de satisfação com usuários que possuem licença do Copilot (NPS ou pontuação)
      • Dica: recomenda-se comparar diferentes momentos, como logo após a adoção e três meses depois. O feedback pode ajudar a melhorar treinamentos e casos de uso
  • Business Outcomes
    • AI leverage: nível de uso de IA
      • Cálculo: participação do Copilot nos commits, taxa de adoção de sugestões de código por IA, tempo de uso etc.
      • Dica: é possível usar a Copilot Telemetry API do GitHub ou instrumentação interna. A análise fica mais eficaz quando combinada com feedback qualitativo
    • Engineering expenses to revenue: proporção entre custos de engenharia e receita
      • Cálculo: gastos relacionados à engenharia / receita total
      • Dica: é necessário organizar os critérios contábeis internos. Recomenda-se analisar tendências mensais ou trimestrais para comparação
    • Feature engineering expenses to total engineering expenses: proporção dos custos de desenvolvimento de funcionalidades no total de custos de engenharia
      • Cálculo: (gastos relacionados ao desenvolvimento de funcionalidades / gastos totais de engenharia)
      • Dica: para uma medição precisa, é preciso definir com antecedência critérios claros de classificação dos custos não relacionados a funcionalidades, como manutenção, infraestrutura e testes

[3 etapas para o sucesso em engenharia]

Step 1: Identify the current barriers to success

  • Identificar os problemas no processo de desenvolvimento atual e os obstáculos que impedem o sucesso da engenharia é o ponto central
  • Isso serve como linha de base (baseline) para definir a direção e as prioridades das melhorias futuras
  • Abordagem
    • Analisar todo o fluxo do SDLC (Software Development Life Cycle) para identificar gargalos
    • No GitHub, a análise é feita com base em 12 métricas padrão, mas é possível usar apenas parte delas de acordo com as características da organização
  • Participação da equipe
    • Em vez de um único líder, toda a equipe deve definir junto o processo de melhoria
    • Também é suficiente iniciar conversas significativas com apenas algumas métricas
  • Metodologia
    • 1. Entender o fluxo básico

      • O fluxo geral de engenharia é dividido e analisado da seguinte forma:
        • Planejar (Plan)Desenvolver (Develop)Revisar (Review)Build (Build)Testar (Test)Lançar (Release)Operar (Operate)
    • 2. Coletar sinais quantitativos

      • São analisados dados quantitativos como os seguintes:
        • Frequência de deploy: com que frequência os deploys acontecem
        • Lead time: tempo entre a escrita do código e o deploy
        • Taxa de falha de mudanças: proporção de erros que ocorrem após o deploy
        • MTTR (tempo médio de recuperação): tempo necessário para recuperar após a ocorrência de um problema
    • 3. Coletar sinais qualitativos

      • Coletar feedback baseado na experiência de desenvolvedores e equipes:
        • Em que momento os membros da equipe sentem ineficiência
        • Quais ferramentas ou procedimentos causam problemas repetidamente
        • Quais atividades geram a maior carga psicológica
      • Métodos:
        • usar pesquisas, retrospectivas, entrevistas 1:1 etc.
        • também é possível usar uma lista pré-definida de perguntas do ESSP
    • 4. Definir os problemas centrais

      • Definir as barreiras (Barrier) com base nos dados coletados
      • Exemplos:
        • "O lead time é longo, o que atrasa o desenvolvimento de novos recursos"
        • "As falhas de build são frequentes, reduzindo a confiabilidade do deploy"
        • "Os desenvolvedores sofrem frequentemente com troca de contexto (context switching)"
      • O problema deve ser descrito de forma específica e observável
    • 5. Definir a prioridade das métricas

      • Em vez de melhorar todas as métricas de uma vez, focar em uma ou duas métricas com maior impacto
      • Essa prioridade servirá como critério para tentativas de melhoria e medição de resultados nas futuras Etapas 2 e 3
  • Dicas para executar a Etapa 1 com sucesso
    • 1. Foque na causa raiz, não na aparência do problema
      • Não julgue apenas pelos sintomas superficiais; é preciso investigar profundamente a raiz do problema
        • Ex.: pode parecer que a lentidão é causada por “testes manuais”, mas a causa real pode ser falta de confiança nos testes automatizados
      • Para isso, é útil consultar antipadrões (antipatterns) comuns em engenharia de software
    • 2. Consulte antipadrões
      • Antipadrões são soluções usadas com frequência, mas que não resolvem de fato o problema e podem até gerar efeitos colaterais
      • O GitHub fornece, como recurso separado, exemplos de antipadrões que podem existir nas equipes, então isso pode ser usado como ferramenta de autoavaliação
    • 3. Envolva as pessoas certas
      • Na Task 1 da Etapa 1, é importante receber contribuições de pessoas com papéis diversos
        • Ex.: desenvolvedores, testers, operações, segurança, product managers etc.
      • Isso permite entender o workflow de forma mais completa e evita deixar passar perspectivas específicas
    • 4. Use dados quantitativos e qualitativos de forma equilibrada
      • Só as métricas não bastam para entender todo o contexto
      • Além da análise quantitativa, também é preciso coletar feedback qualitativo sobre questões psicológicas, culturais e de colaboração da equipe
      • Ex.: queda de moral da equipe, falhas de comunicação e reclamações em retrospectivas não aparecem nos números
    • 5. Não selecione barreiras demais
      • Em vez de tentar resolver tudo de uma vez, foque nas barreiras mais impactantes e urgentes
      • Se houver tarefas de melhoria demais logo no início, há risco de perder capacidade de execução e momentum
    • 6. Garanta segurança psicológica
      • É preciso criar um ambiente em que os membros da equipe possam falar com sinceridade sem medo de prejuízo ou retaliação
      • Isso é uma condição essencial para revelar os problemas reais e aumenta a confiabilidade e a eficácia das ações de melhoria
    • 7. Comparação serve para aprendizado, não para avaliação
      • Comparações de métricas entre equipes ou diferenças de workflow devem ser usadas para gerar insights, não para avaliar desempenho quantitativo
      • Como cada equipe tem contexto, objetivos, stack tecnológica e restrições diferentes, comparações simples podem gerar mal-entendidos
      • Em vez disso, deve-se incentivar uma cultura de aprendizado para compartilhar o que funciona bem e extrair lições

Etapa 2: Avalie o que precisa ser feito para alcançar sua meta-alvo

  • Objetivo
    • Etapa de analisar quais mudanças precisam ser implementadas para resolver a questão central (Barrier) definida na Etapa 1
    • Vai além da simples adoção de funcionalidades ou troca de ferramentas, buscando identificar as causas-raiz e soluções em níveis organizacional, técnico e cultural
  • 1. Análise das causas-raiz do estado atual

    • Em vez de ficar apenas no resultado de que “a velocidade é lenta” ou “a satisfação é baixa”, é preciso distinguir:
      • por que está lento,
      • quais razões estruturais e organizacionais existem,
      • e o que pode ou não ser mudado
    • Ferramentas que podem ser usadas:
      • técnica dos 5 Whys
      • diagrama espinha de peixe (causa e efeito)
      • análise de feedback qualitativo em retrospectivas de equipe
  • 2. Levantamento de soluções possíveis

    • Fazer brainstorming de soluções técnicas, culturais e de processo para o problema
    • Exemplos:
      • técnico: melhorar a velocidade dos testes, aperfeiçoar o pipeline de CI/CD
      • cultural: ajustar práticas de code review, melhorar o onboarding
      • processo: limitar o tamanho de PRs, mudar critérios de merge
    • Técnica recomendada pelo GitHub:
      • combinar soluções baseadas em observação com melhorias centradas nas pessoas
  • 3. Avaliação de impacto e riscos

    • Para cada solução, avaliar os seguintes elementos:
      • impacto esperado: em quais métricas de melhoria ela pode influenciar
      • viabilidade: recursos da equipe e capacidade realista de execução
      • aceitação organizacional: nível de resistência à mudança
      • distinção entre efeito de curto e longo prazo: se gera resultados rápidos ou mudanças sustentáveis
    • Para isso, recomenda-se um Pilot (operação piloto)
      • testar com uma equipe pequena, coletar feedback e depois decidir se vale expandir
  • 4. Definição de prioridades e comunicação

    • Entre várias soluções, priorize com base nos seguintes critérios:
      • o que pode gerar o maior impacto
      • o que é mais executável
      • o que resolve o ponto de dor mais urgente
    • Essa decisão deve ser compartilhada com a equipe e construída com consenso, e
      • é recomendável registrá-la claramente na forma de OKRs ou metas de melhoria
  • Dicas para executar a Etapa 2 com sucesso
    • 1. Considere obrigatoriamente a sustentabilidade de longo prazo
      • Focar apenas em ganhos de curto prazo pode acabar causando problemas no longo prazo
        • Ex.: introduzir uma nova ferramenta pode melhorar a velocidade imediatamente, mas, sem treinamento, suporte e gestão da mudança, pode acabar gerando erros e confusão
      • Portanto, qualquer tentativa de melhoria deve ser uma estratégia que também considere manutenção e possibilidade de expansão
    • 2. Considere os trade-offs entre as diferentes áreas (zones)
      • Tome cuidado para que uma mudança que melhore uma área (ex.: velocidade) não sacrifique outra (ex.: satisfação dos desenvolvedores, qualidade)
        • Ex.: relaxar os critérios de review pode aumentar a velocidade, mas piorar a qualidade do código ou a fadiga dos desenvolvedores
      • É sempre necessário um enfoque equilibrado, considerando que o impacto pode abranger várias áreas ao mesmo tempo
    • 3. Envolva a equipe desde o início
      • Quanto mais a equipe participa diretamente e ajuda a construir a mudança, maior a chance de sucesso
      • Reúna a opinião dos membros para que a mudança possa acontecer de forma bottom-up
      • Mudanças impostas unilateralmente de forma top-down podem gerar resistência e desinteresse
    • 4. Defina claramente os indicadores de sucesso
      • Antes de implementar a mudança, é preciso alinhar o que será considerado sucesso
      • Ex.: se a meta for “reduzir o tempo de deploy”,
        • indicador defasado: redução real no tempo de deploy
        • indicador antecedente: redução no tempo de espera de PRs, aumento nas respostas da pesquisa de desenvolvedores sobre “percepção de melhora na velocidade dos PRs”
      • O ideal é definir juntos Leading Indicators e Lagging Indicators
    • 5. Prefira experimentos rápidos em vez de planos perfeitos
      • Uma abordagem iterativa, em que mesmo pequenas mudanças são testadas rapidamente e melhoradas com feedback, é eficaz
        • No início, mesmo tentativas incompletas podem ser testadas em pequena escala e, se a eficácia for comprovada, ampliadas
      • Isso ajuda a reduzir a chance de fracasso e fortalece a agilidade e capacidade de adaptação da equipe diante da mudança
    • 6. Comece por mudanças que gerem grande efeito com pouco esforço
      • Quando há muitos itens de mudança e eles são complexos, escolha primeiro melhorias de “alto impacto e baixo custo”
      • Ex.: adotar um guia simples de review, remover notificações desnecessárias etc. pode ser aplicado rapidamente e ainda assim ter grande impacto na satisfação
      • Experiências iniciais de sucesso dão confiança à equipe e fornecem o impulso para avançar para problemas mais difíceis

Etapa 3: Implemente suas mudanças, monitore os resultados e ajuste

  • Executar a tentativa de melhoria (Intervention) identificada na Etapa 2 dentro da organização,
    medir seus resultados e, se necessário, ajustar ou iterar a melhoria para buscar sucesso contínuo em engenharia
  • 1. Execução (Implement the change)

    • Antes da execução, é preciso deixar claro o seguinte:
      • Que mudança será feita?
      • Quem será responsável?
      • Com base em quais métricas será feita a avaliação?
      • De quando até quando será feita a medição?
    • Pontos a considerar na execução:
      • Definição do responsável: deixar a ownership clara
      • Onboarding e treinamento da equipe: todos no time precisam entender por que a mudança é necessária e o que vai mudar
      • Documentação da mudança: registrar o processo para que possa servir de referência em retrospectivas e futuras iterações
    • Exemplos de adoção:
      • Alterar a estratégia de build cache para melhorar a velocidade de CI/CD
      • Alterar a política de code review (ex.: introduzir uma regra de resposta em até 1 dia)
  • 2. Monitoramento (Monitor the change)

    • Após executar a melhoria, acompanhar os efeitos com as métricas definidas previamente
      • Se houve redução do lead time
      • Se houve redução da taxa de falhas
      • Se houve melhora na satisfação dos desenvolvedores, etc.
    • Ferramentas:
      • GitHub Insights, Copilot Telemetry, sistemas internos de BI
      • Dashboards de relatórios semanais/mensais
      • Pesquisas com desenvolvedores ou feedback de retrospectivas
    • Pontos importantes:
      • Deve ser possível comparar com a linha de base (baseline)
      • É importante observar tendências, e não apenas um valor isolado
  • 3. Coleta de feedback (Collect feedback)

    • Além das métricas quantitativas, também é necessário coletar feedback sobre se a mudança realmente ajudou do ponto de vista dos desenvolvedores
      • Utilizar retrospectivas, pesquisas anônimas, reuniões 1:1 etc.
      • Verificar se a melhoria tem alta "percepção de valor" ou se, ao contrário, está causando fadiga
    • Mudanças executadas às pressas sem consenso organizacional podem provocar resistência e reação negativa
  • 4. Ajustar ou iterar (Adjust as needed)

    • Se o resultado da tentativa de melhoria ficar abaixo do esperado ou gerar efeitos colaterais, responder das seguintes formas:
      • Reverter ou complementar a mudança
      • Manter apenas alguns elementos e reduzir o escopo
      • Expandir a aplicação para um escopo maior
    • Independentemente do sucesso ou fracasso da mudança, é sempre preciso aprender o seguinte:
      • Que elementos foram eficazes?
      • O que atuou como fator de bloqueio?
      • O que deve ser mudado na próxima vez?
  • Dicas para executar a Etapa 3 com sucesso
    • 1.Não espere perfeição imediata
      • Nem toda mudança gera uma melhoria visível de imediato
        • Os efeitos podem levar tempo para aparecer
        • Como o time também precisa passar por um processo de adaptação à mudança, paciência e observação contínua são importantes
      • No início, é válido usar ferramentas de feedback qualitativo, como pesquisas, para entender a percepção sobre a mudança
    • 2.Continue iterando e melhorando a mudança
      • Mesmo depois de um sucesso, não se trata de manter tudo como está; a mudança também precisa evoluir e ser ajustada continuamente
      • Conforme surgirem novos problemas ou mudanças no ambiente externo, pode ser necessário revisitar as melhorias existentes
      • É preciso incentivar o time a encarar isso como uma atividade regular e manter o ciclo de melhoria
    • 3.Fique atento a efeitos colaterais não intencionais
      • Algumas mudanças podem causar atritos inesperados em outras áreas
        • Ex.: aumentar a velocidade de deploy é uma boa mudança, mas se a validação de qualidade for fraca, isso pode levar ao aumento de bugs
      • Além das métricas, também é preciso observar as mudanças no fluxo geral do workflow e agir imediatamente se surgirem sinais anormais
    • 4.Continue verificando o nível de segurança psicológica
      • Mesmo após a mudança, é preciso manter um ambiente em que o time possa levantar problemas livremente
      • Para evitar o acúmulo de "problemas não ditos", é necessário criar uma atmosfera em que os membros do time possam dar feedback honesto
      • Insatisfação com o processo alterado, aumento excessivo de trabalho, estresse inesperado etc.
    • 5.Avalie continuamente os efeitos de longo prazo
      • O ponto central não é o resultado de curto prazo, mas sim desempenho sustentável e melhora no moral da equipe
      • Ao longo do tempo:
        • Se a mudança foi incorporada de fato
        • Se não surgiram novos efeitos colaterais ou problemas
        • Se há manutenção ou queda de desempenho, tudo isso deve ser monitorado continuamente
    • 6.Use o feedback como oportunidade de aprendizado
      • Mesmo mudanças que fracassam são ativos valiosos de aprendizado
      • É preciso analisar com base em dados e feedback o que deu errado e refletir isso na próxima tentativa
      • Também é importante cultivar uma cultura que incentive o time a enxergar o fracasso como oportunidade de aprendizado

Além das etapas: faça o playbook funcionar para você

  • Adaptação

    • Escolher as métricas e os métodos de medição (telemetria vs. pesquisas) de acordo com as características da organização
    • A medição não deve virar um fim em si mesma; ela deve ser usada como ferramenta para melhorias reais
  • Gestão da mudança

    • É importante usar frameworks de gestão da mudança, como ADKAR e o modelo de Kotter, para ajudar a organização a se adaptar bem às mudanças
  • Mentalidade de crescimento

    • Ver cada tentativa como oportunidade de aprendizado, e uma postura de aceitação do fracasso é essencial para a melhoria contínua
  • Gamificação

    • Projetos de recompensa baseados em motivação podem gerar efeitos positivos, mas, se forem mal planejados, podem acabar causando queda de qualidade ou desequilíbrios

Alternativas ao GitHub Engineering System Success Playbook

  • Dependendo da situação, em vez do ESSP, também é possível usar análises mais simples focadas no uso de features ou estratégias de melhoria baseadas em ferramentas individuais
  • O importante é uma abordagem realista adequada ao time e à organização, além de um esforço contínuo de melhoria

Ainda não há comentários.

Ainda não há comentários.