Metodologias Ágeis

Metodologias ágeis buscam prover um modo de trabalho para o desenvolvimento de software que ataca os riscos mais comuns desta atividade. Este modo é baseado em um conjunto de valores e princípios que, ao contrário de outras metodologias mais pesadas e formais, valorizam garantir a satisfação do usuário através de ciclos curtos de desenvolvimento, chamados de iterações, e da interação freqüente dos desenvolvedores e outros atores envolvidos no processo.

Garantindo que a cada iteração tenha-se uma aplicação usável, os métodos ágeis atacam os riscos mais comuns dos métodos que envolvem um grande esforço de planejamento e especificação antes de se iniciar o desenvolvimento propriamente dito. A comunicação constante e em tempo real dos desenvolvedores (preferencialmente de maneira presencial) ataca os problemas de comunicação e entendimento e, ao mesmo tempo, diminuem a necessidade de documentação formal e extensiva. A cada ciclo, novos requisitos são atendidos e novas funcionalidades são adicionadas ao produto. Desta maneira projetos de todos os portes podem ser desenvolvidos com os métodos ágeis.

Os métodos ágeis têm seus valores e princípios fundamentais descritos no Manifesto para o Desenvolvimento Ágil de Software. O Manifesto Ágil (http://agilemanifesto.org) foi rascunhado em Fevereiro de 2001 por 17 desenvolvedores, dentre eles alguns dos maiores defensores destas metodologias como Kent Beck, Martin Fowler e Ken Schwaber. O manifesto declara 4 valores e 12 princípios:

Valores do Manifesto Ágil

  • Indivíduos e interações sobre processos e ferramentas;
  • Software funcional sobre documentação extensiva;
  • Colaboração com o cliente sobre a negociação de contratos;
  • Responder a mudanças sobre seguir um plano.

Princípios do Manifesto Ágil

  • A maior prioridade é satisfazer o cliente através de entregas rápidas e contínuas de software de valor.
  • Abrace requerimentos que mudam, mesmo em estagio avançado do desenvolvimento.
  • Processos ágeis usam as mudanças para a vantagem competitiva do cliente.
  • Entregue software funcional freqüentemente, em algumas semanas até alguns meses, com preferência para entregas mais rápidas.
  • Equipes de desenvolvimento e de negócios devem trabalhar em conjunto diariamente durante a duração do projeto.
  • Construa projetos ao redor de indivíduos motivados. Dê a eles o ambiente e suporte que eles precisam e confie neles para ter o trabalho feito.
  • O método mais eficiente de propagar informações para e dentro do time de desenvolvimento é a conversação cara-a-cara.
  • Software funcional é a principal medida de progresso.
  • Processos ágeis promovem o desenvolvimento sustentável. Os patrocinadores, desenvolvedores e usuários devem poder manter um ritmo indefinidamente.
  • Atenção contínua para a excelência técnica e para um bom design/arquitetura aumentam a agilidade.
  • Simplicidade – a arte de maximizar a quantidade de trabalho não realizado – é essencial.
  • As melhores arquiteturas, requerimentos e designs emergem de times auto-organizados.
  • Em intervalos regulares, o time reflete sobre como se tornar mais efetivo e, então, ajusta seu comportamento adequadamente.

Tendo trabalhado tanto com os métodos mais tradicionais (planejados e em cascata) e com métodos ágeis como Scrum, tenho clareza de que os métodos ágeis oferecem uma vantagem sem comparação para aplicações onde os requisitos mudam constantemente como é o caso das aplicações web.

Porém, é fundamental que toda a organização abrace a nova maneira de se fazer software em sua plenitude, pois é grande o risco de se acabar com um processo disfuncional caso isto não aconteça. Outro ponto que temos observado é que o simples uso de uma metodologia ágil como Scrum, no caso, não traz todo o potencial esperado para o trabalho.

É fundamental que também se adote conceitos de engenharia de software adequados ao trabalho em questão. No nosso caso, temos adotado, além do Scrum, alguns conceitos de Programação Extrema (http://www.extremeprogramming.org) (XP ou Extreme Programming) como Desenvolvimento Guiado por Testes (TDD ou Test Driven Development), Programação em Pares (Pair Programming) e Integração Contínua (Continuous Integration).

Mais recentemente, na Abril Digital, onde temos realizados projetos de maior escala e com alta interdependência, notamos que a aplicação de metodologias como Scrum puramente, não atende às necessidades intrínsecas de uma maior coordenação dos projetos e de uma maior escala. Nestes casos é possível continuar com o desenvolvimento ágil, com a adoção de outras técnicas para endereçar estes pontos. Este desafio e algumas sugestões de como atacá-lo foi apresentado e discutido por Dean Leffingwell no Agile 2009, o maior evento do mundo focado em metodologias ágeis.

Porém, o maior risco, em minha opinião, para os métodos ágeis é o de abraçá-los parcialmente ou com a atitude errada. É fundamental o engajamento de toda a organização, o contato constante da equipe e a presença do cliente ou seu representante (o "Product Owner" no caso do Scrum). Por outro lado, quando aplicado corretamente os métodos ágeis trazem, gradativamente, o desenvolvimento sustentável e eficiente. Por fim, nunca confunda pressa com eficiência.