Último projeto: Insatisfação

Uma das coisas que mais me incomodaram no último projeto, no qual fui Scrum Master, foi a falta de um plano para a primeira release.

Por não termos planejado como seria a primeira release ainda no início do projeto, não tivemos um plano que nos guiasse a cada Sprint finalizado. Não sabíamos claramente o que esperava por nós, em termos de funcionalidades, e não tínhamos uma expectativa de data para a entrega do projeto, ou seja, não tínhamos uma idéia, por mais vaga que fosse, de quantas mais Sprints restavam.

Pra piorar, não estávamos estimando as histórias como deveríamos, mesmo usando “Story Points”, e também não estimávamos as tarefas técnicas em horas.

Enfim, acompanhar o andamento do projeto era praticamente impossível, ou seja, não havia transparência e, por conta disso, não haiva inspeção e, sem inspeção, não havia adaptação. E os 3 pilares do Scrum? Iam pro ralo …

Uma luz!

Bem, tudo isso e muito mais me motivaram a correr atrás e estudar bastante sobre Planejamento Ágil.

Comecei então a ler um livro chamado “Agile Estimate and Planning” do Mike Cohn:

http://www.amazon.com/Agile-Estimating-Planning-Mike-Cohn

Esse livro é excelente! E o sentimento que tive enquanto eu o lia foi como se eu tivesse encontrado água no deserto. Sério!

Ah se eu tivesse ouvido falar nesse livro há uns 6 meses atrás … com certeza as coisas teriam sido bem mais fáceis.

O próprio autor do livro “Scrum e XP Direto das Trincheiras”, Henrik Kniberg, diz algo parecido em relação ao livro:

“Eu realmente gostaria de ter lido esse livro mais cedo. Eu o li após termos percebido as coisas por conta própria” …

E como é custoso perceber essas coisas por conta própria. Eu bem sei …

Mas o que é Release Planning?

“Release Planning é uma atividade muito valiosa, uma maneira de chegar a um plano, um roadmap do que pode ser esperado após alguns Sprints e o que será incluído na release e o que ficará de fora.”

Professional Scrum Trainers Ralph Jocham and Henk Jan Huizer

Resumindo, é nesse encontro onde a equipe trabalha para descobrir quantos Sprints, aproximadamente, serão necessários para concluir o projeto, levando em consideração o escopo conhecido naquele momento e a velocidade da equipe.

Como o Scrum propõe um escopo aberto, o plano criado a partir do Release Planning não poderia ser diferente. Ele pode mudar e ele vai mudar! E essa é a diferença de um planejamento Ágil para o tradicional; no Ágil, o plano é revisitado a cada Sprint.

Ok. Mas como fazer o Release Planning?

Bem, supondo que o Product Owner já tem a visão do produto bem clara e também um Backlog contendo as histórias desejadas; de preferência tendo chegado a elas previamente de forma colaborativa com toda a equipe, a primeira coisa a se fazer é o Product Owner explicar cada uma dessas histórias e a equipe estimá-las.

Essa não é uma estimativa de duração, mas sim uma estimativa de tamanho no qual a equipe, através de uma técnica chamada “Planning Poker”, pontua cada história usando a unidade de medida “Story Points”. A pontuação é feita comparando o tamanho de uma história com outra.

“Alguns estudos mostram que o ser humano é melhor em estimar tamanhos relativos do que tamanhos absolutos”

Com as estimativas devidamente dadas, agora o Product Owner conhece melhor o custo de cada uma das histórias e já pode começar a priorizá-las. E pra isso, ele pode considerar o custo, o risco, ROI etc. Ele pode até optar por fazer um Product Research para ajudá-lo nesse trabalho de priorização.

O próximo passo é a equipe se reunir e fazer o primeiro Sprint Planning. É nessa hora que a equipe deve decidir quais histórias serão desenvolvidas primeiro. Pra isso, a equipe deve quebrar as histórias em tarefas técnicas (criar classes, criar testes, popular tabelas, testar etc)  e estimá-las em horas. Isso é muito importante. As tarefas devem ser quebradas pra terem no máximo 16 horas de duração.

Sendo assim, vamos supor então que a equipe chegou a um consenso de que é capaz de fazer 4 histórias nesse Sprint (duas estimadas em 2 pontos e duas em 8 pontos, totalizando 20 pontos), usando um total de 96 horas, divido entre 3 pessoas.

Agora, com todas essas informações, já podemos fazer o Release Planning e assim chegarmos em um plano inicial para a primeira release.

É nesse momento que somos obrigados a responder aquela velha pergunta: “Quanto tempo você acha que será necessário pra desenvolver esse projeto?”.

A melhor e mais honesta resposta para essa pergunta seria que o ideal é esperar pelo menos 3 Sprints para poder ter uma noção melhor da velocidade da equipe e consequentemente uma noção melhor de prazo.

Acontece que essa resposta é muito bonita, mas vamos combinar que ela não agrada a ninguém. No mundo real, somos obrigados a dar prazos. Sendo assim, após darmos estimativas de tamanho para as histórias, precisamos agora dar uma estimativa de duração.

