quarta-feira, julho 15, 2009

Tip Day do Postgres

Embora eu tenho um passado triste com seu primo mais velho, eu acho o Postgres muito legal.

Porém, tem umas que a galera do desenvolvimento não precisava fazer, né?

Olhem o Tip Day que me abriu hoje:



Fala sério, codificar regras no BD até que vai, mas dizer que isso é uma das maravilhas do mundo civilizado, bem, tenham dó, né?

Enfim, o barco segue...

Geradores de codigo, ainda morro disso

Todos sabem que sou totalmente contra geradores de codigo-fonte. Em qualquer sentido e para qualquer linguagem.

Tirando abordagens MDA muito bem construidas - que diga-se de passagem são poucas - não tiro meu pé dessa (mediocre?) posição.

Entretanto, não posso ser bitolado ao extremo e, portanto, ainda me dou o luxo de dispensar meu escasso tempo olhando materiais na Internet para, algumas vezes, estender mais uns 3 ou 5 minutos para olhar vídeos, demos ou whitepapers sobre essas coisas (quase ridículas).

Enfim...

Skyway Builder
Hoje, recebi pelo TheServerSide uma news com o software da SkyWaySoftware, falando sobre (sempre falam isso) os 10 princípios que um gerador de código-fonte precisa seguir.



Como disse, dediquei 3 minutos (e agora mais 20 para escrever este post) para olhar o demo.

Resultado?

Ridículo.

Excetuando o uso do Eclipse RCP para construção do próprio gerador, o produto em si não agregou nada para esta já masserada, mastigada, massante, miserável e maldita área de geração de código.

Muito pelo contrário.

O que vi foi o cara que narra o vídeo perder 3 minutos para montar um POJO visualmente (com aqueles eternos wizards ou páginas com paletas e grids editáveis) e, a partir dele, gerar um CRUDzinho básico com uma (novamente ridícula - e isso não é somente eu que falo) DAO associada com um Controller e uma JSP e outros elementos básicos atrelados.

Em suma, nada de novo, apenas repeteco daquilo que já conhecemos.

E o Merlin?
Muitos podem dizer: Tá, mas e o seu famoso (hic) e famigerado Merlin?

Concordo, ele está parado mesmo :(

Por hora, estudo (quando sobra tempo) seu mecanismo de configuração realimentada para, quem sabe ano que vem, montar uma tese de doutorado sobre o assunto e, (novamente) quem sabe, em um horizonte de 5 - 8 anos, ter sua implementação finalizada.

É bucha, mas enquanto isso não acontece, muitos downloads do Skyway (Walker?) Builder vão ocorrer...

quinta-feira, julho 09, 2009

As Multiplas Curvas S no Gerenciamento de Projetos Ageis

E bem que um dia chega o post número 100. Aleluia irmãos!

E o assunto é sobre Gráficos Burn Up/Down e Curvas S no gerenciamento de projetos ágeis.

From this [moment]...
Escrevo este post pois li algo análogo (e muito, muito bom) no site do Leading Answers, do nosso (muito bom, idem) camarada Mike Griffiths.

Na prática, este texto é quase uma cópia espúria do post dele. Apenas não confirmo isso porque, realmente, li o PDF de base (também muito bem escrito) do texto e pratiquei bastante o assunto.

Assim, acredito que não fiz uma simples cópia...

Curvas S e Gráficos de Gannt
Curvas S são típicas em projetos. Uma equipe de projeto forma uma curva S ao longo do tempo: no início, temos o gerente, o arquiteto e um analista de sistemas; logo depois a equipe vai crescendo (progamadores, projetistas, designers, testadores, etc.) e depois, novamente, ao fim do projeto ela diminui até chegar a zero. Se montarmos um gráfico disso, teremos uma curva S!

Os gráficos de Gannt (ou pseudo-Gannt, como diria meu professor no curso PMBOK) são muito bons para mostrar a hierarquia das coisas no tempo e os marcos do projeto. E, de quebra, ele nos mostra os atrasos existentes.

Em suma, cada uma dessas ferramentas pode mostrar algo bom em determinada situação.

Projetos ágeis
Projetos ágeis não se sentem confortáveis com gráficos de Gannt. Simplesmente, podemos dizer que projetos ágeis focam o Sprint corrente (e quiçá o próximo). E nada mais. Ou seja, um bonito e horizontalmente longo gráfico de Gannt não ajuda muito quando nosso (constante e iterativo) foco são os próximos 15, 21 dias de projeto ;)

Em projetos ágeis, o importante são os (plajeando o Mike e o próprio... esqueci o nome do outro autor que fala a mesma coisa) "nebulosos" points (ou, no brazuquês, pontos).

Pontos? Sim, aquela coisinha maravilhosa que os caras do XP chamam de User Stories e os caras do RUP de Use Cases e os caras da FDD de Features (embora as features têm sim uma conotação muito plausível e realmente válida no mundo dos negócios - falo mais disso outra hora).

O problema básico é que "pontos" é difícil de engolir. Imagine um GP dizendo ao cliente "...olha, neste sprint nós entregamos 113 pontos, embora o esperado era 124. Os 11 pontos de diferença foram em virtude de um problema de dependência mal calculado, o que implica que, na verdade, nós entregamos 121 pontos, ou seja, apenas 3,5% a menos dos pontos esperados...".

Enfim, um ponto não representa nada para o cliente. Ele quer saber se a funcionalidade do sistema está OK. É simples, hora essa!

