Agile

10 dez, 2012

Dividir para conquistar no desenvolvimento de software

Publicidade

Um dos desafios pelo qual toda equipe de desenvolvimento passa (e acredito que sempre passará) é a cobrança por uma produtividade alta. Mais entregas, mais velocidade, menos problemas, menos retrabalho, maior retorno de investimento. Putz, não tá fácil pra ninguém mesmo…

A experiência deste mero mortal mostra que, independentemente da metodologia de desenvolvimento que você aplique, sempre buscamos deixar nossos clientes satisfeitos. E neste mundo cada vez mais competitivo e feroz, o cliente quer ver e sentir a produtividade do serviço prestado pelo profissional e/ou pela empresa contratada.

Se você der uma pausa de alguns minutos no seu trabalho e der uma lida no manifesto ágil e seus princípios, perceberá a importância que é dada à entrega constante de software (produto) de valor ao cliente.

  • Nossa maior prioridade é satisfazer o cliente, através da entrega adiantada e contínua de software de valor.
  • Aceitar mudanças de requisitos, mesmo no fim do desenvolvimento. Processos ágeis se adequam a mudanças, para que o cliente possa tirar vantagens competitivas.
  • Entregar software funcionando com frequência, na escala de semanas até meses, com preferência pelos períodos mais curtos.
  • Pessoas relacionadas a negócios e desenvolvedores devem trabalhar em conjunto e diariamente, durante todo o curso do projeto.
  • Construir projetos ao redor de indivíduos motivados, dando a eles o ambiente e o suporte necessário, e confiar que farão seu trabalho.
  • O método mais eficiente e eficaz de transmitir informações para, e por dentro de um time de desenvolvimento, é através de uma conversa cara a cara.
  • Software funcional é a medida primária de progresso.
  • Processos ágeis promovem um ambiente sustentável. Os patrocinadores, desenvolvedores e usuários devem ser capazes de manter, indefinidamente, passos constantes.
  • Contínua atenção à excelência técnica e bom design aumentam a agilidade.
  • Simplicidade: a arte de maximizar a quantidade de trabalho que não precisou ser feito.
  • As melhores arquiteturas, requisitos e designs emergem de times auto-organizáveis.
  • Em intervalos regulares, o time reflete sobre como ficar mais efetivo, então, se ajusta e otimiza seu comportamento de acordo.

Eu, particularmente, entendo como produtividade a relação entre tempo de desenvolvimento e valor do produto entregue para o cliente. Uma dica para ser bem-sucedido nessa questão é: faça a análise da demanda completa, faça a divisão em subdemandas e repita isso até encontrar o ponto certo de desenvolvimento de um pedaço de produto (software) que possa agregar um maior valor ao cliente em um menor espaço de tempo.

Ninguém está aqui reinventando a roda, pois a técnica de divisão e conquista é bem antiga e consiste em dividir um problema maior em problemas menores, até que o problema maior possa ser resolvido. Cada subdemanda que é entregue é um pedaço a menos da demanda principal. Nada de novo, mas que dá resultado, isso dá.

Desde que começamos a estudar nossos primeiros algoritmos, aplicamos essa técnica para alcançarmos os nossos melhores resultados. Mas aí vai passando o tempo, as contas vão chegando e acabamos deixando as melhores técnicas de lado em detrimento da cobrança excessiva de entrega, prazos mal negociados com os clientes e da aplicação de metodologias não muito inteligentes como o Vamosimbora Process e o Chicote Process.

Cada equipe de desenvolvimento deve saber a melhor forma de aplicar essa técnica, obedecendo a sua realidade. Cumprindo seus prazos, entregando produtos de valor aos seus clientes, dividindo e conquistando. Sempre.

Boas festas. Até a próxima.