Veremos que isso não vai ser tão difícil.

Levando em consideração que o Backlog contém histórias totalizando 100 pontos e que a equipe estimou que em um Sprint de 2 semanas consegue fazer 20 pontos, sendo essa a sua velocidade, basta seguirmos com a fórmula abaixo:

( Total de Pontos / Velocidade ) * Tamanho do Sprint = Semanas

Ou seja

(100 / 20) * 2 = 10 semanas

Simples, né? Mas lembre-se que é sempre bom repassar essa estimativa como uma faixa. No nosso caso, por exemplo, a estimativa seria de 8 a 12 semanas, ou seja, 1 Sprint a menos e outro a mais; afinal, as coisas podem mudar para o melhor ou para o pior à medida que conhecemos mais sobre o software que estamos desenvolvendo, graças aos feedbacks frequentes.

Agora é só desenhar um belo “Release Burndown Chart” num quadro branco em um lugar bem visível e atualizá-lo no final de cada Sprint. Aí é só se divertir e deixar os diretores e gerentes se divertirem também acompanhando o progresso do projeto! :)

Isso se chama transparência, meus caros! E a Transparência é o primeiro passo para a Inspeção e consequentemente a Adaptação.

Considerações finais

É possível fazer um projeto sem um Release Planning? Claro que é, e digo isso por experiência própria. Mas se me perguntarem se eu faria diferente se tivesse a oportunidade de voltar atrás eu responderia: “Claro” !!!

Esse assunto é muito extenso e eu não seria capaz de me aprofundar mais. Isso o Mike Cohn já fez e de forma impecável. Sendo assim, a leitura de “Agile Estimate and Planning” se torna obrigatória.

Dica: o último capítulo do livro, escrito em forma de ficção, é sensacional! ;)

Dúvidas? Use a caixa de comentários abaixo!

 

Desde que adotamos Scrum aqui na empresa, os Product Owners têm participado efetivamente das reuniões de Daily Scrum.

Eu já havia percebido algumas desvantagens nisso como, por exemplo, o Product Owner querer transformar os encontros em reuniões de status, meio que intimidando o Time de Desenvolvimento de forma sutil, questionando se as histórias não seriam desenvolvidas, ou ainda, menos frequentemente, trazendo à tona alguns assuntos de pouca importância para o Sprint atual.

Mesmo com tudo isso, achava que estávamos fazendo a coisa certa. Até que há duas semanas atrás, no treinamento de CSM (Certified Scrum Master) ministrado pelo Rafael Sabbagh, fomos lembrados que essas reuniões são de fato para o Development Team e não para o Scrum Team.

Cheguei até a argumentar com o Rafael, disse que havia algumas vantagens em ter o Product Owner no Daily Scrum, mas na ocasião fui parcialmente convencido de que as desvantagens, no final, acabavam sendo maiores.

Decidi então estudar mais sobre o assunto por conta própria, fazer algumas pesquisas e descobri que o assunto é quase tão polêmico quanto a velha história “Scrum Master x Gerente de Projeto”.

Pra começar então, vamos nos apoiar no que a dupla Ken Schwaber and Jeff Sutherland nos dizem no Scrum Guide:

“O Daily Scrum é uma reunião de 15 minutos no qual o Time de Desenvolvimento sincroniza as atividades e cria um plano para as próximas 24 horas.” (Scrum Guide, página 10)

E eles ainda complementam dizendo:

“O Scrum Master é responsável por reforçar a regra de que apenas os membros do Time de Desenvolvimento participam dessas reuniões. O Daily Scrum não é uma reunião de status …” (Scrum Guide, página 11)

Mas aí você me pergunta: “Mas Thiago, e como fica a comunicação com o Product Owner? E se surgir alguma dúvida? Como faremos?”. Bem, a comunicação é um dos pilares do desenvolvimento ágil; portanto, o Time de Desenvolvimento deve ser capaz de se comunicar diariamente, a todo momento, com o Product Owner durante todo o Sprint e não apenas em uma reunião de 15 minutos, se esse fosse o caso.

Para dar base à minha afirmação acima, vamos de novo ao Scrum Guide:

“Todos os dias, o Time de Desenvolvimento deve ser capaz de explicar para o Product Owner e Scrum Master como pretende trabalhar, como um time auto-gerenciável, para conseguir alcançar o objetivo do Sprint …” (Scrum Guide, página 10)

Mas será que é tão errado o Product Owner participar dessas reuniões? E as equipes que já incluem o Product Owner? O que fazer?

Bem, essa é uma escolha da equipe. Se você tem um bom Product Owner que participa apenas como ouvinte, então talvez seja melhor deixá-lo participar. Agora se o seu P.O não contribui muito ou você acha que a presença dele tem sido cada vez menos necessária, eu sugiro que você converse com ele, mas deixe claro que é importante que ele esteja acessível sempre que possível.

No nosso caso, mesmo não tendo tantos problemas com o P.O, pretendo isentá-lo da obrigação de participar das reuniões do próximo Sprint que começa na próxima quarta-feira. Fiquem ligados pois pretendo dar um feedback pra vocês em breve.

