Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Praticas robustas e antifrageis de engenharia de software

267 views

Published on

Em resposta a uma crise de software dos anos 60, um grupo de especialistas se reuniu em uma famosa conferência da OTAN em 1968 para estabelecer as bases modernas da engenharia de software. E em meio a mais uma crise de software dos anos 90, um grupo de renomados experts em desenvolvimento de software lançou em 2001 o famoso manifesto ágil e os 12 princípios da agilidade.

Ainda assim, agora vivemos agora a “crise do ágil” em 2019. Segundo dados da Standish Group, a taxa de mortalidade de projetos ainda é alta, a entrega de valor não é atingida em muitos casos e temos muitos estouros de custos em projetos ágeis e convencionais. Porque isso ainda acontece e o que podemos fazer é o motivador da nossa apresentação.

Iremos ilustrar erros comuns de julgamento no uso indiscriminado de "melhores práticas" de engenharia de software e processos ágeis prescritivos. Iremos discutir porque o conceito de melhor prática não pode ser usado em domínios não ordenados (complexos e caóticos) e porque processos ágeis como o Scrum ou SAFE são inerentemente frágeis.

Buscamos ilustrar também na apresentação como: reconhecer práticas de processo robustas e antifrágeis (conforme definição de Nicolas Taleb); e identificar narrativas de domínios complexos e caóticos conforme framework Cynefin.

Com o uso desses e outros filtros de análise da teoria geral de sistemas e psicologia comportamental, podemos entender como criar mais robustez e efetividade na construção e sustentação de produtos de software com o uso de práticas ágeis

