Gostei bastante da pergunta que o Plentz sentiu falta no post Teste: você é um desenvolvedor ágil?. Como não consegui decidir se ela deveria entrar lista, resolvi escrever um pouco sobre o assunto antes.
Acredito que o ato de pensar antes de se programar por si só não garante um bom código como resultado. Muitos ficam pensando horas antes de escrever a primeira linha de código inútil, enquanto outros conseguem sair programando e gerar ótimos resultados sem mal saber do que o problema tratava no início.
Um dos objetivos do desenvolvimento ágil é obter feedback rápido para melhorar a solução continuamente. E assim como isso é feito através de entregas constantes do software para avaliação dos usuários, também deve ser possível fazê-lo enquanto se está programando.
Eu normalmente penso o suficiente para escrever a primeira especificação do problema na forma de código (teste), e a partir daí o raciocínio vai fluindo conforme novos testes vão surgindo. Não sei se esta é a melhor forma, mas pelo menos me permite criar um jogo mental de “perguntas e respostas” para o problema que estou tentando solucionar. Eu parto de uma pergunta (mesmo que já tenha outras na cabeça) e procuro a resposta. Durante esta procura novas perguntas vão surgindo e desta forma que o programa evolui.
A questão é que isto só funciona quando posso me comunicar com alguém que possa me dar mais informações sobre o problema quando as dúvidas aparecerem. Vale lembrar que dúvidas aparecem por mais que se tente pensar antes de programar. Então isto significa que comunicação, assim como feedback, é vital para desenvolver um software.
Em resumo, ao meu ver o que importa não é o quanto se pensa antes de programar, e sim a quantidade de informação disponível antes de se começar. E no caso de desenvolvimento ágil creio que uma das vantagens é justamente não se exigir um detalhamento completo do problema antes do início da sua solução. São os “baby steps” que garantem que o desenvolvimento vai caminhar na direção certa.
Talvez a pergunta fique melhor assim: “Você busca o mínimo de informação antes de programar?”. Porque quem não pensa antes de sair programando provavelmente vai fazer besteira, mas quem pensa demais também pode estar perdendo um tempo precioso…