Um outro ponto que vale a pena falar é que o Scrum, por ser um framework, já é por sí só pequeno e bastante simples, e, na minha opinião, o mínimo (Scrum Guide) deveria ser seguido à risca sempre que possível.

Mas cuidado! Lembre-se:

“Scrum não é um processo ou uma técnica. Scrum é um framework no qual você pode incorporar vários processos e técnicas.” (Scrum Guide, página 3)

Fico confuso? :) Deixe seu comentário. Vamos discutir mais sobre o assunto!

Até a próxima!

 

Bem, meus caros, voltando a idéia inicial quando decidir criar esse blog, a partir de hoje, vou passar a falar mais sobre o meu dia-a-dia como Scrum Master de um dos projetos daqui da empresa.

Pra começar, hoje vou falar sobre como foi o 4o Sprint Planning Meeting desse tal projeto.

A reunião em si foi muito boa, mas houve alguns pontos que poderiam ter sido bem melhores.

No 3o Sprint, por exemplo, tivemos um Planning bem mais produtivo que esse. Nós chegamos à conclusão que isso aconteceu porque para o 3o Sprint fizemos nosso primeiro Backlog Grooming Session no final do 2o Sprint, onde sentamos com o PO e discutimos algumas histórias, reescrevemos algumas e quebramos outras. Tudo isso de forma bastante colaborativa com desenvolvedores, pessoal de QA e PO.

Mas infelizmente pra esse Sprint não conseguimos fazer essa reunião pois o 3o Sprint foi um pouco conturbado  …

O Backlog Grooming Session é uma reunião (ou mais de uma) que acontece antes do próximo Sprint, onde a equipe se reúne para analisar o Backlog e fazer melhorias nele.

Pois bem .. a falta dessa preparação para esse Sprint refletiu diretamente na produtividade do Planning, pois perdemos algum tempo melhorando e quebrando algumas histórias que o PO havia escrito.

Aliás, havia uma história bem parecida com aquela história clássica do tipo “Gerenciar cliente”.

A história em questão era mais ou menos assim:

Como um jornalista,

Eu quero ser capaz de visualizar as notícias publicadas e publicar novas através de uma interface web.

Como essa história ficou de fora do Sprint porque a equipe já havia se comprometido com outras mais importantes, sendo que a PO queria muito que essa história fosse incluída, partimos pra negociação! E pra fazer isso da melhor forma, começamos por quebrar essa história em outras menores.

Isso resultou em duas novas histórias. Uma para visualizar as notícias e outra para publicar. Mais ou menos assim:

Como um jornalista

Eu quero poder visualizar as notícias já publicadas

E

Como um jornalista

Eu quero poder publicar novas notícias

Desse jeito, conseguiríamos incluir as duas histórias como extras (geralmente a equipe tem conseguido fazer todas as extras) e no pior dos casos, pelo menos uma delas estaría pronta ao final do Sprint, o que já agregaria um grande valor, pois seria uma parte importante que já estaria pronta.

Isso é desenvolvimento incremental e agilidade, meus caros!

O Sprint então começou hoje e termina no dia 22/11 com o Review e a Retrospectiva. O Daily Scrum será realizado às 11h em frente ao Scrum Board como sempre ! :)

Ah! E o Backlog Grooming Session, claro, não vai ficar de fora. Não cometeremos o mesmo erro outra vez.

 

Um vídeo bem legal do Luiz Falas Jr, da Bluesoft, mostrando como é o quadro kanban (Scrum Board ou Quadro de Scrum) que eles usam lá.

Esse quadro é uma criação deles e, nesse vídeo, o Júnior fala como o quadro foi feito e quais materiais foram usados.

Bastante interessante a organização!

Veja você mesmo:

O que acharam?

 

Já fazem mais ou menos 2 meses que adotamos Scrum aqui na empresa e já participamos de muitos Daily Scrums. E é um pouco dessa experiência que eu gostaria de compartilhar com vocês.

Daily Scrum é uma reunião breve e informal que acontece diariamente e com duração máxima de 15 minutos, onde os membros da equipe, todos em pé, um por vez, respondem a 3 perguntas:

1. O que fiz desde o último Daily Scrum?

2. O que farei até o próximo?

3. Quais problemas estão me atrapalhando?

O conceito do Daily Scrum é isso aí; muito simples aliás, mas por falta de experiência, muitos acabam cometendo alguns erros.

No nosso caso, os encontros demoravam bem mais que os 15 minutos. Isso porque os membros da equipe traziam seus impedimentos e a equipe passava boa parte do tempo tentando achar uma solução para eles.

Descobrimos naturalmente que a solução para os problemas não precisam surgir durante o Daily Scrum, mas isso também não quer dizer que alguém com a resposta na ponta da língua capaz de solucionar o problema do colega não possa falar, mas cabe ao Scrum Master identificar quando a discussão não está chegando a lugar algum e propor que ela seja continuada depois dos 15 minutos.

Lembre-se que o Daily Scrum não é o único momento em que a equipe deve se encontrar e se comunicar. Pelo menos essa não é a idéia. Se isso acontece na sua equipe, é hora de dar um jeito nisso!

