Metodologia agil
A prática do desenvolvimento de software é uma atividade caótica em sua maior parte, normalmente caracterizada pela expressão "codificar e consertar". O software é escrito sem um plano definido e o projeto do sistema é repleto de várias decisões de curto prazo. Isso funciona muito bem se o sistema é pequeno - mas à medida que o sistema cresce, torna-se cada vez mais difícil adicionar novos recursos a ele. Defeitos subseqüentes se tornam cada vez mais dominantes e cada vez mais difíceis de serem eliminados. Um sinal típico de um sistema desse tipo é uma longa fase de testes depois que o sistema está "pronto". Esta longa fase de testes entra em confronto direto com o cronograma, pois testes e depuração são atividades cujos tempos são impossíveis de serem estimados.
Nós convivemos com este estilo de desenvolvimento há muito tempo, mas também temos uma alternativa há muito tempo: Metodologia. Metodologias impõem um processo disciplinado no desenvolvimento de software, com o objetivo de torná-lo mais previsível e mais eficiente. Elas fazem isso desenvolvendo um processo detalhado com uma forte ênfase em planejamento e inspirado em outras disciplinas de engenharia - por isso eu tendo a referir-me a elas como metodologias de engenharia.
Metodologias de engenharia estão disponíveis há muito tempo. Elas não têm sido percebidas como sendo particularmente bem-sucedidas. Elas têm sido notadas menos ainda por serem populares. A crítica mais freqüente é que estas metodologias são burocráticas. Há tanta coisa a se fazer para seguir a metodologia que o todo o ritmo de desenvolvimento fica mais lento.
Como uma reação a tais metodologias, um novo grupo delas surgiu nos últimos anos. Durante algum tempo elas foram conhecidas como metodologias leves, mas agora o termo mais aceito é metodologia ágil. Para muitas pessoas o apelo das metodologias ágeis é a reação delas à burocracia das metodologias monumentais. Estas novas metodologias tentam criar um