Considerada uma metodologia de desenvolvimento ágil leve, o Extreme Programming (XP ou Programação Extrema em português) pode ser utilizado em complemento a outras metodologias, em times de qualquer nível de senioridade.
Seu foco é reduzir o tempo entre os ciclos, aproximar as partes envolvidas e fazer muito bem apenas o necessário. No Extreme Programming temos valores, princípios e práticas. Podemos definir valor como uma representação abstrata daquilo que gostamos ou não a respeito de algo.
As práticas são as ações concretas e objetivas. Por fim os princípios servem de ponte entre valores e práticas, que são diretrizes para a vida.
“Uma prática evidencia um valor”
Isso significa que podemos entender o que valorizamos a partir da nossa prática diária.
Quais são os valores do Extreme Programming?
– Comunicação
– Simplicidade
– Feedback
– Coragem
– Respeito
Neste artigo iremos abordar cada um dos valores e ver como ele é aplicado dentro da Taller. Nesta primeira parte falaremos sobre Comunicação e Simplicidade.
Comunicação no Extreme Programming
O que é?
Comunicação é o fator mais importante em um time de desenvolvimento. Quando você tem um problema, com frequência alguém sabe como resolvê-lo, e se ninguém sabe, a comunicação também será o caminho para isto.
Seja trazendo à tona o conhecimento ainda implícito no time ou descobrindo novas maneiras para resolver um problema, é crucial que os envolvidos conversem entre si para que exista a troca de ideias e engajamento em busca do objetivo comum.
A comunicação cria um senso de equipe e cooperação efetiva.
Como fazemos?
Cadências
A espinha dorsal que mantém nossos processos também é responsável por garantir a comunicação.
Seja nas dailies, onde o time passa por suas demandas e ajusta a forma de trabalho para o melhor fluxo. Nas replenishments onde analisamos a entrada de novos itens de trabalho. Ou em um status report em que apresentamos as métricas de fluxo, temos uma forma de garantir o fluxo constante de informações entre todos envolvidos.
Canais de comunicação
Utilizamos diversas ferramentas como canais de comunicação, tanto para comunicação síncrona como é o caso de ferramentas para reuniões remotas.
Como para comunicação assíncrona, onde utilizamos ferramentas de chat, repositórios de vídeos com gravações de workshops internos e reuniões, etc.
Print Discord
Recentemente o time tomou a iniciativa de utilizar o Discord como ferramenta para facilitação da programação em pares aproveitando-se do recurso de troca de salas para rapidamente tirar dúvidas com outros membros da equipe como se estivéssemos em um ambiente físico.
Também utilizamos muito a conversa assíncrona para pedir auxílio aos membros que estão trabalhando em outras demandas e ferramentas de gestão visual, como o quadro Kanban do Fluxo Unificado, story maps, e context maps.
Na verdade, após pouco tempo conversando é comum abrirmos alguma tela e começarmos a desenhar, pois, os recursos visuais facilitam muito a comunicação de ideias.
Envolvimento inter/intra equipes
Na Taller, sabemos que a integração entre as pessoas envolvidas em uma solução é essencial para que seja possível atingir o resultado esperado.
Por isso buscamos envolver o cliente no processo do início ao fim, buscando feedback rápido e validação para evitar desperdícios. Não apenas os clientes mas também buscamos inserir as equipes de terceiros/fornecedores e os próprios Talleres nos processos de análise de forma que todos estejam na mesma página e ganhe contexto de diferentes perspectivas, evitando chegar ao fim do processo com uma solução obsoleta.
Eventualmente marcamos reuniões síncronas com as partes para reforçar que o entendimento esteja claro e que qualquer nova informação venha a tona o mais cedo possível.
Simplicidade no Extreme Programming
O que é?
Esse é um dos valores mais intensos intelectualmente, resolver um problema de forma simples e graciosa é difícil. A simplicidade depende do contexto, para um time determinado desafio pode ser complexo ou simples, e aí é que está o desafio.
Não é a toa que um dos princípios do manifesto ágil é:
Simplicidade–a arte de maximizar a quantidade de trabalho não realizado–é essencial.
Para mantermos nossas soluções simples, precisamos evitar a ansiedade de implementar soluções robustas que antecipam problemas que ainda não ocorreram, por isso precisamos entender qual é a implementação necessária de fato.
Como fazemos?
Caminho crítico da demanda
Um dos lembretes que temos dentro do time da Taller é que a primeira parte da implementação seja sempre o caminho crítico da demanda, isto é, aquilo que realmente precisa ser feito.
Como time lembramos uns aos outros o tempo inteiro de se perguntar se o que estamos fazendo agora é realmente a prioridade.
YAGNI e KISS – You ain’t gonna need it – Keep it simple stupid
Dois jargões populares entre as pessoas desenvolvedoras, servem para nos lembrar o tempo inteiro de que aquele algoritmo super performático, que utiliza aquela estrutura de dados super complexa, geralmente só é útil para satisfazer nossos egos.
Será que precisamos de soluções tão rebuscadas ou estamos trabalhando com sistemas que necessitam de qualidades absurdas?
Normalmente não, essas soluções emergem de soluções mais simples, que vieram antes para resolver um problema que agora não está mais sendo suficiente.
Dívidas técnicas
O lado ruim da simplicidade é o risco de simplificar demais, deixando tudo para depois inclusive aquilo que era necessário agora.
Por isso é imprescindível que saibamos lidar com as dívidas técnicas, e fazemos isso através de issues, fluxos de priorização e critérios de aceite extra nas demandas, refactoring e a regra do escoteiro (sempre que passar por um local, deixe-o melhor do que o encontrou).
Aquilo que deixamos para depois, mas não deveríamos, será resolvido na primeira oportunidade possível, para que não tenhamos uma dívida tipo bola de neve, impagável e com juros muito altos.
Comunicação e Simplicidade
A comunicação e a simplicidade andam de mãos dadas, pois aquilo que é simples exige menos carga informacional, e a comunicação nos dá clareza para fazermos somente aquilo que é necessário.
Com esses dois valores iniciais já podemos ver o quanto Extreme Programming pode nos ajudar a evitar dar voltas desnecessárias, antecipando informações e conversas que potencialmente iriam gerar descarte e retrabalho caso realizadas mais tarde.
No futuro iremos abordar como o feedback se relaciona muito bem com isso, e também como a coragem e o respeito nos permitem termos atitudes de liderança e conversas francas para resolver os problemas de forma madura e humana, levando as necessidades de todos envolvidos em consideração.
Enquanto o próximo post não chega, aproveite para escutar nosso episódio no TallerCast sobre XP também: