Porque as metodologias de desenvolvimento de software falham?

Existe um interessante paradoxo, enquanto os softwares aumentam a produtividade dos negócios o processo de desenvolvimento de software é ineficiente. Os projetos de software são famosos por não serem entregues no prazo, no custo e na qualidade planejada. Os CFO (Chief Financial Officer) já planejam gastos acima dos planejados na certeza que não serão entregues conforme planejado. Desde a década de 60 do século passado estudam-se formas de aumentar a previsibilidade e melhorar a eficiência no desenvolvimento de software. A engenharia de software criou vários métodos de gerenciamento de projetos específicos e metodologias, reunindo vários métodos, são aplicadas no desenvolvimento de software. Entretanto, parece que toda a teoria e esforço de implantação de práticas de desenvolvimento não conseguem resolver o problema.

Mas afinal, porque falham? Vários são os motivos, entre eles capacitação da equipe de desenvolvedores, falha na análise de requisitos, exigência de prazos não realistas, orçamentos não compatíveis com o projeto, submissão da área de TI, pouca habilidade de negociação da TI e, principalmente, a falta de entendimento que desenvolver softwares é uma atividade de criação, similar ao desenvolvimento de um novo produto. Entretanto, a percepção de muitos é que desenvolver um software é algo repetitivo e procedural.

Podemos comparar o desenvolvimento de software com o desenvolvimento de um novo carro. A primeira fase é a definição dos requisitos e restrições desse novo carro para atender a um determinado mercado, definido por estilo, faixa de preço e aproveitamento de módulos existentes. A segunda fase é construir protótipos para materializar a ideia. Esses protótipos são submetidos a várias avaliações e incorporadas sugestões de especialistas. A fase seguinte o desenvolvimento do produto, incluindo o envolvimento dos fornecedores. Montam-se alguns carros, os cabeça de série, para testes e homologação. Depois, modifica-se a linha de montagem para a produção em massa dos carros. O setor de qualidade avalia constantemente o desempenho dos carros para propor melhorias e aumento de produtividade.

A diferença é que exigido das áreas de TI o início do desenvolvimento a partir de um primeiro levantamento de requisitos. Os ajustes são realizados durante as fases de desenho e codificação, tornando imprevisível seu custo e prazo de entrega, mesmo em condições apropriadas.

Outra ineficiência é não reutilização de módulos de softwares desenvolvidos em outros projetos em novos projetos. Primeiro porque não existe um controle centralizado do que foi desenvolvido e segundo porque cada projeto é desenvolvido de isoladamente, muitas vezes contratando-se empresas externas que não conhecem os ativos de softwares já desenvolvidos.

Ainda existe uma desconexão entre as áreas de desenvolvimento de software e as áreas de operações para ajustar os ambientes de produção aos novos produtos. Acredito que a adoção de práticas e softwares de DevOps ajudem nessa integração, porém não resolvem os desafios do desenvolvimento de software.

Parece simples, vamos adotar uma metodologia de desenvolvimento de software similar ao processo de desenvolvimento de um carro. Afinal, isso é engenharia.

Entretanto, o grande desafio para a implantação de uma nova metodologia de desenvolvimento de software é a mudança cultural da organização, tanto das áreas de negócios quanto das áreas de TI.

Não adianta contratar uma empresa de consultoria e softwares caríssimos para implantar uma metodologia sem antes promover uma transformação cultural na empresa. A melhor forma é abrir uma ampla discussão interna, incluindo a alta direção e os gestores das áreas de negócios, e definir qual a melhor metodologia a ser adotada. A partir daí, construir a sua própria metodologia de desenvolvimento de software associando seus métodos e práticas aos frameworks de governança de TI para suportar as auditorias de sistemas.