Mais algumas dicas:

  • Prefira o horário da manhã para fazer as reuniões. Quanto mais tarde, menos assunto sobrará para o Daily Scrum, já que a equipe já vai ter conversado e solucionado boa parte dos problemas sem a equipe toda tomar conhecimento.
  • Por mais que a equipe tenha que saber das suas “obrigações” e ser auto-gerenciável, não custa nada lembrá-los do horário do Daily Scrum. Eu uso o Google Calendar! :)
  • Faça as reuniões perto do quadro de tarefas. O Daily Scrum é uma boa oportunidade para “validar” o quadro, atualizando os status das tarefas, criando novas tarefas etc.
  • Use sempre um cronômetro para fazer o controle dos 15 minutos. É importante que você deixe o cronômetro visível. Eu uso a função “Timer” do iPhone. :)
  • Não deixe que a equipe entre tanto em detalhes técnicos. O Product Owner muito provavelmente não é técnico e vai ficar “boiando” e cada vez menos entusiasmado a participar dos encontros diários.
  • O Daily Scrum é uma reunião informal; portanto, não faz mal agir informalmente também. Uma descontração aqui, outra ali é bem-vinda.
  • Pergunte sempre ao Product Owner se ele tem algo pra falar para a equipe. Aliás, essa é uma boa oportunidade pra ele reforçar a meta, lembrar da importância do produto para o cliente e para a empresa, enfim, ajudar a dar uma “injeção de ânimo” na equipe para que ninguém pense que o trabalho está sendo em vão
  • Se der tempo, alinhe com a equipe a data, horário e informações úteis sobre todos os próximos eventos que estão programados para acontecer como o Review, Retrospectiva, Backlog Grooming etc.

 

Bem, no post “Escrevendo User Stories eficazes”, eu disse que esse assunto era rico e bastante extenso e por isso merecia um novo post. Pois bem, aqui estamos! :)

Dessa vez, faremos uma breve comparação entre histórias grandes e histórias pequenas e o impacto delas no andamento do Sprint; impacto esse percebido claramente em gráficos Burndown.

O gráfico Burndown é uma forma visual e rápida de enxergar o status atual do Sprint e monitorar o progresso de um time Ágil. Ele possui uma estrutura simples onde o eixo X representa os dias do Sprint e o eixo Y representa o trabalho restante, normalmente na unidade “pontos de história”.

Vamos então à comparação:

Histórias grandes

Histórias que descrevem telas inteiras, vários passos e fluxos alternativos intermináveis, têm um impacto bastante negativo na evolução do Sprint, já que o risco de no final termos somente histórias incompletas é grande.

Abaixo, segue um exemplo de um gráfico Burndown de um Sprint onde as histórias eram grandes:

Esse gráfico mostra dias sem nenhum progresso acompanhados de uma grande queda, ou seja, como uma história grande leva mais tempo para ser finalizada, por isso os dias sem nenhum progresso, quando elas finalmente são finalizadas, a linha cai bruscamente.

Histórias grandes também tendem a apresentar muitos bugs devido à enorme facilidade de serem mal-compreendidas. Além disso, elas demoram a ser finalizadas, o que faz com que os testes sejam iniciados tardiamente, gerando um atraso no feedback.

Histórias pequenas

E agora um exemplo de um gráfico Burndown de um Sprint onde a equipe se preocupou em quebrar as histórias grandes em menores:

Como vocês podem ver, a progressão é estável, a linha azul se mantém bem próxima da linha vermelha, sem grandes flutuações, a não ser algumas poucas causadas por pequenos bugs; porém, graças ao tamanho pequeno das histórias, o feedback da equipe de QA acontece mais cedo e os bugs são poucos e rapidamente corrigidos.

O coach em Desenvolvimento Ágil, Nick Oostvogels, diz em seu blog que em sua primeira experiência como Product Owner ele achava muito difícil “fatiar” histórias grandes em pedaços pequenos, estimáveis, de valor e testáveis. Ele diz que você tende a se deixar levar pela preguiça e dizer “Ah! Vamos fazer uma história só pra descrever essa tela e depois eu me viro pra fazer com que a equipe entenda”.

“Esqueça! Quando a história é grande, é muito difícil que a equipe tenha o mesmo entendimento”, diz Nick.

Por isso, meus caros, continuo acreditando na eficiência das histórias pequenas. Reconheço que às vezes é difícil quebrar histórias grandes, mas os benefícios são muitos.

Bem, por hoje é só. Finalizo por aqui, mas deixo a promessa de voltar em breve para continuar falando sobre esse assunto.

Referência:

Nick Oostvogels’s Weblog

 

 

Bem, meus caros, se eu tivesse uma reposta pronta para essa e outras dúvidas no Scrum Guide, confesso que seria um indivíduo bem mais feliz, mas infelizmente, esse não é o caso.

O que vou tentar fazer é mostrar como nós estamos fazendo para tentar resolver esse “problema” nesse momento.

