sexta-feira, 16 de maio de 2008

Desenvolver software ou construir casas?

Diversas vezes que somos confrontados com esta questão:

    Porque razão desenvolver software não é um processo previsível e controlado como outras áreas de engenharia, como construção civil, por exemplo?

A resposta comum a esta questão passa normalmente por tentativas de mecanizar, burocratizar, medir, controlar o processo de desenvolvimento. Passa por adoptar metodologias monstruosas que acrescentam ao desenvolvimento uma quantidade de processos muitas vezes supérfluos e sem qualquer valor acrescentado. Na maior parte dos casos inclusive acabamos por nos esquecer que o principal resultado, aquele pelo qual o cliente paga que é:… código a funcionar. O principal produto num projecto de desenvolvimento de um portal, por exemplo, não é uma lista de casos de uso nem diagramas de sequência nem sequer gráficos de GANT! O principal produto é o portal a FUNCIONAR!

Ora o cenário comum é inundar as equipas de desenvolvimento com processos de qualidade burocráticos, numa tentativa de "controlar" e "tornar previsível" o processo de desenvolvimento. Em diversos casos que assisti até hoje, normalmente o resultado é… nenhum. O desenvolvimento é feito da mesma forma e no final do dia ou da semana (ou mesmo do projecto), os programadores vão consumir tempo e dinheiro a escrever documentação que não vai ter qualquer utilização que não seja mostrar nas auditorias.

Não quero com isto dizer que a construção de uma aplicação deva ser feita sem qualquer controlo, mas sim que a documentação a criar deve ser a necessária para ajudar no desenvolvimento do produto. Consumir tempo a criar diagramas de sequencia depois do software estar desenvolvido é apenas perda de tempo. Ou é feito antes do desenvolvimento no intuito de se perceber o que se vai fazer e encontrar a melhor forma de o fazer ou é simplesmente perda de tempo.

Analisando o outro lado (que conheço muito pouco), quando se desenvolve um projecto de construção, os arquitectos e engenheiros têm um determinado conhecimento sobre os materiais que vão ser utilizados, o seu comportamento, a sua utilização, a sua assemblagem. Agora pergunto: qual é o domínio de um arquitecto de software (quando existe um) ou um chefe de projecto sobre as linguagens, plataformas, componentes ou protocolos que vão ser utilizados? Já para não falar que nas engenharias tradicionais, tanto as matérias primas como produto final é quase sempre algo materializável, palpável. O desenvolvimento de software é um processo criado na totalidade sobre abstracção. Posso ter uma aplicação que tenha algumas funcionalidades, mas não deixa de ser uma abstracção, bem diferente de uma parede, uma janela ou uma casa. Quer queiramos ou não, o desenvolvimento de software é sempre muito mais complexo e dificilmente quem desenha ou planeia tem domínio suficiente sobre a sua construção para que consiga prever o resultado na sua totalidade. O arquitecto pode não saber como se coloca um parapeito numa janela, mas existe um conhecimento adquirido de que isso é possível e além do mais, os materiais são físicos e pouco mutáveis. Em último caso com mais umas pancadas e a coisa vai ao sítio. Do outro lado quando se planeia uma comunicação entre dois sistemas não existe domínio concreto sobre os problemas que vão existir em garantir a comunicação. Vão aparecer problemas de protocolos, autenticações, localização, etc… que podem ser resolvidos em muito pouco tempo ou podem gerar perdas de dias ou semanas. Tal como o arquitecto coloca uma janela algures numa parede, para quem planeia uma aplicação é simples desenhar num diagrama uma seta que significa uma comunicação entre dois sistemas, mas o conhecimento que os ambos têm sobre a implementação concreta, a complexidade ou os problemas que irão surgir a meio não é de todo comparável.

Então em que ficamos? Simplesmente são processos demasiado distintos para que devam ser comparados. Quando me colocam esta questão contraponho:

"Então as obras de engenharia civil nunca falham, nunca excedem orçamentos e estão sempre terminadas na data estipulada?"

Sem comentários: