Dos livros pro software: Antifrágil

Em 2012 foi publicado o livro “Antifrágil: coisas que se beneficiam com o caos”, por Nassim Nicholas Taleb. Neste livro ele explorou o conceito da “antifragilidade”, e nos próximos parágrafos tentarei trazer esse conceito pro mundo do desenvolvimento de software.

Mas o que é ser antifrágil? O conceito de fragilidade é natural para a maioria das pessoas. A fragilidade de um sistema é uma propriedade que mostra o comportamento desse sistema quando submetido a pressões externas. Um sistema frágil é o sistema que quebra quando submetido a pressão externa. Pois bem, sempre pensamos que o inverso de um sistema frágil fosse um sistema robusto ou resiliente, ou seja, que não quebra quando submetido a pressão, mas existem outros tipos de sistemas, que são os sistemas antifrágeis.

Músculos são exemplos de sistemas antifrágeis. Foto de Edgar Chaparro em Unsplash

Um sistema antifrágil cresce e fica ainda mais forte ao sofrer pressão. Para ilustrarmos, podemos recorrer à natureza. Uma muda de árvore é frágil; ao sofrer pressão, ela se quebra e morre. Uma árvore adulta é muito mais robusta e resiliente, resistindo ou se regenerando. Mas se considerarmos uma floresta completa, ela pode ser vista como um sistema antifrágil. Ao sofrer uma pequena queimada corriqueira, os elementos inflamáveis da floresta são consumidos, evitando incêndios catastróficos, o material orgânico é reabsorvido e a floresta cresce. Outros sistema antifrágil é o nosso sistema muscular, que ao sofrer leves escoriações num treino de academia, consegue se regenerar e se fortalecer ainda mais.

O autor mostra que sistemas antifrágeis se beneficiam em ambientes caóticos por abraçarem esse caos, assumir riscos e se aperfeiçoar com cada contratempo enfrentado. Ao tentar adiar uma crise e se esquivar de mudanças, acabamos camuflando vulnerabilidades, perdendo a oportunidade de aprender e nos aperfeiçoarmos.

A antifragilidade no mundo do desenvolvimento de software

Podemos trazer o conceito da antifragilidade a diversos escopos das atividades de desenvolvimento de software. Começaremos explorando os detalhes mais intrínsecos da atividade.

Técnicas de Scrum e Extreme Programming são antifrágeis. Foto de True Agency em Unsplash

O software frágil é fácil de ser definido. Todos já tivemos a oportunidade de usar um software frágil, muitos podem enumerar softwares frágeis de cor e alguns de nós somos responsáveis por inserir fragilidades em softwares. O software frágil é instável, aparenta funcionar, porém apresentará falhas ao primeiro problema de conexão com a internet, alteração de tamanho de tela ou interação inesperada do usuário.

Com o tempo foram criadas práticas de desenvolvimento de software para gerar softwares mais robustos. Revisões de código por arquitetos de software, padronização de código e projeto, guidelines de melhores práticas, diagramas UML, ferramentas de análise estática. Muitas práticas foram desenvolvidas para evitar que um software venha a apresentar fragilidades. Entretanto, o desenvolvimento de software é um problema muito complexo, a imprevisibilidade é inerente ao sistema que, por conta disso, não consegue ser perfeitamente robusto.

A solução é abraçar a antifragilidade, que está muito ligada com o Ágil em desenvolvimento de software. Times que abraçam o caos conseguem desenvolver software antifrágil, usando técnicas como o TDD, testes automatizados, ferramentas de coleta remota de registro de falhas, refatoração, ambientes de teste e staging. É esperado que falhas aconteçam, e a cada falha, novos testes são produzidos, a arquitetura é retrabalhada e o software fica mais resistente.

Times e líderes antifrágeis

Um time antifrágil é um time que esteja preparado para encarar desafios, falhar e aprender. Os membros do time devem ter perfis que demonstrem autonomia e motivação

Pessoas motivadas e autônomas são importantes em times antifrágeis. Foto de NeONBRAND em Unsplash

Para explorar as características antifrágeis dos times, fortalecendo os indivíduos e conseguindo melhores resultados, é importante que cada líder espalhe a autonomia aos seus liderados. Na mesma analogia dos músculos, que são sistemas antifrágeis, é importante que as pessoas tentem, errem e cresçam. Líderes que não delegam responsabilidades falham mais, desmotivam seus liderados e deixam de explorar oportunidades. O bom líder traz o crescimento baseado no apoio de todos os seus liderados.

Culturas antifrágeis

É importante que os conceitos de tolerância a falhas, que são o combustível para a antifragilidade, estejam embutidos na cultura do time. A empresa deve estar aberta e preparada para abraçar mudanças, considerar pontos de possíveis erros e aprender com eles para evoluir.

Através das falhas podemos nos fortalecer. Foto de Heather Ford em Unsplash

Podemos nos basear nos pilares da transparência, autonomia e vulnerabilidade. A informação deve ser sempre divulgada, para que todos tenham oportunidades de crescer e contribuir, e para isso as lideranças precisam se lembrar de que não estão sozinhos, e contar com os seus liderados para que eles cresçam e comecem as transformações positivas no grupo, lembrando que todos estão sujeitos a falhas, inclusive os líderes, e é através delas que podemos nos fortalecer e crescer.

Podemos lidar com ameaças, oportunidades e instabilidade interna nos aproveitando da agilidade interna das equipes e de redundâncias, que devem existir tanto para pessoal, quanto para execução e expectativas (o plano B para quando um funcionário chave sair, ou quando um objetivo ambicioso falhar, ou ainda um resultado não alcançar uma expectativa externa).


Esse texto foi inspirado no livro Antifrágil: Coisas que se beneficiam com o caos, de Nassim Nicholas Taleb; na apresentação Culturas eficazes para ambientes dinâmicos de Rodrigo Schmidt e em minhas experiências no mundo de desenvolvimento de software.

Vamos continuar essa discussão nos comentários abaixo?