Garantindo a entrega com um time ágil em uma startup em crescimento

Publicado por Danilo Delponte no dia agile, gestão

10 deploys por dia em média e crescendo. É a taxa de atualização atual do RD Station, nosso SaaS. Entre correções, melhorias e novas funcionalidades, pequenas e grandes, cinco times de alto desempenho trabalham hoje na área de produto da Resultados Digitais. Quando entrei na empresa existia apenas um. Agora, como Scrum Master de um deles, compartilho algumas boas práticas que aprendi durante esse tempo, em busca da entrega 100%.

Aqui na Resultados Digitais funciona assim: todo mês planejamos com nosso PO (Product Owner) um pacote de tarefas que cada time deve entregar. Quebramos esse pacote em pequenas tarefas que são distribuídas em quatro sprints de uma semana. Cada sprint é considerada uma entrega parcial do pacote e acompanhada com métricas e relatórios. Entre as sprints, os times fazem uma reunião para avaliação e replanejamento. Ao final, discutem os erros e acertos, buscando planejar melhor o próximo pacote e garantir as entregas.

Release na Resultados Digitais

Não posso dizer que seguimos o Scrum à risca. Na verdade, para a maioria das pessoas que perguntei se trabalhavam com Scrum, a resposta foi: “mais ou menos, é uma adaptação”. Isso faz parte do trabalho com metodologias ágeis, adaptar as melhores práticas para o seu contexto, de forma eficiente, flexível e escalável.

Dado esse cenário, não pretendo ser fiel nem me ater às definições do Scrum. O que segue são aprendizados práticos que obtive nesse time excepcional, durante o ano em que a Resultados Digitais triplicou de tamanho.

Time for standup, you guys.

Não seja apático. Independente da metodologia, práticas ou ferramentas que utilizam, elas não garantem nada se vocês não forem capazes de agir quando é preciso. Se é visível que algo está fora do planejado e você não está tomando uma atitude, se mexa. Caso contrário, seu time vai morrer em batalha.

É imprescindível tomar decisões e atitudes para manter as tarefas dentro do planejado sempre que um obstáculo ou desalinhamento aparece. É papel do Scrum Master ter essa visão constante para que o time mantenha-se focado. Ao mesmo tempo, deve haver com frequência um momento de avaliação e replanejamento com todos os integrantes para que esteja claro o cenário atual e para que participem ativamente da tomada de decisão.

A melhor forma de fazer isso é através de standup meetings diárias em horários que permitam o replanejamento e ação. Nosso time se reúne todos os dias às 13h ao redor do nosso kanban de tarefas, onde tomamos decisões imediatas para garantir a entrega avaliando os 3 seguintes tópicos:

  • O que já foi entregue?

    • Foi comunicado ao cliente?
    • Gerou aprendizado?
    • Teve imprevistos?
    • Foi dentro do planejado?
  • O que cada um está fazendo?

    • Faz sentido?
    • Está dentro do prazo?
    • Tem algum impedimento?
    • O que podemos fazer como time para otimizar a entrega?
  • O que ainda falta fazer?

    • Está claro para todos?
    • Temos recursos suficientes para entregar no prazo?
    • Precisa de replanejamento?

Se uma tarefa foi planejada para ser entregue num único dia e no segundo ela está “quase terminando”, lembre-se disso: otimismo é coisa do capeta. Busquem uma forma de o time ajudar para que a tarefa seja entregue o mais rápido possível, antes que afete o restante do planejamento.

Sejam pragmáticos, pratiquem o lean e não se afundem em detalhes.

Um bom exercício é olhar para as tarefas pendentes e projetar quais conseguirão entregar a cada dia: amanhã, depois de amanhã e assim por diante. Sprints de uma semana tem apenas 5 dias, não é dificil projetar.

Se alguém estiver travado em algo onde mais braços não ajudam, não jogue tempo fora, pergunte-se qual o objetivo daquela tarefa e qual o valor que estão entregando. Não fique preso à abordagem inicial, dê zoom out e pense fora da caixa. Repriorize as tarefas, replaneje, comunique.

Não contem com milagres. Não esperem o dia da entrega pra avisar que não vão cumprir o planejado; encontrem uma solução na hora ou, se não for possível resolver dentro do prazo, identifiquem as causas para evitar que isso aconteça novamente e exponham o problema, realinhando expectativas com seu PO, cliente ou responsável.

Acompanhe dia a dia, projete as atividades e, se algo começar a sair dos trilhos, tome decisões imediatas para resolver antes que o problema se torne maior.

Agora, há três coisas que podem afetar uma entrega:

  • Problemas externos ao time
  • Falha na execução
  • Falha no planejamento

É difícil acompanhar a execução e garantir uma entrega ideal se não houver uma visão clara das tarefas e um planejamento bem feito.

Keep calm, I have a plan.

Há alguns pontos que devem estar bem claros em todas as tarefas do planejamento. Quanto antes forem definidos, maiores as chances de tudo ocorrer dentro do previsto. São eles:

  • Definição da entrega
  • Cenários atendidos
  • Abordagem da solução
  • Prioridade da tarefa

