Archive for July, 2008

O perigo do mini-waterfall em times ágeis

Hoje estou finalmente tirando o atraso do meu Google Reader e lendo alguns artigos e posts sobre Scrum e Agile development, me deparei com uma excelente iniciativa do Mark Levison chamada Agile/Scrum Smells (baseada em um projeto do Mike Cohn) com o objetivo de catalogar os principais problemas encontrados durante a implantação e dia-a-dia de práticas ágeis, em especial práticas ligadas ao SCRUM.

A lista esta sucinta, mas já constam diversos problemas muito comuns no dia a dia de equipes ágeis. Um dos problemas que me chamaram a atenção e é um problema que temos que evitar a todo custo é a formação do que venho chamando de mini-waterfalls. As pessoas com o tempo, mesmo quando estão dentro de times ágeis, tendem a voltar a fazer as coisas como sempre fizeram, principalmente quando aparecem problemas, Ken Schwaber descreve esta reação no seu livro The Enterprise and Scrum, e a chama de “Muscle Memory”:

Expect muscle memory to exert itself. When a project is going well, everyone is happy with Scrum. However, when stress, a problem, or an unexpected failure occurs, everyone tends to throw away Scrum and revert to their muscle memory. Teams don’t want to self-manage. They want to be told what to do. Managers don’t want to let teams self-manage. They want to command the teams in all matters, down to the minutest detail. Teamwork is dumped for individual heroics. Quality is abandoned. Everyone draws on what they think has worked best in the past. (SCHWABER, The Enterprise and Scrum, Chapter 4).

Bem, detalhamento um pouco mais, entre as caracteristicas de um time ágil temos que ter um número pequeno de profissionais, com todas as habilidades necessárias para que se atinja o goal/visão definida pelo Product Owner e entregando o maior valor de negócio possível no menor tempo possí­vel, aplicando sempre o princí­pio de implementar “The simplest thing that could possible work“.

É neste ponto onde começam os problemas que vão gerar o mini-waterfall, geralmente as pessoas trabalharam toda a sua vida em empresas que empregam o princípio do Big Design Up Front (BDUF), ou seja, primeiro as pessoas querem planejar todas as possí­veis variações do projeto, em todas as telas, todas as mensagens de sistema, todos os fluxos, todas as queries, todo o modelo de dados antes mesmo de começarmos a “meter a mão na massa” no projeto. Isso leva a departamentalização e ao faseamento do desenvolvimento em steps especializados: Levantamento de requisitos, análise, arquitetura da informação, design, provas de conceito, desenvolvimento, testes, produção. Com isso criamos um processo em cascata que incentiva o veneno deste tipo de abordagem: falta de compromisso com o todo, com o Goal e com a Visão, cada um faz a sua parte, e que o próximo na fila no processo dá o seu jeito para entregar para o próximo e assim por diante, as pessoas passam a ser responsáveis pelas suas especialidades e não pelo produto, pela entrega final. É triste ver um time, antes ágil, começando a criar hábitos cascateados e viciados.

O que fazer? Este exemplo usado pelo Mark Levison mostra como seria uma postura ágil:

A successful Scrum team does not need to be comprised entirely of generalists. However, for a team of specialists to be successful each specialist must accept general responsibility for the system as a whole. I may not know how to solve our project’s most intricate Oracle problems but I am going to do whatever I can to help, which may simply include taking on some of our database specialist’s other responsibilities to free her to solve the complex problems.

Enfim, temos que nos policiar contantemente e observar se não estamos voltando aos nossos velhos hábitos, e lembrar que é muito difícil mudar a cultura das pessoas e da organização, e que isso é um trabalho de paciência e perseverança.

oEmbed – um padrão para conteúdos “embedáveis”

Algum tempo atrás foi divulgada a iniciativa do Cal Henderson do Flickr e do pessoal do Pownce para criar um padrão que permitisse obter informações de forma estruturada e rápida sobre algum conteúdo que possa ser “embedado” em uma página. Assim surgiu a iniciativa chamada oEmbed, que tem o objetivo de definir algumas regras para intercambio de informações de mídias.

O oEmbed é muito simples e a idéia é interessante, ao invés de vc ter de aprender as mil APIs dos diversos sites que existem na Internet para poder “embeddar” conteúdos destes sites, como Facebook, Orkut, Flickr, Picasa, etc. Vc pode usar a interface oEmbed dos seus providers favoritos, a promessa é que o oEmbed faça para as midias mais complexas (vídeo, áudio e fotos) o que o RSS fez para os conteúdos em texto.

Aqui segue um exemplo:

http://www.flickr.com/services/oembed/?url=http://www.flickr.com/photos/acarlos1000/2314303384/

A Resposta é:

{
"version": "1.0",
"type": "photo",
"width": 500,
"height": 281,
"title": "GloboVideos no MacBook e no Nokia N810",
"url": "http://farm4.static.flickr.com/3231/2314303384_c965ef5c96.jpg",
"author_name": "Acarlos1000",
"author_url": "http://www.flickr.com/photos/acarlos1000/",
"provider_name": "Flickr",
"provider_url": "http://www.flickr.com/"
}

Só acho que é meio nebulosa esta questão de ter a “oEmbed API”(API EndPoint) e uma URL para o Request, quando na verdade isso tudo vai gerar um request HTTP GET e poderiamos implementar isso com REST sem precisar passar por nenhuma “API”. Mas porque simplificar se podemos adicionar algumas camadas de burocracia.

De qq forma esta iniciativa esta apenas no início e com certeza vai evoluir bastante, alguns nomes de peso da Web estão implementando suas APIs oEmbed logo abaixo esta uma lista destes Providers:

Flickr (http://www.flickr.com/)

Viddler (http://www.viddler.com/)

Qik (http://qik.com/)

Pownce (http://pownce.com/)

Revision3 (http://revision3.com/)

Hulu (http://www.hulu.com/)