Além disso...

Gráficos Burn Down/UP
Gráficos Burn Down ou mesmo os gráficos Burn Up não correlacionam uma parte vital nos projetos.

E que parte é essa? Money, é claro.

Se entrarmos em um cara (diga-se: software para gerenciamento de projetos ágeis) muito bom, como o GreenHopper no JIRA e olharmos um gráfico Burn Down ou Burn Up podemos ter claramente os pontos (ou issues) que foram desenvolvidos no sprint corrente.

Porém, cadê a relação com o dinheiro consumido no período?

Simplesmente, esses gráficos não têm isso por natureza.

Aí entra uma outra coisa no cenário...

Os Gráficos de múltiplas curvas S
Lembro dos famosos gráficos de curva S e ABC quando eu estava desenvolvendo um ERP para uma empresa, lá nos idos de 2006.

Na época eu era projetista, e meu analista de negócio falava muito desses gráficos na parte de controle e manutenção de volumes de estoque...

Depois disso, eles foram para uma parte oculta do meu cérebro até que... umas duas semanas atrás eu li o post do Mike.

Coisa linda isso.

Um gráfico de múltiplas curvas S é simples: Ele mostra a variação de uma informação (os pontos, por exemplo) em relação a outra informação (o dinheiro investido) em função de uma outra informação que, geralmente, varia de forma linear (o tempo decorrido, por exemplo - embora Einstein tenha demonstrado lá na década de 20 passada que o tempo não é tão linear assim...).

Deu pra entender? Não?

Bom, deixamos a figura falar:



Neste gráfico de múltiplas curvas S eu mostro o total de issues (no meu caso Features da FDD) do sprint comparado ao volume de dinheiro (gasto na equipe de desenvolvimento) em função do tempo decorrido para o sprint (15 dias, sendo 10 os dias úteis).

Percebam ainda que eu tenho no gráfico tanto os valores realizados quanto as estimativas (de issues e financeiras).

No caso das estimativas, isso é uma informação que vai depender de vários fatores (como ter ou não históricos de desenvolvimento; ter ou não um mapeamento claro de tipos de issues que podem existir no meu projeto/processo/metodologia; saber ou não saber enquadrar as complexidades das issues; saber ou não saber quanto sua equipe trabalha efetivamente - regra de Paretto dos 80/20 é uma boa se você não souber nada; saber ou não saber que sua equipe mudou de tamanho durante uma sprint e... uma série de outras informações :() e, é por isso que você terá um bom acerto se, e somente se, tiver uma boa base para estimativas...

Enfim, mas tendo ou não as estimativas, o gráfico ainda mostra em background as partes (ou módulos, ou ainda - como preconizam a FDD e a DDD - os domínios do sistema).

Óbvio! Se eu priorizei minhas features (ops, issues - ops ainda, points - ops, ainda mais user stories) e começei a desenvolver o sistema/sprint por partes, é provável que durante o desenvolvimento, conforme as features forem sendo implementadas, cada parte do sistema será finalizada uma após a outra e assim sucessivamente, até eu ter o sistema completo.

E finalmente, de quebra, eu ainda tenho outras informações nesse lindo e belo gráfico...

PMBOK
Para os adeptos do PMBOK (que Sim meninos, em nada ele se opõe em relação aos projetos ágeis - muito pelo contrário), com este gráfico de múltiplas curvas S eu posso identificar várias informações:

VP - Valor Planejado - Quantas features (ops, issues) eu deveria ter prontas na data tal?
VA - Valor Agregado - Quantas features eu efetivamente tenho prontas na data tal?
CA - Custo Acumulado - Qual é o meu gasto financeiro na data tal?
ONT - Orçamento No Término - Qual deve ser o meu gasto na data tal? (NOTA: Claro, aqui eu mostrei um sprint finalizado, mas nada impede de eu usar uma linha de tendência no meu Excel da vida pra ter essa informação projetada no tempo no meio de um sprint/projeto)
IDC - Indice de Desempenho de Custos - Quanto o projeto está me retornando para cada R$/U$ investido? Ou quanto estou perdendo, se for o caso...
IDP - Indice de Desempenho de Prazo - Quanto o projeto está adiantado ou atrasado em relação ao planejado.

Toda essa sopa de letrinhas têm fórmulas clássicas na literatura, e o gráfico acima é capaz de mostrar tudo isso, bastando a você GP, usar as fórmulas dos livros para obter essas informações!

Finalmente, o 3PUP
Hoje, como disse (eu disse?), uso o JIRA e o GreenHopper, e não tenho as múltiplas curvas S automáticas.

Acabo fazendo elas por fora, num Excel da vida como mostrei acima.

Entretanto, com o ótimo suporte da wiki Confluence, minha idéia é colocar tudo isso integrado ao nosso processo 3PUP, de forma que os GPs nossos possam simplesmente acessar a wiki do projeto e, como dois plugins bacanas do Confluence (o Chart Plugin e SQL Plugin) eu ter essa informação online sem delonga alguma.

Não sei para quando conseguirei fazer essa automação, mas o importante não é nem isso, e sim o fato que, o post do Mike me ajudou muito (mesmo) e que, com o auxílio das formulazinhas que estão no PMBOK (e outros) e um pouco de trabalho num Excel (ou Calc) eu já posso melhorar muito o controle nos meus projetos e (quantos e's!), principalmente, mostrar informações úteis para meus clientes.

Boa Mike.