Portanto, para começarmos a entender o “problema” e chegarmos numa possível “solução”, vejamos um exemplo de uma “user story” (história de usuário) de um produto, no qual os clientes, através de uma página WAP, poderão contratar um serviço de assinatura de vídeos mobile. Vejamos:

Como um usuário,
Eu quero contratar , através do Portal WAP, o serviço de assinatura de vídeos da categoria que eu escolher,
Para que eu receba diariamente em meu celular os videos dessa categoria.

E abaixo, o critério de aceitação da história acima:

Dado que o usuário acessa a home do Portal WAP
Quando ele clicar no botão “assinar” ao lado do nome da categoria desejada
Então ele deve ser assinado no serviço
E ser tarifado em $0,99
E receber um SMS contendo o texto “Parabéns! Você assinou com sucesso o serviço! Em breve você receberá os vídeos da categoria escolhida.”

Pois bem … Agora vamos supor que, durante o Planning Meeting, a equipe tenha estimado essa história em 5 pontos, levando em consideração o escopo detalhado no critério de aceitação acima.

O desenvolvedor então finaliza a implementação da história e QA começa a fazer a validação. Durante essa validação, um cenário que até então não estava sendo contemplado vem à tona.

O cenário em questão é “usuário sem crédito tenta assinar o serviço”, por exemplo.

O Product Owner então é notificado sobre esse novo cenário e confirma que para clientes sem crédito o comportamento esperado é realmente outro, ou seja, o cliente não recebe SMS, e sim vê a mensagem de erro em uma outra tela.

E agora?

Bem, na minha opinião, esse cenário que surgiu deveria virar uma outra história e ser estimada pela equipe como uma história nova do Backlog.

Antes de explicar porque eu penso dessa forma, vejamos antes como seria essa nova história:

Como um usuário sem crédito,
Eu quero, ao tentar assinar uma categoria, receber um SMS me informando que não tenho créditos suficiente para contratar o serviço
Para que eu saiba o motivo pelo qual eu não consegui finalizar a operação com sucesso.

E o critério de aceitação:

Dado que o usuário acessa a home do Portal WAP
Quando ele clicar no botão “assinar” ao lado do nome da categoria desejada
Então ele deve ser redirecionado para a página de erro que exiba a mensagem: “Erro! Você não possui créditos para assinar esse serviço. Recarregue seu celular e tente novamente!”

A alteração pode ser pequena, pode ser “ridícula”, simples de fazer, mas criando uma história isolada, independente e com valor, o Product Owner consegue ter mais facilidade e flexibilidade em decidir o que fazer com ela sem afetar o escopo da história original.

Por exemplo, ele pode decidir negociar com a equipe para colocar essa história no lugar de outra de pontuação igual ou apromixada e que ainda não tenha começado a ser implementada nessa Sprint. Ou então ele pode chegar à conclusão de que não faz mal incluir essa história no próximo Sprint, já que estamos entregando valor mesmo sem o cenário de cliente sem crédito.

Conclusão

O importante é ter em mente que não é proibido pensar em cenários que não foram previstos durante o Planning Meeting. Lembre-se que não aceitar bem às mudanças não faz parte do “Manifesto Ágil”.

O que não pode acontecer é a qualidade ficar ameaçada e corrermos o risco de não finalizarmos uma história que a equipe se comprometeu em entregar ao final do Sprint porque novos cenários não param de surgir aumentando o seu escopo.

Considerações finais

E você? Como você faz quando surgem “problemas” como esse? Você tem uma forma melhor de lidar com histórias que aumentam em escopo? Concorda com essa abordagem?

Compartilhe sua experiência!

“Inspect and Adapt” sempre! :)

 

Antes de começarmos a ver como escrever boas histórias, vamos primeiro lembrar qual a definição de “User Stories”:

User Stories são descrições simples, escritas sob o ponto de vista do usuário, normalmente no formato “Como um (usuário), Eu quero (funcionalidade), Para que (necessidade)”, que demonstram o conceito de uma funcionalidade.

É extamente isso e mais nada! “User Stories” não são descrições extensas e detalhadas sobre uma funcionalidade. Elas definem apenas o conceito dessa funcionalidade.

Ou seja, de uma forma simples e bastante objetiva, você consegue identificar qual é a funcionalidade, qual é o usuário que irá usar essa funcionalidade e porque ela deve ser criada. Informações bastante úteis para ajudar o Product Owner a priorizar cada item do Product Backlog.

Mas escrever boas “User Stories”, fáceis de compreender, pequenas o bastante para estimar e testar não é uma tarefa fácil. E pelo que tenho visto por aqui, essa não é uma tarefa que seja possível ficar sob responsabilidade única e exclusiva do Product Owner.

Tá … O ideal talvez fosse se as histórias já viessem devidamente quebradas ao máximo para o Planning Meeting, mas para que isso fosse possível, seria necessário que o PO tivesse um conhecimento um pouco mais técnico. E isso é muito difícil …

É aí que entra uma das características mais legais do Scrum e de qualquer metodologia ágil: o trabalho colaborativo.

Por que histórias pequenas?

Histórias pequenas tendem a ter estimativas mais reais. Na minha opinião, se uma história tem uma estimativa de mais de 8 pontos é porque ela é grande demais e, provavelmente (nem sempre), o time não foi capaz de compreendê-la.

