- Times novos
- Times já formados, porém que não seguem nenhuma metodologia
- Times já formados, porém que não conseguem realizar entregas de valor continuamente.
Realizar 3 ou 4 encontros com todos do time (Engenharia + Produto + QA + SRE). É impressindível todos participarem de todos os encontros para auxiliar no team building e também para criar ownership dos acordos firmados. Recomendo agendar encontros de 1h30 em dias sequentes para não ficar massante e para que as pessoas possam digerir o assunto.
Cada time é um time, e pode ser que você avance mais ou menos com o time que estiver aplicando a construção do fluxo de trabalho.
- Começar explicando o que é agilidade. Nos próximos dias vamos definir nosso fluxo de trabalho. Fluxo de trabalho é sobre agilidade, que por sua vez é sobre resiliencia, que na prática é sobre o quanto conseguimos no adaptar ao longo do tempo. Podemos ver o exemplo da Kodak, uma empresa que sucumbiu a medida que as camêras digitais foram nascendo. Neste caso entendemos que a Kodak não é uma umpresa que se adaptou ao longo do tempo. Enquanto ela se manteve firme em manter a produção de camêras análogicas, outra empresas ganharam o mercado com cameras digitais. É justamente isso que queremos evitar, mesmo em uma granularidade menor, nosso time não quer ser a próxima Kodak, por isso é importante nos adaptarmos em ciclos curtos. Diferente métodos ágeis trazem diferentes abordagens sobre o tempo da iteração, também conhecido como sprint, como definido no Scrum. Como estamos falando de agilidade, não vamos nos prender a utilizar uma metodogia ou outra, vamos combinar diferentes práticas para entrarmos o que funcina para nós. É importante deixar claro que vamos acertar e vamos errar, e quando errarmos precisamos identificar e corrigir rápido, por isso minha sugestão é que nossa iteração ou sprint seja de 2 semanas, para iniciarmos. Ao longo do tempo podemos rever esse tempo. Todos confortáveis em começarmos com a iteração de 2 semanas?
Iterações de 1 semana exigem mais maturidade dos times, não recomendo começar com 1 semana. Para times de mobile também é uma boa prática ao longo do tempo diminuir a iteração para 1 semana para alinhar com release train de publicação de apps nas lojas
Vejo que há 3 cerimônias importantes para começarmos a fazer.
- Planejamento:
- Reunião de 1h com todos do time a cada 2 semanas.
- PM facilita a reunião.
- Todos contribuem para a discussão e priorização.
- É importante que engenharia traga itens de débito técnico para o planejamento
- É importante já definir o dia da semana que será.
- Daily
- Reunião de 15 min todos os dias com todos os participantes do time.
- Minha sugestão é deixar o clássico das 3 perguntas do scrum de lado, pois essa prática foca no que as pessoas estão fazendo, e neste caso, não queremos que seja uma reunião de status report, mas sim algo que ajude o time a avançar com as demandas até produção.
- Sugestão de dinâmica para daily é utilizar o Ask Kanban: https://www.cursospm3.com.br/blog/reunioes-de-daily-cards-pm3/
- Esta prática foca em entrega de valor, senso de urgência, mostrar coisas que as pessoas estão fazendo fora do quadro e remover impedimentos.
- Facilitador: vamos aproveitar e já definir o facilitador desta reunião, neste caso, minha sugestão é rotacionar toda semana. Ou seja, a cada semana, uma pessoa realiza as perguntas, direciona a reunião, e puxar o foco da reunião. Pode-ser começar a rotacionar por ordem alfabética, assim fica justo para todos.
- Retrospectiva
- Esta cerimônia será crucial para inspecionar e adaptar nosso processo/fluxo de trabalho e práticas, além de outros incomos que estão acontencendo ou que aconteceram durante a iteração.
- Ao final das duas semanas é importante entender o que deu certo e o que precisa melhorar.
- É importante já definir o dia da semana que será. Minha sugestão é que seja um dia antes do próximo planejamento, assim cria um senso de trabalho fechado.
- Não necessariamente uma iteração precisa começar na segunda e finalizar na sexta-feira da semana seguinte, isso depende do time e da dinâmica do time. Pergunte ao time qual dia seria melhor.
- Sugestão de dinâmica padrão:
- 3 colunas:
1. O que foi bom?
2. O que podemos melhorar?
3. Ações
- Dinâmica:
1. Criar um quadro virtual com as colunas acima para pessoas incluírem os card nas colunas 1 e 2.
- Possíveis ferramentas: https://easyretro.io/, https://www.parabol.co/
- Os cards não podem estar visíveis enquanto as pessoas adicionam os itens (evitar viés)
2. Compartilhar o link do quadro para as pessoas 1 dia antes ou deixar 10 min iniciais da cerimônia para participantes incluirem os cards.
3. Ler todos os cards e mesclar assuntos/tópicos simulares.
4. Solicitar aos participantes que votem nos cards que serão discutidos (sugestão de 3 votos por participantes)
5. Discutir os cards mais votados e criar ações com responsáveis na coluna 3.
- Sugestão de outras dinâmicas: https://www.funretrospectives.com/
- Explicar que vamos utilizar kanban, que é um sistema puxado. O objetivo é levar o quanto antes e mais rápido os itens da esquerda para a direita. Idealmente itens não voltam para a coluna anterior, incluive um blocker.
- Definir com o time a ferramenta que você utilizarão para o Quadro Kanban (se quiser eu adiciono a história aqui para explicar a importancia do quadro).
- Na escolha da ferramenta, escolha uma que:
- o time se sinta confortável em utilizar no dia a dia.
- seja simples
- seja possível coletar métricas (isso vai ajudar mais para frente).
- Criar uma quadro kanban limpo.
- Pedir para o time descrever todos os passos desde a ideia até deploy em produção de uma mudança.
- Se quiser focar no delivery, pode-se perguntar para o time: O que eu preciso fazer para que uma mudança em uma linha de código chegue até produção?
- Conforme o time for explicando, comece a definir as colunas na ferramenta. Não se preocupe, posteriomente vocês vão renomeando e corrigindo. Se a ferramenta for o Jira isso é mais complicado de fazer ao vivo pq demanda configuração, neste caso, sugiro utilizar o https://easyretro.io/ para definir as colunas.
- Alguns questionamentos são imporantes aqui:
- Em que momento/coluna fica o card quando um PR está aberto aguardando revisão?
- Em que momento/coluna fica o card quando é testado por QA? (times que dependem de um tester tendem uma fase de teste manual. A ideia e evidênciar isso no processo/colunas para provicar o time para automatizar esse passo).
- Em que momento/coluna fica o card quando o card é mergeado na branch principal? (para que times que utilizam gitflow, questionar sobre quando o card vai para develop ou main)
- Em que momento/coluna é criada uma tag no repositório? e fechamos uma versão?
- Em que momento/coluna é realizado o deploy em staging/UAT/homolog?
- Em que momento/coluna é realizado o deploy em Prod?
- O que é done para nós? (pra mim done é o usuário utilizando o código modificado)
- Alguns questionamentos são imporantes aqui:
- Algumas etapas (colunas) do processo precisam de acordos de quando um card entra ou sai e segue para a próxima coluna.
- Ir coluna a coluna e descrever com o time o DoD e DoR. Eventualmente haverá apenas um nas colunas.
- Importante: na última coluna, em que o card será fechado, definir claramente com o time o que é done.
- Importante: descrever se é esperado que o PR esteja revisado, mergeado. Descrever em qual ambiente a mudança está implantada.
Definir os tipos de trabalho com o time, e descrever cada um deles para não haver confusão posteriomente. Criar labels para cada tipo de trabalho. Isso ajudará a coletar métricas. Alguns exemplos:
- user story ou feature: New features or enhancements for the product
- bug: Something isn't working
- data: Item for data analysis
- incident: Incident on production
- tech (technical debit): Technical debit or security issues
Classes de serviço são como raias em uma piscina. Imagine uma turma com nadadores iniciantes, intermediários e avançados. Não é possível misturar todos os nadadores em uma raia só, se não a velocidade entre eles será comprometida. No kaban a ideia é a mesma, em alguns momentos precisamos de uma raia para aumentar o ritmo e ganhar velocidade. Em geral, a única que eu costumo definir no inicio é o expedite. O Expedite é necessário, pois eventualmente algum problema ou alguma demanda urgente pode acontecer. O Expedite é como se fosse a faixa de onibus para os taxis, pois se a via estiver com transito, o taxi pode entrar na faixa de onibus e idealmente chegará mais rápido. Outro exemplo é a faixa da esquerda na Autobahn na Alemanha, é uma faixa exclusiva sem limite de velocidade, entra ali quem precisa chegar antes ao destino. No Expedite, o time todo deve ser informado que um item entrou e o time se organiza para parar algum trabalho que esteja em andamento para imediatamente começar o item em expedite. Em algumas situações o time todo precisa ser envolvido.
Criar um label:
- expedite: Item with this label take high priority
Outro exemplo é uma classe de serviço para itens com data fixa de entrega, isso pode ocorrer em times que atuem com algo relacionado a legislação/banco.
- Blocked Pensando que estamos em um sistema puxado, ter uma coluna de blocked não faz sentido, pois um item bloqueado é uma etapa/fase do processo, mas sim um problema que ocorreu durante o processo. Desta forma, sugiro criar uma label:
- blocked: Item with this label shows that is blocked
Explicar para o time que temos que fazer o máximo possível para desbloquear o item o quanto antes. Pense em uma linha de produção de carros, se a parafusadeira quebra no momento de adicionar a porta no veículo? isso irá parar e atrasar a produção toda, aqui a ideia é a mesma, ou seja, precisamos substituir a parafusadeira o quanto antes. Exemplos comuns são:
-
acesso a ambientes
-
problema com máquina
-
dependencia de outros times (pode-se aplicar inner-sourcing para remover)
-
Unplanned Algo que vejo que é interessante é criar uma label para itens que não foram planejados durante a sprint. Em ferramentas como Jira essa problema já é evidênciado pela ferramenta, mas para outras ferramentas é interessante mapear os itens que entraram durante a iteração após a reunião de planning. Isso irá ajudar o time a entender se estão planejando bem ou não, e se há muita interferencia externa.
Esse é um resumão de vários conceitos. Tem vários exemplos que costumo descrever durante a dinâmica.
- Criar agendamento recorrente da cerimônia de daily
- Criar agendamento recorrente do planejamento - 1h a cada 2 semanas.
- Criar agendamento recorrente da retrospectiva - 1h30 a cada 2 semanas.
- Criar quadro kanban com o fluxo definido pelo time.
- Criar labels para identificar cada tipo de trabalho
- Criar labels para classes de serviço.
- Criar demais labels