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
equilíbrio entre nenhum processo e muito processo, provendo apenas o
suficiente de processo para obter um retorno razoável.
O resultado disso tudo é que os métodos ágeis têm algumas mudanças de
ênfase significativas em relação aos métodos de engenharia. A diferença mais
evidente é que metodologias ágeis são menos centradas em documentação,
normalmente enfatizando uma quantidade menor de documentos para uma
dada tarefa. De várias maneiras, elas são mais voltadas ao código-fonte do
programa: seguindo um caminho que diz que a parte-chave da documentação
é o próprio código-fonte.Fonte: Martin Fowler
