From 19melissa68 @ Flickr

Quero compartilhar com vocês um conceito que normalmente contradiz o senso comum, e que percebo em quase todas as consultorias que realizo, e em 100% dos cursos de Scrum que ministro. É algo básico, mas que normalmente não é feito, por soar tão contrasenso: fazer primeiro o que o cliente mais valoriza. E não só fazer, mas deixar pronto.

Quando uma iteração inicia já temos as histórias e boa parte das tarefas definidas e priorizadas pelo cliente. Mas não é comum que todo o time busque entregar primeiro o que é mais importante, o que retorna mais valor. Muitas vezes, quando as pessoas que são parte de um time ainda inesperiente podem escolher trabalhar no que bem entendem, nem sempre o que está mais alto no quadro é escolhido, outros critérios são usados, e geralmente eles são subjetivos e não estão claros para todo o time.

Vou usar uns exemplos com um card wall. Vamos dizer que terminamos o planejamento da iteração, e selecionamos três histórias, 1, 2 e 3, e conseguimos derivar 11 tarefas.

O time coloca os cartões na parede e fica mais ou menos assim (clique para ampliar e ver a história toda focando nas imagens):

Card wall no início da iteração, com quatro tarefas na história 1, três na história 2, e quatro na história 3.

Cenário 1: o time começa a trabalhar, um membro do time vai ao quadro e pega uma tarefa:

Primeira tarefa em andamento

E em seguida mais algumas tarefas começam a ser trabalhadas por outros membros do time:

Duas tarefas em andamento na primeira história, duas na segunda

E elas começam a ser entregues, primeiro duas:

Duas tarefas entregues, uma da primeira história, uma segunda, e mais duas em andamento

E mais duas:

Quatro tarefas concluídas, duas da primeira história, duas da segunda

E o time pega mais coisa pra fazer:

Time pegou mais 4 tarefas pra fazer, uma da primeira história, uma da segunda, duas da terceira. Há ainda uma tarefa da primeira história parada.

Pare!

From Chris Campbell @ Flickr

Temos desperdício.

Nesse momento temos 4 tarefas concluídas. E quanto de valor o cliente recebeu? Zero! Se o projeto fosse cancelado agora, teríamos zero de retorno. Se os desenvolvedores ficarem doentes, teremos zero de retorno. Se o time encontrar um impedimento e tiver que parar, teremos zero de retorno. Se precisarmos colocar em produção AGORA, não temos nada pronto. Temos ZERO de retorno.

Não temos nenhuma história pronta.

Além disso, depois de concluir as tarefas, o time pegou mais quatro tarefas, mas deixou uma tarefa da história 1, a mais importante para o cliente, parada. Em vez disso, uma tarefa da história 2, e duas da história 3, a menos importante, entraram em andamento.

Primeiro vamos ver como evitar isso. Rewind:

De volta ao card wall no início da iteração, com quatro tarefas na história 1, três na história 2, e quatro na história 3.

Cenário 2: o time pega algumas tarefas pra fazer, todas da história 1, a mais importante. Play:

Time começa a atuar sobre as 4 tarefas da primeira história, nada da história 2 ou 3 está em andamento.

E termina algumas. Como não há mais tarefas na história 1 para fazer, ou eles pareiam para terminar a história 1, se já não estiverem fazendo isso (deveriam estar), ou pegam alguma tarefa da história 2:

Time completa 3 tarefas da primeira história, e pega mais 3 da segunda história. Ainda há uma tarefa da história 1 em andamento.

E finalmente terminam a primeira história:

Primeira história fica pronta.

E já começam a terceira, já que a segunda já está em andamento:

Uma tarefa da história 3 é puxada.

Stop de novo!

From Marcin Wichary @ Flickr

Ok, mesmo esforço despendido, 4 tarefas (assumindo que elas são do mesmo tamanho). Cancelamos o projeto agora. O que temos entregue? Uma história completa, a mais importante para o cliente. Ela está pronta!

