Nos últimos anos por força da minha profissão e do meu interesse pessoal tenho participado de vários fóruns, artigos, pesquisas, livros, palestras e conversas com praticantes que se utilizam de metodologias ágeis de desenvolvimento. Uma conversa recorrente é o quanto uma determinada equipe é ágil nos softwares que desenvolve. Não é incomum uma equipe se achar mais ágil que a outra, seja porque adota mais ou menos princípios e práticas ágeis que a outra.

agil

Há mais de dez anos envolvido com o desenvolvimento de software em diferentes plataformas operacionais, como VB/ASP, .NET, JAVA e o velho e bom COBOL, já presenciei muitos projetos bem sucedidos e muitos projetos bem fracassados! O pior que esses fracassaram na maioria das vezes, não por fatores novos ou desconhecidos, mas pelo uso das piores práticas para o desenvolvimento de software.

Mas já há algum tempo nossos problemas como o desenvolvimento de software acabaram… Temos as poderosas, inabaláveis e mega “power” metodologias ágeis! Para isso basta comprar um bom livro, ou fazer um bom curso, ou ainda ler um punhado de artigos da internet e bingo! Agora tu és ágil! Será que só isso basta?

Vamos conhecer e refletir sobre quais são os princípios, ou seja, as linhas mestras, dentro das quais o processo de desenvolvimento XP, uma das metodologias ágeis mais praticadas no mercado, foi concebido e que regem a agilidade no desenvolvimento de software (adaptado de Extreme Programming: Embrance Change, Second Edition; Kent Beck, Cynthia Andres; 2004). A partir desses princípios foram estabelecidas as práticas do XP.

Esses princípios foram  divididos por mim em dois grandes conjuntos :

1. Princípios para o ser humano e suas necessidades e relações

1.1 Humanidade software é desenvolvido por pessoas com necessidades particularizadas que precisam ser atendidas. Para que as pessoas possam se tornarem bons profissionais deve-se considerar os tópicos abaixo:

· Não podem temer a perda do seu emprego, com as ameaças que isso traz

· Ter a oportunidade de demonstrar sua capacidade de contribuir para a sociedade através do seu trabalho

· Identificar-se com um grupo no qual ele é reconhecido e possa contribuir com seus objetivos

· Poder expandir seus conhecimentos e perspectivas

· Compreender e ser compreendido profundamente pelos outros

1.2 Benefício mútuo – Qualquer atividade realizada deve trazer algum tipo de benefício a todos os envolvidos. Se algo me beneficiará agora, então será mais fácil aceitar fazer alguma coisa para ajudar os outros, tanto agora quanto no futuro.

1.3 Diversidade – Equipes de desenvolvimento necessitam de diversidade: diferentes capacidades, atitudes, formas diferentes de pensar nos problemas e implementar soluções

1.4 Reflexão  – As equipes de desenvolvimento devem pensar sobre como ele está trabalhando e porque está trabalhando. Deve analisar seus sucessos e fracassos em vez de esconder seus erros. Ninguém chega a excelência por acaso. Reflexão ocorre após uma ação. Aprender é a reflexão sobre uma ação.

1.5 Oportunidades – Os problemas devem ser visto como oportunidade para mudança. A excelência é obtida quando os problemas se tornam oportunidades de aprendizado e melhorias, e não apenas são superados pela necessidade de sobrevivência.

1.6 Falhas – Cometer uma falha é muitas vezes o único caminho para se adquirir conhecimento. Se dê o direito de falhar quando não souber qual a melhor solução para um determinado problema. Muitas vezes é melhor falhar do que apenas ficar discutindo infinitamente as possíveis soluções de um problema. Entretanto isso não deve servir como justificativa para falhas que você conhecia as melhores soluções.

1.7 Aceitação da responsabilidade – Responsabilidade não deve ser atribuída, deve ser aceita. Quando alguém lhe atribui uma responsabilidade, só você pode decidir se aceita ou não essa responsabilidade

2. Princípios técnicos

2.1 Economia – O desenvolvimento de software deve reconhecer os riscos econômicos associados a um projeto e certificar-se que o que está sendo feito, agrega valor ao negócio, e atende a objetivos e necessidades desse negócio. Evite o vazio de apenas um “sucesso técnico”

2.2 Auto-semelhança – Quando a natureza encontra uma forma que funciona, ela a usa em todos os lugares que puder. Tente copiar a estrutura de uma solução bem sucedida em novos contextos, ainda que em diferentes escalas.

2.3 Melhoria- No desenvolvimento de software perfeição é um verbo e não um adjetivo! Não existe processo, projeto ou estórias perfeitas, entretanto, sempre podemos aperfeiçoar os processos, o projeto e as estórias.

2.4 Fluxo – Disponibilizar módulos funcionais de  software semanalmente com valor agregado para o cliente

2.5 Redundância – Problemas críticos no desenvolvimento podem ter mais de uma solução. Ainda que uma solução falhe, a outra poderá prevenir um desastre. Ainda que a redundância possa parecer um desperdício, cuidado para não remover redundância que serve a um propósito válido.

2.6 Qualidade – A qualidade não afeta a velocidade dos projetos e não é uma variável de controle de projetos.

2.7 Passos pequenos – O que é o mínimo que pode ser feito reconhecidamente na direção correta? Em condições adequadas, as equipes podem fazer diversos pequenos passos rapidamente, que dará a sensação que estão correndo.

Em poucas palavras os princípios que norteiam um desenvolvimento ágil de software são:

1) Pessoas : Humanização no trabalho; política do ganha-ganha; diversidade e reflexão nas equipes; enxergar problemas como oportunidades; se errar, aprender com os erros; assumir responsabilidades

2) Técnicos : Agregar valor ao negócio; reutilização de soluções de sucesso; melhoria integração e liberação de software de forma contínua; tolerância à falhas; qualidade e um passo após o outro.

Agora que os princípios da agilidade segundo o XP lhe foram apresentados, quais deles fazem mais sentido para a sua equipe de desenvolvimento, considerando-se os aspectos culturais da sua empresa, segmento de atuação e necessidades dos seus clientes?

Todos? Apenas alguns? Os destinados às pessoas ou os técnicos?  Provavelmente alguns ou muitos desses princípios você já os tem adotado na sua equipe.

Ser ágil não significa necessariamente atender a todos os princípios elencados acima, mas sim entender a essência de cada um e, eventualmente acrescentar novos princípios que tenham significado para sua realidade e buscar as práticas que os realizem. Não acredite em uma receita pronta e milagrosa para todos os males. Ninguém melhor que você e sua equipe para saber por onde ir e como ir para entregar valor para o seu cliente através do software desenvolvido, criar um ambiente agradável e estimulante de trabalho e que valorize as pessoas.

Adapte, transforme, ajuste, customize, adéqüe. Não consuma algo pronto em se tratando de processo de desenvolvimento de software. Certamente não existem duas equipes ágeis iguais. Seja ágil, seja único.

Você e sua equipe são ágeis?