A definição da entrega é o que vai dizer se a tarefa está de fato pronta ou não. Há tarefas que não consistem apenas em colocar um novo trecho de código no ar, mas executar um script, fazer uma migração no banco, validar cenários em produção e comunicar clientes. A tarefa não pode ser aceita como entregue até que isso seja confirmado, ou então há grandes chances de ela te fazer uma surpresa depois de “pronta”.

Todos os cenários devem ser bem entendidos para que não se descubra na última hora que a solução projetada não atende às necessidades do cliente, que as estimativas foram erradas, ou pior, que já está tudo no ar e alguém vai ter que passar a noite corrigindo um problema.

A abordagem da solução, tanto de design quanto de programação, deve ser discutida e bem definida, principalmente para mudanças grandes, complexas, ou quando se trata de uma funcionalidade nova ou desconhecida do sistema. Isso ajuda o time a poupar retrabalho e uma possível dor de cabeça. Se tiver acesso a especialistas no contexto da tarefa, inclua-os na discussão.

Por último, a prioridade é importante para que estejam claros os objetivos principais do time e para que na ocorrência de imprevistos seja possível tomar decisões e direcionar esforços sem que haja dúvidas.

No desenvolvimento de software é difícil ter 100% de certeza que A vai encaixar em B e que os usuários não encontrarão um fluxo inesperado. Ter uma fase de projeto e um processo de garantia de qualidade bem definidos ajuda, mas por melhor que sejam suas estimativas tenha a ciência de que imprevistos vão aparecer.

Em um ambiente ágil e sem burocracia seu planejamento será tão bom quanto a sua capacidade de prever problemas e replanejar on the fly.

Conhecendo nossa capacidade e o fluxo de tarefas que chegam até nós, deixamos uma “gordura” em cada sprint para tarefas não planejadas. Quando isso acontece, nós a marcamos como “não planejada” para mantermos controle sobre elas.

Tarefas não planejadas nunca são boas, mas de vez em quando aparecem. Se surgirem muitas é preciso deixar mais espaço no planejamento e entender porque isso está acontecendo. Nesses casos o Scrum Master pode atuar bloqueando o time e alinhando com PO ou clientes.

Se nenhuma tarefa fora do planejado entrar e sobrar espaço, alinhamos com o PO e puxamos algumas tarefas do backlog. Se o time está sempre fazendo extras, ótimo, a capacidade é maior e podemos aumentar o número de tarefas no próximo planejamento.

Quando a capacidade do time não está clara, procuramos nivelar por baixo. É melhor entregar extras e saber que você pode planejar mais na próxima do que não entregar tarefas planejadas.

Quanto mais longe a entrega, mais difícil de prever complicações. Podemos, por exemplo, enfrentar um impedimento que atrase as tarefas da primeira sprint e afete as seguintes. Por isso buscamos planejar considerando 90% da capacidade do time para a primeira sprint, 80% para a seguinte, 70% para a terceira e assim por diante, reajustando em cada sprint planning.

Release na Resultados Digitais

Quebrar bem as tarefas significa ter entregas contínuas ao invés de uma única entrega-monstro, difícil de acompanhar e validar. Por vezes entregamos uma pequena parte da funcionalidade, mesmo que ainda não esteja disponível para o cliente, para garantir que aquela peça foi concluída e que não precisamos mais nos preocupar com ela.

Por fim, é importante acompanhar e analisar o resultado de cada sprint, medir a capacidade do time, e tirar aprendizados. Não tenha medo de replanejar. Se algo não for entregue dentro do estimado, entenda o motivo e evite no próximo planejamento.

Um plano bem feito e acompanhamento diário não são suficientes se o time não estiver comprometido, motivado e unido.

Um por todos e todos por um

Conheça seus colegas, as capacidades e dificuldades de cada um e busquem formar um time completo, onde os membros se complementam. O foco e o trabalho em equipe são o melhor caminho para alcançar os objetivos.

Saiba ser chato quando alguém destoar do time e dê feedbacks. Essa é uma técnica de grande importância para o crescimento profissional e geralmente é subutilizada. A coesão do time e o aperfeiçoamento das qualidades pessoais e profissionais tendem a evoluir quando adota-se essa prática com frequência.

Em toda sprint planning temos um tempo dedicado a uma rodada de feedbacks com todo o time. São comentários pessoais, diretos, práticos e sem mimimi. O objetivo é alinhar um time ágil e não gerar discussão, então não há direito à resposta. O feedback deve ser entendido como um presente: receba, reflita e aceite se fizer sentido para você.

Para o Scrum Master, é importante estar sempre presente e ativo, não assumir tarefas que o impeçam de acompanhar o time, e saber direcionar sempre que algo estiver desalinhado.

Conheça a si mesmo, peça feedbacks e aprenda com seus erros. Utilize os valores da empresa como guia. A Resultados Digitais tem um código de cultura bem forte que buscamos seguir dia a dia.

Se o time estiver alinhado e estiverem claros o cenário atual, os objetivos, prioridades e o papel de cada um, ele se torna auto-gerenciável.

Conheça seu time, acompanhem as tarefas de perto, ajam diariamente, aprendam com os erros, replanejem, repitam.

Danilo Delponte

Danilo Delponte

Full Stack Developer

Comentários