A fantástica fábrica do desenvolvimento ágil
Atualmente é quase uma regra, TODA empresa se diz defensora de metodologias ágeis e quase que em todas as vagas abertas, pedem conhecimento em Scrum, Kanban, Lean, XP entre outras 50 metodologias existentes no mercado.
Trabalho com metodologia ágil a 5 anos e decidi trazer aqui algumas visões e algumas soluções para que possamos parar de sofrer com Métricas como Cycle time, Lead time, story points, etc.
O Grande PROBLEMA
Muitas empresas que estão trabalhando atualmente com metodologia ágil, veio do modelo cascata, sendo assim, algumas delas não conseguiram entender qual o problema que o ágil veio solucionar e acaba utilizando um modelo cascata dividido em cerimônias e ritos ágeis.
E qual problema o ágil veio solucionar?
Mensurar o tempo que será necessário para desenvolver determinada tarefa sempre foi nosso calcanhar de Aquiles. Nós 'malemal' temos uma noção do tempo que levaremos, mas nossa precisão de tempo é horrível. Podemos imaginar o pior cenário possível e falar que levaremos 10 dias e quando começarmos o desenvolvimento, levamos 2, como podemos mensurar o melhor cenário possível e mensurar 2 dias, ai teremos diversos problemas e levaremos 10. Sendo assim, o ágil nos ensina a olhar para o passado para planejar o futuro, complexo? calma, vou detalhar e explicar abaixo.
Como posso quebrar as primeiras tarefas em entregáveis?
Primeiro passo é criar um padrão inicial para poder melhorar esse padrão a cada ciclo. Minha sugestão inicial é: Quebre as tarefas de uma maneira que elas possam ser desenvolvidas em 1 dia de trabalho.
Exemplo:
Estamos criando o tabnews, como podemos "quebrar" ele em entregáveis?
- ÉPICO-1: Versão inicial do Tabnews
- STORY-1: Barra superior contendo logotipo
Aqui não será adicionado itens de menu, nem login, nem busca, nem pontuação, somente a logotipo - STORY-2: Lista das postagens ordenado por data da postagem limitado em 30 itens
Aqui terá somente o titulo a postagem com um espaço entre elas - STORY-3: Paginação da lista a cada 30 itens
Aqui será somente a paginação, repetindo o mesmo layout da lista anterior - STORY-4: Rodapé contendo a logo junto ao ano atual
Não terá itens de menu, somente a logo - STORY-5: Tela de detalhe da postagem com titulo e conteúdo
Não terá voto, não terá data, não terá nada alem do titulo e conteúdo
- STORY-1: Barra superior contendo logotipo
Preste bastante atenção nos comentários abaixo das tarefas, aqui, não terão funcionalidades adicionais, o primeiro desenvolvimento será o básico do básico, qualquer possível melhoria deverá ser tratado como melhoria.
Como definir os próximos passos após o primeiro desenvolvimento?
Precisamos de feedback do usuário, durante o uso, os usuários entenderão quais são as principais dificuldades e melhorias que precisam ser implementadas. Você não precisa deduzir nada, escute o seu usuário.
Quais os tipos de tarefa mais comuns?
Existem diversos tipos de tarefas, algumas delas entregam valor visivel ao usuário e outras entregam valor invisivel ao usuário.
Exemplos:
Valor visivel -> Campo de busca onde o usuário poderá buscar por um conteúdo específico
*O usuário conseguirá interagir com a funcionalidade, será uma funcionalidade "palpável" para ele.
Valor invisivel -> Melhoria na performance da consulta ao banco de dados, reduzindo em 30% o tempo gasto para localizar um conteúdo.
O usuário não consegue ver nenhuma mudança no site, porém, sua experiência de uso será muito melhor
Abaixo, alguns tipos de tarefas que eu já vi e gostei do uso:
-
Tarefas "mãe"
- Story: Nova funcionalidade visível, algum entregável e testável.
- Technical Debt: Durante o desenvolvimento foi identificado algo que poderia ser melhor, não deve ser corrigido durante o desenvolvimento da estória e sim, criado um débito técnico para solução futura(se necessário).
- Technical Solution: Alguma melhoria de performance e/ou usabilidade que não será visivel pelo usuário final. Uma inclusão de atributo, melhoria de consulta, etc.
- Task: Criação de um banco de dados, servidor, repositório, etc. Algo que seja necessário para o negócio mas não será visivel ao usuário.
- Bug: Quando alguém da equipe identificou um problema no fluxo que precisa ser corrigido.
-
Tarefas "filho"
- Sub-Task: Quando uma das tarefas acima terá mais de uma ação, ela poderá conter sub tarefas. Ex.: 1. Criar titulo do tópico, 2. Criar descrição do tópico, 3. Realizar testes
- Sub-Bug: Quando durante o pré teste, o QA ou próprio Dev identificou um problema que precisa ser corrigido, ele cria um sub-bug para sinalizar o time que ele terá um tempo a mais que será gasto naquela atividade.
Mas se eu mesmo encontrei um bug, eu já corrijo, não vou abrir um bug para isso
Vamos lá, imagine que você está dirigindo seu carro para ir a uma festa, segundo o GPS, o trajeto será feito em 15 minutos. Quando você chegou a uma bifurcação, você acabou pegando a saída errada. Tudo bem né? sem problemas, só fazer o retorno e pegar a certa. Sim, mas o tempo estimado já não será mais de 15 minutos e sim, 20, ou mais, dependendo de onde você conseguir fazer o retorno.
BUG NÃO É O FIM DO MUNDO
Vocês precisam abrir, documentar, escrever para que possam aprender com ele e evitar que volte a acontecer coisas similares no futuro.
O que é mais correto utilizar? Scrum? Kanban? Qual?
Não existe uma receita de bolo para isso. Depende das pessoas que fazem parte do time, do produto que está sendo desenvolvido, do público alvo, etc. Os fatores são MUITOS. Você precisa implementar um processo inicial e ir adaptando ao seu negócio.
Minha dica é: Vai utilizar Scrum? Estude tudo sobre, implemente 100% Scrum no fluxo e em seguida vá polindo e adaptando ao seu negócio.
Já vi empresas que alguns times utilizam Scrum, outros Kanban, Outros 'Scrumban' e todos os times funcionam na sua própria maneira entregando valor ao usuário.
E como eu, mero integrante do time, posso implementar isso aqui na empresa, se meus líderes não estão nem ai?
Bom, contra fatos, não há argumentos. Estude, utilize no seu dia a dia os conceitos do ágil, aos poucos, compartilhe com seus colegas suas metodologias, quando menos esperar, o time estará trabalhando de uma maneira ágil e entregando valor ao negócio sem fazer 500 horas extras por mês.
Como posso implementar o ágil no meu trabalho se o time não usa?
Vamos supor que te passaram a tarefa de criar um endpoint de listagem de tópicos que recebe no payload os campos de busca, usuário e ordenação e devolve no response titulo, data da postagem, descrição e usuário que postou. E para isso, te deram o prazo de 5 dias(um absurdo, ou não).
Pegue essa tarefa e divida da seguinte forma:
- Criar Controller do endpoint sem receber nada e devolvendo vazio.
- Criar consulta no banco de dados trazendo as postagens
- Criar o service que vai devolver ao controller o resultado da consulta
- Criar o payload por usuário
- Criar o payload por busca
- Criar o payload da ordenação
Dessa forma, você terá uma melhor visão da porcentagem de conclusão a cada dia e todo dia saberá qual a sua chance de concluir a tarefa dentro do prazo esperado. Sendo assim, caso surja um impedimento logo no primeiro dia, poderá reportar ao seu líder que a tarefa irá atrasar explicando os motivos.
A Vinicius, mas na teoria é fácil, quero ver na prática
Sim, na teoria sempre é mais fácil, mas a minha sugestão final é:
NÃO TENHA MEDO DE ERRAR
Tente, mude, tente novamente, mude, tente novamente, e assim por diante, mas não deixe de tentar e melhorar.
O processo NUNCA estará perfeito, mas poderá ser cada vez melhor a cada ciclo.
Um grande abraço a todos!
Se quiserem ajuda com alguma coisa ou tiverem alguma dúvida, sintam-se à vontade para perguntar!