Minha equipe e eu estamos reconstruindo um site que desenvolvemos há cerca de dez anos e queremos fazê-lo no Agile.
Então, depois de passar muito tempo lendo (provavelmente não o suficiente), estou tendo problemas com a questão de como dividir o trabalho entre desenvolvedores.
Vou ser mais específico e dizer que o site é dividido em módulos separados que não têm muita integração entre si.
Qual é a melhor / maneira mais aceita de dividir o trabalho entre os desenvolvedores?
- Dando a cada pessoa um módulo diferente para trabalhar.
- Atribua todos os desenvolvedores ao mesmo módulo e divida o trabalho por diferentes partes do módulo (UnitTesting, DAL e Mapping, Logics, UI)
- Atribua todos os desenvolvedores ao mesmo módulo e divida o trabalho por lógicas diferentes (por exemplo, cada desenvolvedor é responsável por uma lógica específica (provavelmente um método no BL) e é UnitTesting, DAL e Mapping and UI ...
Ou talvez algo completamente diferente?
web-development
agile
Amir
fonte
fonte
Respostas:
Minha equipe está tentando se tornar "ágil" há alguns lançamentos agora, mas fazer parte de uma grande corporação não facilitou exatamente isso. Não vou fingir que tenho a resposta, mas posso compartilhar algumas das minhas observações.
Dividindo desenvolvedores por módulo:
Todo mundo trabalha no mesmo módulo ao mesmo tempo
Estamos fazendo a última coisa e, embora haja muito espaço para melhorias, no geral toda a nossa equipe ficou muito feliz e isso diz muito, quando fazemos parte de uma corporação gigante.
Uma coisa importante em que erramos nas primeiras três vezes em que "fomos ágeis" é em cada uma dessas vezes em que as pessoas são instruídas a trabalhar e recebem instruções sobre como trabalhar. Essa é a maneira número um de fazer com que sua equipe perca completamente o interesse no projeto e, então, você está com um problema real.
Em vez disso, tente o oposto. Diga à equipe que eles podem fazer o que quiserem e como gerente / líder (se você é um, se não o faz repetir essas palavras), seu trabalho é garantir que eles sejam o mais produtivos e felizes possível. Processo não é uma coisa ruim, mas o processo deve estar presente para ajudar sua equipe quando perceber que precisa de um, e não o contrário.
Se alguns membros da sua equipe preferirem trabalhar isoladamente, deixe-os (até certo ponto). Se eles preferem trabalhar em pares, deixe-os fazer isso. Certifique-se de deixar seu pessoal escolher o seu próprio trabalho o máximo que puder.
Por fim, e isso é muito importante e sempre é esquecido. Você não vai conseguir esse direito (a menos que você seja o super-homem, ou pelo menos o batman). Realizar reuniões retrospectivas regulares é extremamente importante. Quando lançamos retrospectivas, elas foram feitas pelo livro e parecia mais um processo pelo qual você precisava passar. Não é para isso que serve a retrospectiva. É para ouvir sua equipe, identificar áreas que causam mais dor e corrigi-las para que todos possam seguir em frente com seu trabalho. Aparentemente, os engenheiros de software em geral, como o fornecimento de produtos e recursos, e a mais importante reunião retrospectiva de mensagens precisam se comunicar, é que isso é apenas para seu benefício. Você deseja identificar e enfrentar obstáculos, começando pelos maiores (ou mais fáceis, existem "
fonte
Faça uma reunião com a equipe, mostre a eles a lista de tarefas e pergunte quem quer fazer o que.
fonte
Não pense em módulos. Pense em elementos de funcionalidade. Descreva esses elementos de funcionalidade por histórias de usuários (ou de outra forma) e não se esqueça de descrever critérios de aceitação (provavelmente definidos por seu aplicativo atual e altere as expectativas dos negócios). Coloque seus elementos funcionais em lista de pendências. Em seguida, deixe a empresa priorizar qual funcionalidade deve ser entregue primeiro (você trabalhará de forma incremental e iterativa e a prioridade informará o que deve ser implementado primeiro).
Depois de ter isso, pelo menos em parte do aplicativo original, você estará pronto para o desenvolvimento. O que acontece a seguir depende da metodologia ágil selecionada. A parte importante é que cada funcionalidade geralmente pode ser dividida em várias tarefas e os membros da equipe selecionam as tarefas que desejam fazer - isso é chamado de auto-organização. Quando você começa com a agilidade, a auto-organização pode precisar de ajuda, onde alguém garantirá que tarefas populares e impopulares sejam compartilhadas igualmente pela equipe. Quando a equipe estiver mais madura, os desenvolvedores não hesitarão em discordar da organização atual e isso será tratado automaticamente dentro da equipe.
Pensar nos módulos desde o início não precisa ser um bom caminho. Você está reescrevendo o aplicativo por algum motivo e talvez a arquitetura atual do aplicativo, com base na separação incorreta do módulo, seja um dos motivos ocultos dos problemas visíveis. Além disso, você pode descobrir que algumas funcionalidades dos módulos existentes serão completamente redefinidas e movidas para outro local.
fonte
Embora eu concorde com a resposta de David, achei que poderia se beneficiar de alguns detalhes:
Basicamente, o ponto principal é: ninguém aqui no SE pode responder a essa pergunta para você, nem há muito sentido nisso, porque é muito melhor se você apresentar uma resposta como equipe.
fonte
A abordagem mais simples é geralmente a melhor.
Eu evitaria dividir tarefas em grupos como testing / log / UI / etc, a menos que você possa definir algumas razões muito boas e claras para isso. Meu raciocínio é que, quando você permite que os programadores trabalhem fora de suas áreas habituais de especialização, isso pode manter as coisas mais interessantes e desafiadoras para eles, e permitir que eles se desenvolvam e cresçam dentro de seu campo. Se você acha que as restrições de tempo exigem que você divida o trabalho com base na experiência, garanta no mínimo que cada desenvolvedor ainda seja obrigado a fazer seu próprio teste de unidade e use a revisão de código e a aceitação de testes para detectar problemas. Escrever seus próprios testes é muito ágil, e esperar o tempo dos testadores se tornarem disponíveis pode ser um desperdício.
Ao enfrentar esse mesmo tipo de dilema, empreguei a seguinte abordagem:
Escopo do projeto. Dê a si mesmo uma idéia do que você está se metendo e desenvolva uma lista de recursos, dividindo o projeto em uma série de tarefas.
Priorizar recursos. Decida quais recursos devem ser concluídos com antecedência e quais fornecerão valor imediato aos seus clientes. Não se preocupe se seus desenvolvedores acabam trabalhando nos mesmos módulos, mas verifique se você possui um bom processo e ferramentas para gerenciar mesclagens de código.
Envolva sua equipe e peça aos desenvolvedores que o ajudem a dividir os recursos em uma lista de tarefas gerenciadas com mais facilidade. Revise em grupo e ajuste as tarefas conforme necessário para que possam ser estimadas com mais facilidade.
Peça a cada desenvolvedor que escolha uma tarefa para implementar - ou um grupo de tarefas, dependendo de como suas iterações serão executadas - na parte superior da fila de prioridades, na qual o desenvolvedor gostaria de trabalhar.
Faça com que cada desenvolvedor trabalhe em apenas uma coisa até que ela seja concluída antes de passar para a seleção do próximo item na parte superior da fila de prioridade. Você pode ficar tentado a fazer com que seu pessoal altere as tarefas ocasionalmente, no entanto, isso levará ao desperdício em termos de tempo do desenvolvedor. Se você se deparar com gargalos de dependência, precisará ajustar suas prioridades de tarefas e minimizar o desperdício.
Não tenha medo de ter desenvolvedores executando com iterações sobrepostas e gerencie seus lançamentos de acordo. Isso ajudará a minimizar o tempo perdido entre as liberações que aguardam a conclusão das tarefas.
Por fim, ser Agile é encontrar uma solução que funcione bem para sua equipe, sua empresa e seus clientes. Cabe a você ajustar seu processo, encontrando o equilíbrio de práticas que funcionará melhor para você. Como dividir suas tarefas será uma parte muito importante de um processo muito maior, mas deve ser mantido o mais simples possível para incentivar a participação voluntária e evitar problemas difíceis de resolver relacionados ao processo, desenvolvidos posteriormente.
fonte
Nenhuma discussão organizacional da equipe de desenvolvedores estaria completa sem mencionar a Equipe Cirúrgica do Dr. Fred Brooks .
A fórmula básica é: uma equipe cirúrgica por unidade de trabalho
Definindo uma equipe cirúrgica
O conceito da equipe cirúrgica é baseado em duas idéias fundamentais:
Uma equipe cirúrgica é composta de 3 a 10 desenvolvedores:
Definindo uma unidade de trabalho
Então, agora que podemos montar uma equipe, como os designamos?
Você deve ver três padrões básicos e aceitáveis emergindo:
fonte
Dependendo do número de desenvolvedores e módulos (e escalas de tempo), geralmente faço com que meus desenvolvedores escolham um módulo interessante (para eles) e um módulo desafiador (de preferência algo que eles não fizeram) e, em seguida, divido o restante por nível de habilidade e restrições de tempo. Acho que isso dá aos meus desenvolvedores algo em que eles querem trabalhar e algo para pressioná-los.
Claro que isso nem sempre funciona ...
fonte
Aqui está o que eu faria:
Se todos os módulos forem pequenos, você poderá atribuir um módulo para cada um deles. Caso contrário, faça o seguinte:
O que foi dito acima não funcionará se as pessoas que não gostam de trabalhar com outras pessoas forem as mais proficientes e esse for um caso comum, portanto, faça uma exceção a 4 e 5 de acordo.
fonte