O que é "enxame"?

42

Eu ouvi enxames mencionados no contexto de programação ágil ou extrema. Parece ser um complemento para o emparelhamento.

O que exatamente é isso? Quando deve ser aplicado? Como você faz isso bem?

Jay Bazuzi
fonte
@ Codeode: Minhas pesquisas no Google produziram poucos resultados relevantes e nenhum com uma resposta clara à minha pergunta. Se houver uma resposta canônica por aí, então, por todos os meios, poste aqui.
Jay Bazuzi
Há uma frase de dublagem no videogame de estratégia "Sword of the Stars", onde o pessoal da formiga / mantis / colméia diz ao você emitir um comando de pesquisa "Estamos inundando o laboratório com sua majestade". Sempre presumi que a intenção era aterrissar com uma sensação de ironia dramática.
Erik Reppen

Respostas:

43

A ideia é que todos da sua equipe trabalhem na mesma história ao mesmo tempo. Em vez de todo mundo se concentrar em tarefas diferentes, todo mundo se concentra em uma tarefa de cada vez até que seja concluída. Então eles passam para a próxima coisa, onde todos trabalham juntos.

Isso ajuda as equipes que lutam para concluir as histórias antes do final do sprint. Muitas vezes, as equipes terminam 80% de todas as histórias, mas nenhuma está completa. Isso é menos útil do que terminar completamente 80% das histórias, uma vez que histórias inacabadas não têm (efetivamente) nenhum valor para o usuário final. É mais fácil obter histórias completas quando todos da equipe estão se concentrando em uma história de cada vez. Essa é a motivação por trás do enxame.

Existem algumas dificuldades aqui. Por exemplo, o controle de qualidade nem sempre pode testar as coisas antes de serem criadas (ou mesmo projetadas). Nesse caso, você deve estabelecer um design juntos desde o início e, em seguida, o controle de qualidade pode escrever testes (com falha inicial) no design e não na implementação real.

Oleksi
fonte
+1. Interessante. Você já viu esse trabalho na prática?
CodeART
2
Outra maneira de dizer que é "ter o mínimo de trabalhos em andamento possível", certo?
Jay Bazuzi
1
@CodeWorks Sim. Nós o usamos onde atualmente trabalho com algum sucesso. É uma maneira bastante divertida de desenvolver, porque é orientada a recursos. Todo mundo está trabalhando em direção ao mesmo objetivo ao mesmo tempo, então eu descobri que ele promove muito bem o trabalho em equipe.
Oleksi
1
@JayBazuzi Sim, praticamente. Ter apoio de equipe completa também é importante.
Oleksi
9
@ CodeWorks, de maneira alguma. De fato, provavelmente aumentou. Como todos estavam trabalhando tão unidos, havia menos bloqueadores que surgiram. Quando surgiu algo, pelo menos alguém da equipe sabia como resolvê-lo e conseguiu fazê-lo imediatamente, pois tinha toda a atenção. Além disso, a alternância de contexto geralmente prejudica sua produtividade. Apenas pergunte a você CPU. : P
Oleksi
10

Enxame apenas se refere ao fato de que várias pessoas trabalham juntas para concluir uma tarefa ou história. Na minha experiência, isso não é algo que você faz com frequência.

Normalmente, cada membro da minha equipe trabalha em uma tarefa diferente e / ou em uma história diferente. Se alguém está ficando para trás, ou se há um desejo de terminar uma tarefa ou história mais cedo, outras pessoas deixarão de trabalhar em outras tarefas e "enxamearão" para concluir a tarefa, o que significa que todos eles trabalharão juntos em uma única tarefa ou história até que está completo.

Recentemente, tivemos um pequeno número de histórias que eram um trabalho bastante chato e desinteressante. Dei à equipe um pequeno incentivo (pizza) e um prazo (final do dia) para terminar o trabalho, para que eles pululassem na história e desistissem de pelo menos alguns dias de trabalho em uma tarde. Eles fizeram o trabalho e saíram do caminho mais cedo, depois cada membro da equipe voltou ao que estava trabalhando. Eles receberam um almoço grátis, eu fiz um trabalho cedo que poderia ter se arrastado devido à natureza monótona, e a equipe ficou à frente do seu sprint. Ganha-ganha-ganha.

"Enxame" nada mais é do que um termo chique para "ei, vamos ajudá-lo com isso".

Bryan Oakley
fonte
Isso parece bem diferente da outra resposta. Você está dizendo "quando houver uma necessidade incomum e urgente, convenha todos". @Oleksi disse "ao planejar um ciclo de desenvolvimento, é melhor colocar todos em uma tarefa por vez do que ter cada pessoa trabalhando em uma tarefa separada em paralelo". Qualquer uma das definições é plausível e ambas são práticas úteis, mas a dele tem quatro vezes os votos, portanto, suponho que sua resposta reflita a definição mais amplamente aceita.
Jay Bazuzi
@ Jay Bazuzu: Se todos são colocados em uma única tarefa como parte do planejamento do sprint ou se ocorre organicamente conforme as necessidades, a definição ainda é a mesma - todos trabalham juntos em uma única tarefa.
Bryan Oakley
Eu acho que sua resposta é muito importante aqui. A outra resposta que é 'aceita' é o "o quê". Mas o seu parece abordar o como.
Ape-inago
2

O enxame é, na verdade, um conceito central da agilidade. Não é algo que é feito "quando há problemas". Enxame, em sua forma mais simples, significa que as equipes trabalham em colaboração em itens (histórias) e os trabalham até a conclusão. O conceito principal é "parar de iniciar e começar a terminar". Em outras palavras, em vez de todos os desenvolvedores trabalharem independentemente em uma história, a equipe se concentra em um conjunto mais limitado de histórias / tarefas e realiza cada item mais cedo. Pense nisso como a diferença entre um sistema de thread único e multi-thread. Se uma história do usuário tiver 10 tarefas a serem executadas e cada uma durar 8 horas, assumindo que não houve complicações, um desenvolvedor poderá trabalhar cada tarefa sequencialmente e concluir a história em 80 horas ou cerca de duas semanas (com 10 dias de sprint) de 8 horas de desenvolvimento por dia). E se dois desenvolvedores dividissem as tarefas e as trabalhassem simultaneamente? As mesmas 80 horas de trabalho podem ser concluídas dessa maneira em uma semana. Adicione um terceiro e você pode ver agora que isso pode ser feito em 3 a 4 dias.

O enxame pode ser feito de várias maneiras:

  1. Programação em pares (dois desenvolvedores sentados lado a lado para trabalhar no código, um é o "driver" que escreve o código, o outro é o navegador, mantendo em mente a direção de longo prazo e ajudando a revisar o código simultaneamente.
    1. Trabalho em pares: um desenvolvedor e um testador trabalham simultaneamente no mesmo trabalho, um de codificação e outro de teste, automação de gravação etc.
    2. Enxame como eu mencionei acima, o que é muito comum. Geralmente, os membros da equipe enxameiam uma história, mas cada um possui tarefas individuais nesse método.
    3. Programação da multidão: toda a equipe está focada em uma história (ou mesmo tarefa) de cada vez.

As equipes que dão uma história a todos os desenvolvedores tendem a ter muito "trabalho em andamento" ou WIP, e geralmente muitas histórias são iniciadas, mas não concluídas. Este é um ANTI-PADRÃO e NÃO é uma prática recomendada.

As equipes que enxameavam tendem a ter menos WIP e completar mais histórias - e, com isso, quero dizer Desenvolvido, Testado, Aprovado, pronto para implantar. Portanto, essa é uma prática essencial para a agilidade.

Curtis Reed
fonte
1

O artigo a seguir no InfoQ descreve uma abordagem para o enxame:

  • A equipe usa programação mob para a maioria das tarefas de codificação
  • Uma parte da equipe ou membros individuais da equipe geralmente se dividem e se juntam à equipe em intervalos curtos
  • Todo mundo faz tudo (sem papéis)
  • A equipe não está usando estimativas, o WIP é sempre um, sem necessidade de standups ou cerimônias semelhantes

Leia o artigo para obter uma explicação detalhada.

Dan
fonte