O documento discute práticas de engenharia de software frágeis e antifrágeis. Apresenta como práticas frágeis transferem riscos e iludem a complexidade, enquanto práticas antifrágeis promovem estresse contínuo, redundância e descentralização para lidar melhor com ambientes complexos. Defende uma agenda de engenharia de software que reconheça a natureza orgânica de softwares.
Leds zeppellin infraestrutura de apoio ao desenvolvimento
Praticas robustas e antifrageis de engenharia de software
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. 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. O nascimento da engenharia de software em 1968
nas históricas conferências da OTAN
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. Em 2001, surge o Agile Manifesto como
mais uma resposta a mais uma crise na
engenharia de software.
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
8. Sistemas de software e a
engenharia de software
tem sido desenhados de
forma mecanicista.
9. Os efeitos práticos
tem sido a criação
de processos, sistemas
e resultados frágeis.
Cuidado
Frágil
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. •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
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.
16. 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
17. 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
19. 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!
20. 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)
21. 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
22. 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
23. 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
24. 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
25. 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.
26. 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
27. 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
28. 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.
29. 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
30. 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.
31. 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.
32. 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.
33. 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.
34. 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
35. Práticas de robustez e antifragilidade
Continuous-*
Continuous Software Engineering: A Roadmap and Agenda, Brian Fitzgerald e Klass JanStol
36. Práticas de antifragilidade
Práticas de processo do SEMAT
SEMAT
Alphas
Kernel
Essence
The Essence of Software Engineering: The SEMAT Kernel, Ivar Jacobson
37. 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.
38. 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)
39. Práticas de Engenharia de Software Robustas e Antifrágeis
para Ambientes Complexos
Marco Mendes
Obrigado!
https://www.linkedin.com/in/marcomendes/