Ronaldo
Ronaldo Desenvolvedor, pai, cidadão do mundo.

A importância do processo

Desenvolver software não é apenas sobre linguagens ou tecnologia

A importância do processo

Desenvolvimento de software não é apenas sobre tecnologia, stacks ou linguagens. É algo muito mais amplo. E neste pequeno artigo tenho a intenção de dissertar sobre algo muito importante, mas normalmente negligenciado pelas empresas: o processo de desenvolvimento.

O que é desenvolvimento de software?

Antes de seguirmos adiante, é importante nivelarmos alguns conceitos sobre o desenvolvimento de software. Desenvolvimento de software não é sobre escrever código. Em verdade, escrever código é apenas uma pequena parte da coisa toda. Desenvolvimento de software é sobre gestão do aprendizado e conhecimento.

Todo projeto de software automatiza determinado aspecto de algum negócio. E este “aspecto” precisa ser aprendido, modelado e, finalmente, automatizado. Este processo de aprendizado, modelamento e automação é, basicamente, um processo de gestão do aprendizado e conhecimento. Não basta conhecer o stack de tecnologia. É preciso saber como o negócio funciona, quais são as restrições impostas, como as informações se relacionam e, finalmente, como transformar essas informações.

E é comum as empresas negligenciarem esta característica, focando-se apenas na manufatura da aplicação. Mas, porque a gestão do aprendizado e conhecimento é tão importante? Vou te responder com outra pergunta: já ouviu, alguma vez, o caso do “sujeito que sabia isso saiu da empresa”? Este é um sintoma clássico de um processo de desenvolvimento mal estruturado, que não e focado na gestão do aprendizado e do conhecimento.

Agora que definimos o que é desenvolvimento de software dentro desta ótica, vamos ao que viemos.

Porque o processo é importante?

O processo de desenvolvimento não só organiza a gestão do aprendizado e do conhecimento como também organiza a comunicação. A boa comunicação é essencial para que um projeto seja bem-sucedido. A comunicação evita duplicação de esforços, assunções incorretas sobre funcionalidades e por aí vai. E o processo de desenvolvimento bem estruturado permite que o time de desenvolvimento atue de forma eficaz e eficiente. Um processo ruim de desenvolvimento normalmente apresenta os seguintes sintomas:

  • má gestão de conhecimento, com o conhecimento concentrado em poucas pessoas.
  • requerimentos mal escritos, incompletos e com assunções incorretas ou imprecisas.
  • excesso de retrabalho.
  • pouca eficiência, exigindo que o time trabalhe em excesso para cumprimento dos prazos.
  • muita dívida técnica.
  • dificuldade na implementação de novas features.
  • excesso de defeitos.

Clean Code resolve isso? A resposta é um sonoro não. Não bastam apenas boas práticas de desenvolvimento. Sem um processo adequado como um todo, esqueça. O seu projeto estará condenado.

O processo de desenvolvimento organiza, inclusive, como as boas práticas precisam ser utilizadas, criando padrões que devem ser seguidos por todo o time. A ideia de “padrão” é uma maneira de facilitar a comunicação. Afinal, você se comunica, inclusive, através do código que escreve. É uma história que você está escrevendo para quem vier depois dar manutenção no seu código.

Não obstante, o processo também articula a comunicação com os stakeholders do projeto, organizando a captura de requerimentos, necessidades e entendendo melhor os anseios daqueles que estão interessados.

Por estes, e vários outros motivos, que um bom processo de desenvolvimento precisa ser cuidadosamente elaborado, mantido, atualizado e, quiçá, substituído se for o caso.

O processo é dinâmico

Não é porque você tem um processo de desenvolvimento estabelecido que ele presta. É importante que o processo precisa ser sempre criticado e revisto. E a motivação é simples: o negócio está sempre mudando. Quer um exemplo? A IBM começou fabricando máquinas de datilografia, depois construiu computadores e hoje é uma consultoria. Se o processo não acompanhar as mudanças do negócio, rapidamente ele se torna obsoleto, podendo ser a causa da falta de agilidade na operação de uma empresa.

Se o processo não serve mais, precisa ser imediatamente substituído. É preciso ter me mente que o processo evoluiu com a empresa, até chegar determinado momento no qual precisa ser substituído. Sim, caros amigos e amigas: estamos falando de ciclo de vida. Até mesmo o processo tem um ciclo de vida.

Evidenciar é diferente de burocratizar

Muita gente que mexe com gestão de projetos acaba criando ciclos intermináveis, burocráticos, que acabam por tornar o projeto ineficiente. É importante ter em mente que evidenciar, e registrar o trabalho é diferente de burocratizar. É preciso evidenciar o que está sendo feito de alguma maneira, de forma que o trabalho possa ser medido. Afinal, você precisa saber se o seu time está super ou sub-utilizado. Ambos os extremos são ruins. Se está super-utilizado, você tem um time cansado que comete erros cada vez mais frequentes. Se você tem um time sub-utilizado, este está consumindo recursos sem retornar ao projeto na mesma proporção, ou seja, é um time que gera prejuízo.

O registro é importante para que o conhecimento do projeto esteja disponível para todos. Porém, o registro precisa ser ágil o suficiente para que não tome tempo excessivo do projeto. Sim, haverá algum nível de burocracia. No entanto, é importante que esta burocracia seja não crie impactos negativos no andamento do projeto. E uma coisa importante: documentação também é um artefato a ser entregue, além do mero código.

Como exemplo de burocracia excessiva, em determinada empresa onde trabalhei havia um ciclo documentacional muito intenso, que fazia com que eu escrevesse no Word, em inglês, usando uma forma imperativa, tudo o que deveria ser feito. Era como programar no Word, para depois programar na linguagem de programação. O resultado era falta de agilidade na manufatura dos artefatos, o que criava um longo tempo entre o entendimento dos requerimentos e a entrega final, chegando a ser algo em torno de alguns meses.

E as boas práticas?

As famosas boas práticas de desenvolvimento são uma parte de todo o processo de desenvolvimento. Como disse antes, as boas práticas sem um bom processo não servem de muita coisa. Afinal, é possível que você utilize práticas diferentes de outros membros do projeto, criando conflitos na comunicação. Além disso, outros membros podem ignorar completamente as práticas utilizadas. O resultado é apenas um: aumento considerável da dívida técnica.

Conclusão

O processo de desenvolvimento de software é um conjunto de práticas e atividades que visam padronizar e gerenciar a comunicação, o aprendizado e o conhecimento de um projeto. Sem um bom processo estabelecido, a probabilidade do custo do projeto ultrapassar qualquer orçamento estabelecido é muito alta, quase uma certeza. Além disso, a ausência de um processo ou um processo mal-estabelecido, aumentam consideravelmente a dívida técnica, diminuindo a qualidade do produto sendo desenvolvimento.