É um ditado bastante comum que adicionar mais programadores a um projeto atrasado tornará as coisas piores. Por que é isso?
É um ditado bastante comum que adicionar mais programadores a um projeto atrasado tornará as coisas piores. Por que é isso?
Respostas:
Cada novo desenvolvedor deve ser introduzido na base de código e no processo de desenvolvimento que leva não apenas o tempo da nova pessoa, mas também requer assistência de um desenvolvedor sênior (orientando-o no processo de criação, explique o processo de teste, ajude-o com armadilhas na base de código, revisões de código muito mais detalhadas, etc.) .
Portanto, quanto mais novos desenvolvedores você adicionar ao projeto, mais tempo será gasto para levá-los a um ponto em que eles possam realmente contribuir para o projeto.
Além das outras respostas: Outro fator a considerar é a comunicação.
O pior caso para a quantidade de canais de comunicação em uma equipe (o que não é incomum), é um gráfico completo . Como você pode imaginar, adicionar apenas 1 desenvolvedor pode aumentar muito os canais de comunicação. Com métodos de comunicação mais simplificados, o impacto é menor ... mas ainda aumenta.
O problema citado no livro que originalmente promulgou esta lei, The Mythical Man-Month , é a comunicação. Ele começa dizendo:
Homens e meses são mercadorias intercambiáveis somente quando uma tarefa pode ser dividida entre muitos trabalhadores sem comunicação entre eles. Isso vale para colher trigo ou colher algodão; nem isso é verdade na programação de sistemas.
Ele menciona o treinamento como parte do problema:
O ônus adicional da comunicação é composto de duas partes: treinamento e intercomunicação. Cada trabalhador deve ser treinado em tecnologia, nos objetivos do esforço, na estratégia geral e no plano de trabalho. Esse treinamento não pode ser particionado; portanto, essa parte do trabalho varia linearmente com o número de trabalhadores.
... mas observa que a intercomunicação é de longe o fator maior :
Como a construção de software é inerentemente um esforço de sistema - um exercício de inter-relações complexas - o esforço de comunicação é grande e rapidamente domina a diminuição do tempo de tarefas individuais causado pelo particionamento. Adicionar mais homens aumenta, não diminui, o cronograma.
Também vale a pena notar que Fred Brooks (o autor) tem o pano de fundo para saber do que está falando. A maior parte do livro é baseada em sua experiência no gerenciamento do projeto OS / 360 da IBM. Apesar de décadas de adeptos pregarem todos os tipos de métodos de gerenciamento "aprimorados" e alguns até criarem nomes interessantes (eXtreme, Agile, Scrum etc.) quando você se dedica a isso, pouca essência 1 parece ter mudado desde então.
1 Para a definição de "essência", ver do mesmo autor "No Silver Bullet: Essência e Acidentes em Engenharia de Software", incluído no 20 th Anniversary Edition de The Mythical Man-Month .
Não é meramente ditado; é verificável. Confira The Mythical Man-Month de Brooks .
Aqui estão algumas reflexões sobre esse assunto ...
agora, adicionar novos recursos para teste pode não ser uma má idéia ... pode acelerar o processo de teste (se seus casos de teste estiverem bem escritos), e sim, o uso de ferramentas de teste também ajudará.
Porque a programação não é um trabalho básico da linha de produção. A atualização de um projeto de software leva tempo. As pessoas novas precisam fazer muitas perguntas, o que leva à produtividade negativa (isto é, aprendizado de pessoas novas, pessoas idosas ensinando-as -> nenhum trabalho real sendo realizado).
Para simplificá-lo, imagine um projeto individual relativamente simples, que está programado para durar uma semana: na quinta-feira, você percebe que ele não será concluído a tempo, que levaria o programador a levar mais de 6 a 7 dias. de 5. Se você adicionar outro programador nesse ponto, ele precisará trabalhar com o programador1 por pelo menos algumas horas ou um dia, fazer muitas perguntas para acelerar a velocidade etc. Você provavelmente não conseguirá qualquer produtividade líquida positiva para o resto da semana. É provável que o novo programador também introduza alguns bugs extras (já que eles não conhecerão o código existente e o programador1), o que interromperá o ciclo de implementação e teste em mais um ou dois dias. O projeto durará facilmente duas semanas úteis completas, em vez da original!
Fred Brooks escreveu um livro inteiro "The Mythical Man-Month", respondendo a essa pergunta.
Aqui está a versão quick-n-dirty:
1) Há um limite de quanto você pode dividir um projeto em partes distintas para atribuir a mais programadores.
2) Dividir um projeto para mais pessoas aumenta a quantidade de comunicação necessária para coordenar todas as partes do aplicativo. Mais comunicação = mais trabalho.
3) Para cada pessoa que você adicionar ao projeto, adicione mais de um canal de comunicação que deve ser navegado para a equipe. Esse número cresce geometricamente e aumenta a quantidade de comunicação que deve acontecer. Mais comunicação = Mais trabalho.
4) Existe uma "J-Curve" quando você adiciona cada membro da equipe. Ou seja, os recursos produtivos existentes precisam gastar tempo para atualizar as novas pessoas que, de outra forma, poderiam ter gasto trabalhando no projeto. Por fim, você pode aumentar a capacidade, mas isso atrasa temporariamente o projeto. Quanto mais tarde no projeto, mais é preciso aprender, mais pronunciado é o efeito.
Outro fator que não vi mencionado é que algumas tarefas precisam ser realizadas em uma ordem específica. Você não pode executar a tarefa 4 até que a tarefa 3 seja concluída porque depende de 3. Não adianta contratar alguém para executar a tarefa 4 ao mesmo tempo em que alguém está realizando a tarefa 3. Muitas vezes, no final de um projeto , as tarefas que precisam de outras coisas concluídas primeiro são as tarefas restantes.
Eles também costumam ser algumas das tarefas mais complexas que precisam ser executadas, as mesmas que exigem a melhor compreensão de todo o design para evitar a quebra do que já foi concluído. Eles também geralmente exigem o conhecimento mais amplo do domínio comercial. Depois de trabalhar no projeto por meses, posso executar a tarefa em uma semana ou menos. Alguém novo passaria mais de uma semana se acostumando (e me afastando de minhas tarefas para um bom período de tempo para responder a perguntas) e provavelmente, mesmo se extremamente habilidoso, levar mais tempo para fazer a tarefa. Não é porque ele ou ela não é competente, mas por não estar familiarizado com a estrutura real do projeto ou com o back-end do banco de dados.
O ditado que sempre funcionou para mim é que você não pode conseguir nove mulheres para fazer um bebê em um mês.
Eu também sugeriria "Peopleware", de DeMarco e Lister.
E "The Deadline", de DeMarco, apresenta isso e várias outras doenças e falácias de gerenciamento de projetos de software de uma maneira alegre e muito legível.
Ele também investiga a dinâmica das pessoas que trabalham no projeto / equipe e detalha como as coisas como comunicação e introdução esgotam o tempo de trabalho disponível de uma equipe.
Esses livros são muito baratos, eu sugiro que você os compre (Amazon ou The Book Depository os têm) e faça uma leitura. As respostas curtas aqui não podem realmente fazer justiça à pergunta.
Porque ninguém leva tempo para ter um processo bem planejado, testado e bem pensado para: contratar, treinar, desenvolver e supervisionar programadores e muito menos prepará-los para acelerar um projeto em particular.
Se você está gerenciando uma equipe de desenvolvedores, deve ter vários contatos agora mesmo de pessoas que gostaria de contratar se tiver uma vaga. Participe de grupos de desenvolvedores.
Quão rápido você pode ter uma nova configuração de máquina de desenvolvimento e pronta para usar?
Você já testou a documentação e as especificações do seu projeto, mostrando-as a um desenvolvedor em outro projeto? Eles analisaram e determinaram que poderiam começar a trabalhar no projeto, se necessário?
Qual é o cronograma do projeto?
Economize para um dia chuvoso, porque quando um projeto fica para trás, é mais como um furacão.
Além do problema de comunicação (sobre o qual penso que todas as outras respostas estão falando), também é muito possível que uma pessoa adicionada a um projeto crie bugs, porque ainda não conhece o código muito bem.
Sempre que sou adicionado a um projeto, tento sempre não quebrar as coisas. Isso significa que sou muito mais lento em consertar as coisas primeiro.
Eu gostaria de salientar algo totalmente ignorado até agora pelas outras respostas.
No momento em que as pessoas são adicionadas a um projeto atrasado, normalmente muita coisa deu errado em toda a organização. A gerência e o cliente não estão felizes. As pessoas foram pressionadas a seguir em frente. As coisas estão bem tensas.
Agora imagine que você faz parte dessa equipe. Obviamente, nada disso é culpa sua. O planejamento (nenhum dos quais foi seu) tem sido muito otimista. Todas as decisões erradas foram tomadas sem consultar você. Você está tentando tirar o melhor proveito disso e, de repente, um monte de gente nova está sendo levada. Que mensagem isso transmite?
As pessoas lá em cima obviamente perderam a fé em você. Eles chamaram os meninos grandes para compensar o que você estragou.
Você ainda estará motivado para fazer disso um sucesso? Ou ... você ficará cada vez mais frustrado e prefere ver a coisa toda falhar?
Não tenha pressa :-).