Histórias pequenas minimizam estimativas na base do chute …

Histórias como “Gerenciar usuário” e “Mecânica de nãoseioquê” são exemplos clássicos de histórias grandes.

À propósito, querido(a) Product Owner, antes que eu me esqueça, coloque em sua blacklist as palavras “Mecânica”, “Gerenciar” e outras do mesmo naipe. Gerenciar o que? É pra cadastrar? Atualizar? Remover? Pior ainda é a tal da mecânica … muito vago, não dizem nada … ou pior, dizem muito.

Histórias como essas necessitam de diversos cenários para serem especificadas, e isso não é nada bom. Histórias pequenas, por outro lado, são transparentes, dificilmente escondem outras funcionalidades.

Não seria perfeito se cada história tivesse um único cenário? Veremos que isso é possível e bastante saudável.

O que esperar do Product Owner?

Bem, espera-se que a PO conheça o produto do qual ele é responsável e crie um Product Backlog, devidamente priorizado, com todos os itens (funcionalidades) que o produto deveria ter.

Normalmente esses itens criados pelo Product Owner são histórias grandes ou “épicos”. Não espere mais do que isso.

Epics são “User Stories” grandes demais para serem estimadas devidamente. Elas costumam esconder diversas funcionalidades que seriam facilmente quebradas em outras histórias menores.

Mas até aí tudo bem. É normal que, no início, o Product Backlog tenha histórias grandes, mas é essencial que elas sejam quebradas em histórias menores antes de cada Sprint Planning Meeting.

Chega de teoria. Quero exemplos!

Ok. Vejamos abaixo o Backlog de um produto VAS fictício destinado a clientes da operadora ATL que desejam receber notícias por SMS:

Analisando a história 1 “Assinar serviço”, podemos ver que o usuário precisa passar por algumas etapas até ser assinado no serviço. Ele precisa solicitar a assinatura, o sistema precisa enviar um SMS pra ele responder e confirmar a solicitação, o sistema provavelmente vai precisar validar se a resposta é válida e enviar uma mensagem de erro caso seja. Enfim … olha o Epic querendo trollar a gente aí …

É aí que entra em ação aquele trabalho colaborativo que falei mais acima. É a hora, normalmente antes do Sprint Planning Meeting, quando a equipe (PO + Dev team) trabalha junta para quebrar ao máximo cada história de modo que elas fiquem mais fáceis de estimar.

Vejamos então esse mesmo Backlog com a história “Assinar serviço” quebrada em outras histórias menores:

Viram que a história “Assinar serviço” gerou quatro histórias? E todas pequenas, independentes e com valor de negocio! Além disso, cada história tem apenas um único cenário; aliás, o suficiente.

Uma dica muito importante para facilitar a decomposição das histórias é primeiro listar todos os cenários da história maior. Você verá que cada cenário vira um provável candidato à história.

Mas peraí! O que é essa coluna “Theme” no Backlog?

Temas nada mais são que agrupadores de histórias. Eles ajudam a organizar uma série de histórias que juntas formam uma única funcionalidade com extremo valor de negócio.

Ao quebrarmos histórias em várias menores, corremos o risco de perdermos o tal ”Big Picture”, ou seja, a visão do todo. Os temas nos ajudam a resolver esse problema.

Mas e quanto a história mãe, a que gerou as outras histórias? Já que não irei usá-la (por isso a quebramos), posso removê-la do Backlog?

Na minha opinião, acho melhor deixá-la exatamente aonde está, principalmente para fins de histórico. Agora, se ela está te incomodando, você pode criar uma coluna para categorizar os itens em “Epics” e “Stories” e criar um filtro para escondê-la. :)

Conclusão

Apesar de não ser uma tarefa fácil, vimos que é totalmente possível quebrar histórias maiores em pequenos pedaços.

Os ganhos são vários:

  • Histórias pequenas são transparentes; não há detalhes implícitos. É muito fácil se perder nos detalhes de histórias grandes.
  • Histórias grandes aumentam o risco da equipe não conseguir entregar nada no final do Sprint.
  • Histórias pequenas têm poucos cenários, normalmente um único cenário que cabe perfeitamente no mesmo cartão da história, facilitando assim o acesso as informações por parte da equipe. Tudo num único cartão. Nada de extensas documentações.
  • O processo de criação de histórias menores aumenta a comunicação e promove a colaboração da equipe.
  • Histórias pequenas facilitam a redução de escopo, se necessário. O P.O pode dizer que nesse sprint não é necessário se preocupar com os tratamentos de erros, por exemplo. E essa mudança não interfere em nada mas outras histórias. Não é preciso remover cenários ou fazer qualquer tipo de alteração no escopo das outras histórias.

É isso aí, pessoal! Por hoje é só.

Como o tema “User Stories” é bastante extenso e rico, por isso a enorme quantidade de material na internet, voltarei a falar sobre o assunto muito em breve.

 


Primeiro contato