Published in: Technology
  • If you want to download or read this book, copy link or url below in the New tab ......................................................................................................................... DOWNLOAD FULL PDF EBOOK here { http://bit.ly/2m77EgH } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m77EgH } .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Praticas robustas e antifrageis de engenharia de software

  1. 1. Práticas de Engenharia de Software Robustas e Antifrágeis para Ambientes Complexos Marco Mendes Apresentado no Agile Brazil 2019 Belo Horizonte, MG, Brasil
  2. 2. Na década de 1960, o problema era que os projetos estavam excedendo o orçamento ou nunca eram entregues. A primeira crise na indústria de software
  3. 3. O nascimento da engenharia de software em 1968 nas históricas conferências da OTAN
  4. 4. “[A principal causa da crise do software é] que as máquinas se tornaram várias ordens de magnitude mais poderosas! Para ser franco: enquanto não existiam máquinas, a programação não era problema; quando tínhamos alguns computadores fracos a programação se tornou um problema moderado. E agora temos computadores gigantes e a programação se tornou um problema igualmente gigantesco.” E. Dijkstra, 1972
  5. 5. Em 2001, surge o Agile Manifesto como mais uma resposta a mais uma crise na engenharia de software.
  6. 6. “Temos um grande número de pessoas fazendo ágil flácido, uma tentativa tímida de seguir mal algumas práticas de desenvolvimento de software selecionadas”, Andy Hunt “Uma equipe Agile será ágil, não importa como o projeto seja gerenciado. Por outro lado, uma equipe que não é ágil não se tornará ágil simplesmente em virtude de uma nova e sofisticada estratégia de gerenciamento de projetos. ”, Robert Martin “O ágil foi corrompido pela complexo industrial do Agile”, Martin Fowler A crise do ágil ganha força em 2015
  7. 7. Precisamos investigar os nossos modelos mentais de como criar e manter sistemas de software.
  8. 8. Sistemas de software e a engenharia de software tem sido desenhados de forma mecanicista.
  9. 9. Os efeitos práticos tem sido a criação de processos, sistemas e resultados frágeis. Cuidado Frágil
  10. 10. Processos frágeis (Dados do Standish Group) Fonte: https://pmworldlibrary.net/wp-content/uploads/2018/05/pmwj70-May2018-Rosato-go-small-for-project-success-student-paper.pdf
  11. 11. •O foguete da Ariane 5 •O sistema de navegação do Boeing 737 •O bot da Knight Capital e perdas de centenas de milhões de dólares Sistemas de software frágeis Cisnes negros
  12. 12. Cuidado Frágil Robusto Me agite Antifrágil
  13. 13. Arquitetura de antifragilidade do BitTorrent
  14. 14. x f(x) Ganhos e perdas Você está aqui Perdas Ganhos O frágil O antifrágil x f(x) Ganhos e perdas Você está aqui Perdas Ganhos Perdas assimétricas. Qualquer coisa que tem mais perdas que ganhos de eventos aleatórios (variabilidade) Ganhos assimétricos. Qualquer coisa que tem mais ganhos que perdas de eventos aleatórios (variabilidade)
  15. 15. Propriedades de práticas frágeis de engenharia de software • Transferência de riscos – Práticas que transferem riscos de um local para outro. Ausência da pele em jogo. • Ilusão do ordenado – Práticas que tomam cenários complexos como se fossem ordenados • Iatrogenia – Efeitos colaterais de processos de software muito prescritivos
  16. 16. Práticas frágeis (Transferência de Risco) Dicotomia entre desenvolvimento e testes Modelo em V de qualidade sem automação de testes Devs Testers
  17. 17. Práticas frágeis (Transferência de Risco) Sistemas de incentivos divergentes Fonte: Lean Enterprise, Jez Humble at al.
  18. 18. Práticas frágeis (Transferência de Risco) Times de TI com sistemas de incentivos divergentes Espirais da morte • Mais código incorreto -> Menos disposição das pessoas em implantá-lo • Implantações menos frequentes -> Mais códigos (ruins) devem ser implantados a cada vez • Aumento na complexidade da implantação -> Aumenta a probabilidade de interrupções • Mais interrupções -> Mais relutância em implantar coisas novas Portões das burocracias. Derruba-los-ei! Aqui não passarás!
  19. 19. Práticas frágeis (Ilusão do Ordenado) Comportamento (incapacidade de prever) Arquitetura (dificuldade de entender) Ordenado Complexo Caótico Simples Complicado Fonte: Management 3.0, Jurgen Appelo (Extraído do livro The Interaction Between Complexity and Management de Ralph Stacey)
  20. 20. Práticas frágeis (Ilusão do Ordenado) Grandes projetos • Apenas 1/5 dos grandes projetos ágeis são entregues dentro das suas premissas gerenciais. (valor, custo e prazo) Fonte: Standish Group • Megaprojetos são deseconômicos com a escala. Fonte: Megaprojects and Risk: An Anatomy of Ambition - Bent Flyvbjerg
  21. 21. Práticas frágeis (Ilusão do Ordenado) Grandes sistemas (Big Ball of Mud) Grandes sistemas tem muito mais fragilidade inerente. Exemplo: Base pública de projetos medidos pelo SonarQube
  22. 22. Práticas frágeis (Iatrogenia) Processos de software prescritivos e definidos top down ritos processos Metodologias ferramentas papéis métodos tecnologias cadências estruturas
  23. 23. Algumas propriedades de práticas antifrágeis de engenharia de software • Estresse contínuo – Introduza volatilidade – Aceite muitos (e pequenos) erros • Redundância • Sem transferência de risco (skin in the game) • Descentralização e regras locais • Emergence “Antifragile system becomes better and stronger under continuous attacks and errors”, Nicholas Taleb
  24. 24. Uma agenda de antifragilidade na engenharia de software Monperrus, Martin. "Principles of antifragile software." Companion to the first International Conference on the Art, Science and Engineering of Programming. ACM, 2017. Jones, Kennie H. "Engineering antifragile systems: A change in design philosophy." Procedia computer science 32 (2014): 870-875. Russo, Daniel, and Paolo Ciancarini. "A proposal for an antifragile software manifesto." Procedia Computer Science 83 (2016): 982-987. Fitzgerald, Brian, and Klaas-Jan Stol. "Continuous software engineering: A roadmap and agenda." Journal of Systems and Software 123 (2017): 176-189. Allspaw, John. "Fault injection in production." Communications of the ACM 55.10 (2012): 48-52.
  25. 25. Práticas de antifragilidade • Injeção de falhas em produção (Netflix) • Exercício dos dias de jogos (Etsy) • Engenharia do Caos Chaos Engineering is the discipline of experimenting on a system in order to build confidence in the system’s capability to withstand turbulent conditions in production. http://principlesofchaos.org
  26. 26. Práticas de antifragilidade • Programação em grupos (Mob programming) • Revisões por pares (PR) “If a programmer is indispensable, get rid of him as quickly as possible”, Gerald Weinberg – Bus Factor
  27. 27. Práticas de antifragilidade Equipes multifuncionais, produtos (e não projetos), serviços pequenos e regras locais com o comando da missão Fonte: Lean Enterprise, Jez Humble at al.
  28. 28. Práticas de antifragilidade Automação de testes de unidade, Shift Left Testing, TDD e práticas similares que incentivem a incerteza e a volatilidade Fonte: Test Pyramid, Martin Fowler "If we're not making any mistakes, it means we're not moving quickly enough.”, Netflix
  29. 29. Práticas de antifragilidade Adotar o princípio Safety II • Uma abordagem de Safety I pressupõe que as coisas dão errado por causa de falhas identificáveis ou mau funcionamento de componentes específicos: tecnologia, procedimentos, trabalhadores humanos e organizações nas quais eles estão inseridos. • Uma abordagem Safety-II pressupõe que a variabilidade do desempenho diário fornece as adaptações necessárias para responder a condições variáveis e, portanto, é a razão pela qual as coisas dão certo. Os seres humanos são consequentemente vistos como essenciais para a flexibilidade e melhorias do sistema.
  30. 30. Práticas de antifragilidade Integração Contínua • Exposição diária a volatilidade através da automação da compilação e builds, execução de testes automatizados e publicação em ambientes intermediários.
  31. 31. Práticas de antifragilidade Comunidades de aplicações para self-healing de servidores “Nossas experiências mostram que os ACs são práticos e viáveis para aplicações atuais: um AC de 15.000 membros pode monitorar colaborativamente o Apache em busca de novas falhas e imunizar todos os membros contra eles com apenas uma degradação de desempenho de 6% para cada membro.”, Self Healing with Application Communities, Michael E. Locasto et al.
  32. 32. Práticas de antifragilidade OODA, MVP, Design Sprints e Lean Change Management Fonte: RICHARDS, Chet. Boyd’s OODA Loop: It’s Not What You Think.
  33. 33. Práticas de antifragilidade 50% dos produtos do Google se originaram de pesquisas não estruturadas e não planejadas nos tempos livres dos funcionários (20% do tempo semanal). Adsense, sozinho, foi responsável por 25% da renda da Google O princípio da opcionalidade, de Taleb
  34. 34. Práticas de robustez e antifragilidade Continuous-* Continuous Software Engineering: A Roadmap and Agenda, Brian Fitzgerald e Klass JanStol
  35. 35. Práticas de antifragilidade Práticas de processo do SEMAT SEMAT Alphas Kernel Essence The Essence of Software Engineering: The SEMAT Kernel, Ivar Jacobson
  36. 36. Em busca de uma agenda que reconheça a complexidade em sistemas de software Estamos iniciando a descoberta de ideias, princípios e práticas que reconheçam e tratem a natureza orgânica de softwares e da engenharia de software.
  37. 37. Por mais divulgação e conhecimento de práticas que atendam a propriedades de sistemas complexos e de antifragilidade Estresse contínuo Redundância Sem transferência de risco (skin in the game) Descentralização e regras locais Emergence (de baixo para cima)
  38. 38. Práticas de Engenharia de Software Robustas e Antifrágeis para Ambientes Complexos Marco Mendes Obrigado! https://www.linkedin.com/in/marcomendes/

×