E não é só no caso de cancelamento do projeto, doença, impedimentos em geral, que isso faz diferença. Trabalhando no que é mais importante primeiro também permitimos ao cliente mudar de ideia a custo zero. Se temos muita coisa em andamento e nada entregue, e o cliente resolve que não precisa mais de alguma coisa podemos simplesmente jogá-la fora. Por exemplo, se não precisamos mais da história três e estamos no cenário dois, simplesmente jogamos ela fora. No primeiro cenário isso significaria jogar trabalho já realizado no lixo. Há ainda o caso de encontrar um problema na última tarefa da história um. Se isso acontece, o tempo para resolver diminui, e corremos o risco de entregar as histórias fora da ordem de prioridade, ou seja, entregamos as histórias 2 e 3, mas não a história 1. Quer ver um cliente nervoso? Faça isso!

O foco é concluir uma história que esteja em andamento o quanto antes, é terminar a história, deixar ela pronta, terminar as tarefas e alcançar a definição de pronto do projeto.

Alguém certamente dirá: mas há dependências! Sim, é fato, dependências existem. Às vezes é simplesmente impossível trabalhar nas quatro tarefas da primeira história de uma vez, porque uma tarefa pode depender da conclusão de outra. O trabalho do time é buscar maneiras de atingir paralelismo, de forma a evitar o desperdício que a dependência pode causar. Não vou entrar em detalhes de como fazer isso neste post, mas é possível. Algumas destas formas geram retrabalho, outro tipo de desperdício. A grande questão então passa a ser: que desperdício é pior?

Outra coisa que pode acontecer é o time fazer mini-waterfalls dentro da iteração se focarmos muito nas dependências, o que evidenciaria que temos um time que não é verdadeiramente multidisciplinar. Algo pra resolver.

Histórias que ficam paradas por algum tempo, como no cenário 1, ainda carregam o peso do esquecimento. Quando alguém resolver atuar naquela última tarefa, será que não vamos gastar muito tempo tentando lembrar o que era pra fazer?

Uma das formas de minimizar estes problemas é trabalhar em histórias menores. Quanto menor for a história mais rápido ela vai ser entregue, liberando o time para já começar a atuar na seguinte. Iterações mais curtas também ajudam o time a focar na entrega.

A recomendação de trabalhar no mais importante primeiro às vezes causa alguns problemas nos times, porque algumas pessoas não querem atuar em qualquer tarefa, elas querem trabalhar nas tarefas que elas gostam mais, e não necessariamente tais tarefas são as mais prioritárias para o cliente. É algo para refletir, e é por isso que eu coloquei que é algo que acontece em times ainda em amadurecimento, já que falta a visão de foco na felicidade do cliente.

É sempre bom lembrar que o cliente tem um motivo para colocar uma história como mais importante que a outra, e esse motivo normalmente é, de alguma forma, relacionado a retorno sobre investimento (ROI). Nem sempre o time tem a visão completa do ROI, e se este for o caso, há uma deficiência de comunicação, há informações que não estão chegando do cliente até o time, e deveriam estar. E isso também é assunto para outro post.

Fica então a recomendação: diálogo, respeito às prioridades do cliente e buscar finalizar o quanto antes histórias em andamento são excelentes forma de evitar desperdício, e uma das grandes razões que times ágeis são mais produtivos e entregam mais valor que times tradicionais.

Pense nisso.

Giovanni Bassi

Arquiteto e desenvolvedor, agilista, escalador, provocador. É fundador e CSA da Lambda3. Programa porque gosta. Acredita que pessoas autogerenciadas funcionam melhor e por acreditar que heterarquia é mais eficiente que hierarquia. Foi reconhecido Microsoft MVP há mais de dez anos, dos mais de vinte que atua no mercado. Já palestrou sobre .NET, Rust, microsserviços, JavaScript, TypeScript, Ruby, Node.js, Frontend e Backend, Agile, etc, no Brasil, e no exterior. Liderou grupos de usuários em assuntos como arquitetura de software, Docker, e .NET.