Meu primeiro contato com a metodologia eu não sei exatamente ao certo quando foi, mas lembro de um colega de trabalho falando sobre o assunto após ter participado de um workshop de “Modelagem Ágil e Domain Driven Design” em 2008, onde um dos temas abordados foi Scrum.

Lembro-me de ter pesquisado um pouco sobre o assunto na época, mas acho que ainda não estava insatisfeito com o método tradicional de gestão de projetos o bastante ao ponto de querer propor alguma mudança.

Enfim, tudo isso não importa. O que importa mesmo é que tudo mudou de uns meses pra cá.

Descontentamento x Motivação

Eu andava bastante descontente com a forma em que os projetos eram conduzidos na empresa. Estava desmotivado mesmo! Não era mais divertido desenvolver software daquele jeito …

Tudo era sempre na base da correria, escopos grandes, prazos curtos, muitas horas extras, problemas sérios de comunicação, problemas com as entregas etc.

Não posso nem dizer que seguíamos o modelo “Waterfall” porque não tínhamos fases tão bem definidas, mas esse modelo era o que mais se aproximava da forma tradicional que usávamos.

O estopim foi um mega projeto, extremamente complexo, com um escopo enorme. E pra variar, tudo indicava que teríamos, mais uma vez, pouco tempo para desenvolver e muitas horas extras pra fazer.

O projeto, do qual me refiro, era realmente bizarro, meus caros.

A área de Negócios ficou meses escrevendo um “Documento de Escopo” que no final ficou com umas 60 páginas ou mais. O documento era gigante e tinha tudo que você possa imaginar. Nele continha requisitos funcionais, não-funcionais, wireframes, cenários etc. E tudo isso num documento Word com sumário, títulos, subtítulos. Tudo muito bonito, confesso, mas pouco funcional.

Após meses, esse documento finalmente chegou nas mãos da equipe de desenvolvimento e nosso trabalho a partir daquele momento era ler tudo aquilo, fazer uma análise e, no final, entregar para o cliente um cronograma. Claro … o prazo …

Resumindo … CAOS!

Durante a fase de análise, o cliente mudou o escopo inúmeras vezes, e toda vez que algo era acrescentado ao documento, tínhamos que ler tudo novamente. Nossa! Como era cansativo ler aquilo. Era muita informação pra ser absorvida de uma vez só. Muito “Big Design Up Front”

Havia também muitas funcionalidades pra implementar e uma boa parte delas eram “firulas”.

Segudo pesquisa realizada pela Standish Group, 45% das funcionalidades de um software nunca são usadas e 19% são raramente usadas, ou seja, 64% de desperdício.

Mas o maior de todos os problemas, na minha opinião, era que o cliente só teria visibilidade de tudo aquilo que fora solicitado no final do projeto. Eu ficava em pânico só de imaginar que poderíamos passar 4, 5 meses desenvolvendo algo que não era exatamente aquilo que o cliente esperava.

Enfim, tudo caminhando para o # EPIC FAIL TOTAL …

* Esse projeto, mesmo já estando na fase de implementação, teve uma nova chance com Scrum

O início da mudança

Todo aquele descontentamento deu lugar à motivação.

Comecei a me aprofundar mais nos estudos sobre Metodologias Ágeis, mas guardei pra mim. Não queria falar sobre algo que eu não conhecia de fato. Precisava ter conhecimento e me sentir seguro antes de levar isso adiante e tentar convencer meus superiores de que aquilo funcionava. Precisava de base, precisava, acima de tudo, ter bons argumentos …

Decidi então procurar um bom treinamento aqui no Rio e encontrei a Caelum

Eureka!

Ao longo de toda a primeira semana do treinamento, pensei várias vezes comigo mesmo: “Cara, acho que taí a solução para os nossos problemas!”.

A “regra” do Scrum é muito simples e clara. O desenvolvimento do projeto é dividido em ciclos (sprints) que duram de 1 a 4 semanas. A cada ciclo, uma parte do projeto é desenvolvida e entregue ao cliente. O feedback do cliente nessa etapa é o mais importante porque é isso que garante que estamos no caminho certo, ou seja, não há mais aquele perigo de entregarmos ao cliente algo diferente do que ele espera, já que o acompanhamento é feito de perto.

A base do Scrum é isso aí: desenvolvimento iterativo e incremental. Iterativo porque o projeto é quebrado em pedaços, dividido em ciclos. E incremental porque novas funcionalidades são adicionadas ao projeto a medida que os ciclos vão chegando ao fim.

* Não é o objetivo deste post entrar em detalhes sobre os artefatos e cerimônias do Scrum. Falaremos sobre isso mais adiante em posts futuros.

Correndo atrás

O treinamento chegou ao fim e para solidificar a base de conhecimento adquirida, comecei a estudar, pesquisar, buscar relatos e experiências de pessoas que já usavam a metodologia.

Um material que me ajudou bastante foi o livro “Scrum e XP direto das Trincheiras” do Henrik kniberg. Nele o autor conta como adotou Scrum numa empresa com uma equipe de 40 pessoas.

Outra inspiração, obviamente, foi o Guilherme Chapiewsky, ex-Globo.com, que teve um ínicio de implementação do Scrum bem parecido com o nosso. Ou melhor, a nossa implementação foi parecida com a dele. :)

