Adaptive Software Development: Compreendendo sua Estrutura
Que a agilidade surgiu antes do Manifesto Ágil, isso nós já sabemos? Mas você sabe quais foram as metodologias que deram origem ao documento? Já falamos de Extreme Programming e Scrum, hoje falaremos sobre o Adaptive Software Development.
Existem várias metodologias que podem ajudar durante o processo de desenvolvimento de software, mas diferente de todos os outros existentes no passado, o Adaptive Software Development é focado em sistemas complexos.
Neste artigo você verá o que é o ASD, qual sua história e criadores, além de suas características, ciclo de vida e as vantagens e desvantagens de utilizá-lo.
O que é o Adaptive Software Development?
O Adaptive Software Development (Desenvolvimento de Software Adaptativo), ou apenas ASD, é uma metodologia de desenvolvimento de software com base em um ciclo de aprendizado colaborativo, sendo uma das primeiras metodologias ágeis.
Esse modelo de desenvolvimento é focado na construção de sistemas complexos, estimulando a colaboração humana e a auto-organização dos times para a solução de problemas, através de ciclos curtos e na constante prototipação.
Sendo baseado em um ciclo iterativo composto por três fases: especulação, colaboração e aprendizagem, traz uma ideia de que o aprendizado e a adaptação é o principal objetivo do projeto, até mesmo contando com práticas ágeis que já vimos em outros frameworks e métodos ágeis.
Foi no início de 1990 que Jim Highsmith e Sam Bayer, uma dupla de gerentes de projetos, iniciaram o desenvolvimento e a utilização deste modelo, mas foi só em 2000 que Highsmith publicou o livro “Adaptive Software Development: A Collaborative Approach to Manage Complex Systems”, no qual apresenta a metodologia ASD em detalhes, além de abordar a filosofia e a teoria por trás dela.
Inclusive, os dois gerentes de projetos estiveram presentes em 2001 durante a criação do Manifesto Ágil, e foram muito importantes para o documento e para os demais processos de desenvolvimento de software ágil que surgiram após isso.
No Adaptive Software Development os times trabalham de acordo com 4 valores principais: confiança mútua, respeito mútuo, participação mútua e o compromisso mútuo.
Apesar de se definir como uma estrutura de conceitos, práticas e diretrizes, o ASD defende alguns papéis: o Patrocinador Executivo, que é o principal ponto focal de negócios e é basicamente um Product Owner, a Equipe Principal com as pessoas que possuem as habilidades necessárias para o desenvolvimento e o Gestor de Projetos, que será o ponto focal para todas as atividades que serão realizadas e pela liderança do time.
É importante saber que o Adaptive Software Development é caracterizado por seis propriedades:
- Orientado a Missão / Mission Driven: Para cada iteração do ciclo de desenvolvimento é necessário que a equipe tenha um objetivo, ou missão, definido para que as decisões sejam tomadas de acordo, podendo mudar ao longo do projeto.
- Baseado em Componentes / Component-Based: Em vez de desenvolver um sistema completo, a equipe irá desenvolver e entregar pequenas partes, de forma que o cliente receba mais valor no curto prazo e ofereça feedbacks sobre a qualidade do produto.
- Iterativo / Iterative: As equipes trabalham com pequenos ciclos, ou iterações, de desenvolvimento, no qual irão trabalhar com o foco na evolução do produto a curto prazo.
- Períodos Fechados / Time Boxed: Todas as atividades, sejam elas de execução ou de cerimônias, possuem um time boxed definido pelos times antes mesmo do início do projeto, ou seja, existe um prazo máximo que as entregas devem ser realizadas.
- Orientado a Riscos / Risk Driven: Todos os itens que são considerados como alto risco possuem o seu desenvolvimento priorizado pela equipe, os seus membros sempre estão analisando e avaliando os riscos de todas as tarefas.
- Tolerante á Mudanças / Change Tolerant: As mudanças são frequentes e as equipes sempre estão buscando e avaliando os melhores pontos as serem mudados e melhorados, é sempre bom estar pronto para se adaptar do que controlar o que está sendo feito.
Ciclo de Vida do ASD
Apesar de parecer algo complexo o ASD é composto por um ciclo de apenas 3 fases:
1) Especular: Essa fase é composta pela iniciação do projeto, no qual é estabelecido os principais objetivos e metas, escopo, requisitos e o planejamento das atividades que serão realizadas.
Durante essa fase ainda pode ser realizado atividades de observação e pesquisa, com o intuito de questionar se realmente faz sentido continuar o desenvolvimento daquele software.
Na prática a especulação é dividida em duas partes: a primeira é a iniciação do projeto, onde é criado a declaração da missão e os requisitos, além das entregas comuns de gerenciamento de projetos.
A segunda etapa é o planejamento adaptativo do projeto, decidindo o prazo final de entrega, a quantidade de iterações ou ciclos, uma lista inicial de tarefas e também um objetivo para cada ciclo.
Apesar de manter o nome planejamento fora do ciclo e utilizar o termo “especular”, as equipes não abandona essa atividade pois entendem que o mínimo deve ser planejado, focando sempre na exploração e experimentação.
2) Colaborar: Essa segunda fase ocorre o desenvolvimento do software, além das práticas de de levantamento de necessidades, especificação de requisitos e gestão de projetos, ou seja, tudo aquilo que é necessário para o software estar em funcionamento.
O nome colaboração é devido ao objetivo de todos os membros dos times trabalharem de forma colaborativa para o desenvolvimento do produto, principalmente com a ajuda dos clientes e qualquer pessoa que possa estar envolvida no projeto.
Durante a fase de desenvolvimento todo o trabalho é dividido em ciclos, onde cada um deles possui uma entrega de valor aos clientes. Essa fase é divida em ciclos devido a alta complexidade do software, as entregas iterativas e incrementais fazem com que essa complexidade se reduza e que os times consigam entregar valor a todo momento.
3) Aprender: O nome desta última fase já deixa claro qual é o objetivo, organizar tudo aquilo que foi aprendido durante as iterações, basicamente como uma Retrospectiva do Scrum, onde o time irá verificar o que foi bom e o que foi ruim para que possam criar planos de ação de melhoria.
Os times devem aprimorar os seus conhecimentos constantemente através de práticas como revisões técnicas, retrospectivas ou lições aprendidas de projetos e grupos de foco do cliente, sendo que o objetivo deve ser aprender o suficiente com pequenos erros e não através de grandes riscos que colocam o projeto em dúvida.
Outro ponto importante que pode ajudar os times durante um processo de aprendizagem é o feedback dos usuários finais do software, geralmente eles são os mais sinceros e podem te ajudar a evoluir o seu produto, procure por pesquisas de satisfação, entrevistas ou outros métodos que possam te ajudar nesta questão.
Observe que com o ciclo Especular-Colaborar-Aprender, temos uma estrutura totalmente adaptativa e que nos mostra as seguintes situações:
- Não é possível colaborar sem aprender ou aprender sem colaborador.
- Não é possível especular sem aprender ou aprender sem especular.
- Não é possível especular sem colaborar ou colaborar sem especular.
Vantagens x Desvantagens
Utilizar o ASD traz grandes vantagens durante o desenvolvimento de software, como:
- Promove o trabalho em equipe buscando engajamento e colaboração.
- Projetado para o desenvolvimento de softwares complexos.
- O modelo de ciclos curtos de ajuda a evitar e aprender com os erros.
- Incentiva a transparência entre o time de desenvolvimento e o cliente.
- É orientado a resultados, durante todos os ciclos os usuários finais aplicam feedbacks sobre as entregas.
Como nem tudo é o que queremos, existem algumas desvantagens:
- Não é tão simples ter um alto envolvimento do usuário final em todos os ciclos.
- A alta quantidade de testes aumentam os custos do produto.
- As diversas mudanças no projeto resultam em um baixo nível de documentação.
- A missão de uma iteração nem sempre irá entregar valor como planejado.
- Este modelo de desenvolvimento exige uma equipe experiente e com uma mentalidade adaptativa.
Por mais que pareça algo muito complicado de aplicar na prática, o Adaptive Software Development é algo que você pode aplicar aos poucos e ir aprimorando o seu ciclo de desenvolvimento.
E aí, você já trabalhou com o ASD? Me conta aqui nos comentários 😉
Se preferir outro lugar, você consegue falar comigo também pelo Instagram ou pelo LinkedIn.