quarta-feira, 15 de setembro de 2010

Dev@SrNimbus: Modelar x Estimar

(Eu vou juntar os posts “Dev@SrNimbus” depois em algum lugar, mas estou encontrando algumas “verdades quase evidentes” que é o tipo de coisa que vale a pena registrar. A verdade quase evidente é aquela que todo mundo, após lê-la, diz “mas isso é evidente!”. É. É evidente, mas você só se toca pro fato depois que alguém mostrou ele pra você.)

A seção 8 apresenta uma forma de estimar, priorizar e planejar um projeto de desenvolvimento de software […]. Contudo, você deve manter em mente que […] estas questões são em grande parte irrelevantes até que o seu time tenha aprendido a entregar, de forma consistente, um produto de qualidade que traga valor ao cliente.

Visual Studio Tem System: Better Software Development for Agile Teams, Section 8

Não adianta esforços para melhorar o seu processo de criação e gerenciamento de estimativas se você ainda não tem um processo bem definido para o levantamento e implementação destas funcionalidades. O processo de levantamento e implementação é a base para o processo de estimativas e priorização. O primeiro fornece dados para o segundo. Se o primeiro não está produzindo dados sólidos, o segundo processo, por melhor que seja, não gerará resultados satisfatórios.

Em uma metodologia Ágil, que é a que escolhemos implementar aqui na Sr. Nimbus, o processo de levantamento e implementação de funcionalidades necessita a incorporação de várias práticas na cultura da empresa:

  • Uso de mecanismo de controle de versão;
  • Build e integração frenquentes;
  • TDD;
  • Modelagem da aplicação.

Hoje já fazemos o TDD razoavelmente bem, e fazemos o uso “comum” do TFSCC - Team Foundation Source Code Control, o mecanismo de controle de versão do TFS. Sempre li sobre a prática “build & integrate often” de Agile, mas só recentemente, ao ter que integrar o trabalho executado em 3 frentes distintas do projeto, vi o valor que esta prática pode trazer. No quesito “modelagem”, ainda fazemos isto de forma completamente artesanal, sem nenhum processo que embase esta prática.

Então, por mais doída que seja esta afirmação, ainda não estamos em um ponto para desenvolver um processo formal de estimativa de esforço. Claro que estimamos, mas de forma informal, e não raramente, estas estimativas contém uma variação grande. O que estamos buscando é uma forma de diminuir esta variação – e a formalização de um processo de estimativa ajudará nisto. Mas a principal lição aqui é que esforços para a formalização do processo de estimativas e priorização só produzirão resultados concretos após a incorporação das 4 práticas citadas acima no nosso processo de levantamento e implementação de funcionalidades. Esse vai ser nosso “roadmap” para a implementação de um processo de gerenciamento do ciclo de vida de um projeto de software.