Posts de December, 2008

[Guilherme Cirne] Priorização de Histórias

Sunday, December 7th, 2008

Nos métodos ágeis, o Cliente ou Product Owner deve priorizar as histórias que serão desenvolvidas de forma a maximizar o Return On Investment (ROI).

Vamos supor dois cenários de projeto diferentes. Num, o cliente estipula uma data limite para o release do projeto mas não podemos prever quais histórias estarão prontas até lá. No outro, o cliente define o conjunto mínimo de histórias necessário para o release mas não temos como saber quando elas estarão prontas.

No primeiro cenário é bem claro qual a vantagem em priorizar as histórias. Quando chegar a data limite para o release, o time terá desenvolvido as histórias que agregam o maior valor para o cliente. Ficará de fora aquilo que é menos importante.

No segundo cenário poderia se argumentar que a priorização não é importante. Como todas as histórias serão desenvolvidas de qualquer maneira, tanto faz a ordem. Mas isso não é verdade. A priorização nesse cenário é tão importante quanto no anterior.

Em primeiro lugar, a decisão de só fazer o release quando o conjunto de histórias estiver pronto pode mudar. Por exemplo, pode surgir um novo projeto, mais importante, e se decidir por fazer o release com o que estiver pronto. Nesse caso, é importante que o que estiver pronto seja o que agrega mais valor.

Além disso, mesmo que a estratégia inicial seja mantida e o produto só seja lançado quando o conjunto de histórias estiver todo pronto, a priorização é importante para manter o foco no problema que se quer resolver com o produto. Isso ajuda a definir claramente para todos os envolvidos qual a visão para o produto.

[Cristiano Casado] Phusion Passenger 2.0.5 + global queuing

Friday, December 5th, 2008

Saiu do forno a release 2.0.5 do Phusion Passenger com um fix importante para a feature global queuing, que foi introduzida na versão 2.0.4, porém era a causa de deadlocks quando usada em combinação com o MPM worker do apache.

Mas qual a utilidade desta feature ? O Passenger trabalha com múltiplos processos Ruby on Rails, cada um com a responsabilidade em processar os requests HTTP. O processo leva determinado tempo para processar um request HTTP específico. Se a aplicação estiver sob alto tráfego, estes processos de backend podem não responder em tempo hábil, podendo haver um enfileramento de novos requests a serem processados.

Quando não temos o global queuing, cada processo possui sua própria fila para requests pendentes (private queue), com possibilidades de um processo estar mais carregado, ou seja com mais requests pendentes, do que outros.

Com o global queuing, temos a implementação de uma fila compartilhada entre todos os processos de backend. Se todos os processos estiverem ocupados o Passenger mantém o novo request nesta fila global, até que o primeiro processo tenha disponibilidade de processamento. A distribuição destes requests é mais eficiente, com o processo mais desocupado recebendo o novo request.

O download do Passenger versão 2.0.5 está disponível aqui no RubyForge.