E claro, o Guia Oficial do Scrum (Scrum Guide) e o Manifesto Ágil. Leitura obrigatória!

Esse estudo é essencial. É muito importante que você corra atrás e não fique apenas na teoria aprendida no curso. Não adianta achar que 20h de treinamento é o suficiente para formar Scrum Masters.

A decisão certa, na hora certa

Bem, depois de uma semana, foi preciso bem mais que algumas horas sentado de frente para o meu chefe tentando convencê-lo; isso aliás nem aconteceu de fato. As coisas foram acontecendo naturalmente, um papo aqui, uma conversa ali, um e-mail acolá. Nada formal.

Aliás, o primeiro papo de grande impacto sobre Scrum foi um improviso.

Num determinado dia, enquanto enfrentávamos um problema com nosso servidor de desenvolvimento e a equipe estava, digamos, um tanto ociosa, o Gerente de Projetos, e meu amigo, Julio Bisneto, aproveitou esse momento e decidiu reunir toda a equipe para que cada um pudesse falar um pouco sobre o que estava fazendo.

Mas o que era pra ser uma reunião informal de alinhamento, acabou se tornando um bate-papo sobre Scrum.

Júlio já começou a reunião falando sobre o fato d’eu ter feito um curso sobre Scrum e que ele havia achado interessante e que provavelmente outras pessoas fariam o mesmo treinamento.

Pela primeira vez tive a oportunidade de falar sobre Scrum para praticamente a equipe toda … tudo no improviso.

Mas o que ajudou mesmo foi o fato de termos nos jogado … sim, mergulhamos de cabeça no desconhecido, começamos a praticar, mesmo desprovidos de qualquer experiência prévia.

Aproveitamos um projeto que estava prestes a começar e decidimos usá-lo como piloto.

Tudo começou como uma brincadeira. Tínhamos fichas e post-its na sala de reunião onde estávamos reunidos para a reunião de kickoff desse tal projeto. Em um determinado momento, decidi pegar o documento do produto e começei a escrever os requisitos nas fichas; enquanto isso os demais membros da equipe começavam a se juntar.

Começamos então a improvisar um Planning Poker pra estimar os requisitos descritos nas fichas.

Com os requisitos devidamente estimados, anotamos nos post-its as tarefas que precisariam ser executadas e colocamos no quadro.

Cada membro da equipe pegou a tarefa que gostaria de fazer. Ninguém delegou nada a ninguém.

E assim demos início à fase de implementação.

Ao longo do ciclo, tentamos ao máximo seguir as “regras” do Scrum. Fizemos as reuniões diárias de 15 minutos que, no início, duravam bem mais que o esperado, mas com o passar dos dias, as pessoas passaram a ser mais objetivas, falando apenas o necessário.

Conclusão

O projeto, claro, foi um sucesso. No final entregamos software funcionando para o cliente. Tudo isso num único Sprint de duas semanas.

E a empresa? Bem … a empresa aceitou pagar o mesmo treinamento que eu fiz para uma parte das equipes de Desenvolvimento e de Negócios. Hoje já estamos indo para a terceira turma!

Considerações finais

O segredo do sucesso é arriscar. Se não fosse por esse projeto piloto, talvez não teríamos conseguido adotar o Scrum aqui tão rápido.

Portanto, se você está na mesma situação em que eu estava há alguns meses atrás, não perca tempo! Vá em frente!

Mas um conselho … Causar uma má impressão no início pode arruinar completamente os seus planos; portanto, prepare-se, estude e esteja seguro o suficiente antes de propor uma mudança como essa.

Depois disso, não tenha medo de praticar o que aprendeu, mesmo que não saia como o esperado.

E sempre tenha em mente o seguinte:

“Scrum is easy to learn but really, really difficult to master”

Não deixe de ler: “Como escrever User Stories mais eficazes”

About me

Brasileiro, carioca, desenvolvedor de software, Certified Scrum Master, viciado em música e tecnologia.

Atuo como Coordenador de Desenvolvimento na área de novos projetos numa empresa de TI / VAS (SVA - Serviço de Valor Adicionado) onde nosso maior cliente é uma das maiores operadoras de celular do país.

No momento, divido meu tempo sendo Scrum Master de um dos projetos da empresa e me preparando para me tornar um Certified Scrum Professional (CSP) pela Scrum Alliance.

Photostream

  • Juliana Dutra: Oi Thiago, Após a separação da equipe de DEV da equipe de Negócios, eu (PO) deixei de partici [...]
  • Thiago Costa: Olá Debora! Obrigado pela visita e desculpe-me pela demora em respondê-la. Aqui temos uma equipe [...]
  • Débora: Olá Thiago, Fugindo do assunto (sem querer ser indelicada), você pode contar em um dos seus pr [...]
  • Thiago Costa: Erika, Obrigado pela visita. Estou preparando um novo post. Acho que voce vai gostar. Que tal me dar [...]
  • Erika: Thiago, Que bom que você continua atualizado o blog! Agora que estou fazendo o curso consigo [...]