Acelerando o Desenvolvimento de Software - Python Sul 2024
Nessa palestra você irá conhecer as mais recentes discussões sobre produtividade e performance na indústria do desenvolvimento de software, junto com um conjunto de boas práticas a nível individual e de equipe inspiradas nessas discussões.
É um processo subjetivo ◦ É um inventário invisível ◦ Design e entrega podem acontecer ao mesmo tempo • Tentativas: ◦ Linhas de código? Story points? Ocupação do time? ▪ Cuidado para não incentivar comportamentos indesejados!
Agora com pessoas… (https://www.iflscience.com/the-great-rat-massacre-of-1902-and-how-it-backfired-spectacularly-has-eerie-parallels-with-covid19-58464)
já conduzido (https://dora.dev/). • Objetivo: encontrar como medir a performance de entrega de software, e o que a impacta. • Utiliza uma grande quantidade de dados e análise estatística rigorosa. • Foco em predição e correlação dos dados. Em 2018 foi lançado esse livro: Reúne um conjunto de práticas que comprovadamente aumentam quantidade, qualidade e estabilidade das entregas de desenvolvimento de software de uma empresa.
commitado e código executando com sucesso em produção. ⬢ Deployment Frequency: Frequência dos deploys em produção. ⬢ Mean Time To Restore (MTTR): O quão rápido se conserta falhas em produção. ⬢ Change Fail Percentage: % de mudanças em produção que falham (ie. rollbacks, fixes, outages…) Motivos: • Métricas globais • Medem velocidade e estabilidade • Valorizam resultados concretos, não ‘busywork’ • O estudo mostrou que empresas que tem bons valores nessas métricas também se saem bem em: • Performance financeira ◦ ex.: turnover e lucro • Performance não-financeira ◦ ex.: qualidade e satisfação do cliente
impacta a performance de uma empresa. ⬢ Não é necessário escolher entre estabilidade e velocidade: Na realidade, velocidade depende de estabilidade. ⬢ Quando bem implementadas, muitas das práticas dos movimentos Agile, Lean e DevOps tem um impacto positivo na performance de entrega de software.
partir de empresas buscando maneiras de construir software que é seguro, resiliente e escalável. Era uma parceria entre as equipes de Dev e Ops de uma empresa. Valoriza: • Integração continua • Entrega continua • Métodos ágeis • Cultura colaborativa Não é apenas práticas e ferramentas, mas também uma cultura!
cultura da empresa. ⬢ Se os dados são utilizados como uma forma de controle, as pessoas passam a escondê-los. ⬢ Para melhorar a performance, é necessário melhorar a cultura. Modelo de Westrum para culturas organizacionais: • Patológico: baseado em poder • Burocrático: baseado em regras • Generativa: baseado em performance “Whenever there is fear, you get the wrong numbers”
forte fluxo de informações, mas requer: ⬡ Confiança ⬡ Transparência ⬡ Responsabilidade compartilhada ⬡ Segurança para errar e aprender ⬡ Encorajar novas ideias ⬡ Alta colaboração entre as equipes “Accident investigations that stop at ‘human error’ are not just bad but dangerous. Human error should, instead, be the start of the investigation.”
trabalham influencia a cultura. ⬢ Ou seja, melhores práticas de trabalho podem melhorar a cultura! “The way to change culture is… to start by changing how people behave — what they do”
melhoria de uma cultura de alta performance. ⬢ Como? ⬡ Prover as ferramentas, coaching, objetivos e métricas para permitir que os times tenham autonomia. ⬡ Apoiar um ambiente que permita mudanças incrementais de forma colaborativa. “Going fast is of no value if you don’t go in the right direction.”
si mesmo!) a desafiar suposições e tentar novos comportamentos, sempre aprendendo no processo. ⬡ Os comportamentos que funcionam e recebem reforço se tornam hábitos, e hábitos mudam a cultura. ⬢ Times podem avançar de forma independente quando: ⬡ Sabem porque eles estão fazendo o que estão fazendo. ⬡ Sabem como o sucesso vai ser medido.
como para a infraestrutura ⬢ Deploy automático ⬢ Integração Contínua (CI) ⬢ Trunk-based development ⬡ Ao invés de feature branches de longa duração ⬢ Testes automáticos ⬡ Testes confiáveis e frequentes ⬢ Gestão de dados de teste ⬢ Shift left on security ⬢ Continuous Delivery (CD) Princípios: 1. Construir já com qualidade 2. Trabalhar em batches pequenos 3. Automatizar trabalho repetitivo 4. Melhoria constante 5. Responsabilidade compartilhada
tanto a nível de sistemas como de times ⬡ Não foque em ferramentas e tecnologias, mas em deployability e testability ⬡ Modularidade permite escalabilidade Deployability • Capacidade de deployar uma aplicação de forma independente, em múltiplos ambientes. • De preferência, a nível de componente, e sendo capaz de detectar e tolerar falhas. Testability • Capacidade de testar uma aplicação de forma independente, sem requerer um ambiente integrado. “High performance is possible with all kinds of systems, provided that systems — and the teams that build and maintain them — are loosely coupled”
but will prevent generative culture if the business doesn’t regularly re-evaluate it and improve it by empowering interested and skilled individuals to come together and be empowered to make the change from all levels.” ⬢ Times empoderados ⬡ Time autônomos com autoridade para tomar decisões. ⬡ Balanço entre padronização e times escolherem as ferramentas.
dos clientes de forma ativa e incorporá-lo no design dos produtos. ⬢ Value stream ⬡ Entender e ter visibilidade do fluxo ponta-a-ponta entre o negócio e o cliente. ⬢ Trabalhar em batches pequenos ⬡ Tanto a nível de código, como de entregas, e de produto (ex.: MVPs) ⬢ Team experimentation ⬡ Times terem liberdade para experimentar novas ideias ⬡ Ter autoridade para fazer mudanças sem aprovação externa O objetivo da experimentação é poder fazer decisões informadas em dados, através de feedback dos clientes e performance do software, e assim permitir um processo rápido de testes e validação.
código. É importante decompor uma entrega em features, e decompor a feature em PRs pequenos. Vantagens: ⬢ Reduz o cycle time e a variabilidade ⬢ Permite obter resultados em produção e iterar sobre isso ⬢ Reduz risco e overhead ⬢ Reuso de código ⬢ Evita retrabalho com conflito de código ⬢ Permite revisões de código mais rápidas Recomendação de leitura: https://newsletter.pragmaticengi neer.com/p/stacked-diffs
ex.: revisões por pares ou da própria equipe ⬢ Monitoramento do sistema ⬢ Notificações pró-ativas ⬢ Limites de WIP ⬡ Não deve ser um limite fixo, mas um processo de melhoria ⬢ Visualizar o trabalho ⬡ Tarefas, métricas… ⬡ Deve ser de fácil acesso
ser seguro falhar, ter um budget, espaços para compartilhar conhecimento ⬢ Forte colaboração entre times ⬡ Uma relação de confiança: manter palavra, previsibilidade, comunicação aberta ⬡ Encorajar e incentivar trabalhos que facilitem a cooperação ⬢ Satisfação com o trabalho ⬡ Trabalho desafiador e com significado ⬡ Ter autonomia para exercer suas habilidades e conhecimento ⬡ Ter as ferramentas e recursos necessários ⬢ Liderança transformadora Caracteristicas: • Visão • Comunicação inspiradora • Estimula intelectualmente • Se importa • Reconhecimento pessoal • Dá o exemplo “High-performance culture… is the development, through experimentation and learning guided by evidence, of a new way of working together that is situationally and culturally appropriate to each organization.”
deployment’. ⬢ Líderes focados em remover impedimentos, não em comando-e-controle. ⬢ Investimento em DevOps. ⬢ Práticas de Gestão Lean e Entrega Contínua. “The technical practices that improve our ability to deliver software with both speed and stability also reduce the stress and anxiety associated with pushing code to production”
Cultura generativa orientada a resultados • Arquitetura modular • Práticas de engenharia que facilitam a entrega contínua • Liderança efetiva Conclusão
and rework are useful proxies for quality, because they represent a failure to build quality into our products” “Building slack into the system is critical to allow for responsiveness — “As utilization approaches 100%, lead times approach infinity”