project-management - software - project management steps




Eu preciso desse bebê em um mês-me mande nove mulheres! (11)

Acho que adicionar pessoas a uma equipe pode acelerar um projeto mais do que adicioná-las ao projeto em si.

Muitas vezes me deparo com o problema de ter muitos projetos simultâneos. Qualquer um desses projetos poderia ser concluído mais rapidamente se eu pudesse me concentrar apenas nesse projeto. Adicionando membros da equipe, eu poderia fazer a transição de outros projetos.

Claro, isso pressupõe que você contratou desenvolvedores capazes e motivados, que são capazes de herdar grandes projetos e aprender de forma independente. :-)

Em que circunstâncias - se alguma - a adição de programadores a uma equipe realmente acelera o desenvolvimento de um projeto já atrasado?


Adicionar desenvolvedores faz sentido quando a produtividade contribuída pelos desenvolvedores adicionais excede a produtividade perdida para treinar e gerenciar esses desenvolvedores.


Basta colocar. Tudo se resume a comparar o tempo restante e a produtividade que você obterá de alguém, excluindo a quantidade de tempo que os recursos adicionais levam para chegar à velocidade e serem produtivos e subtraindo o tempo investido em ensiná-los pelos recursos existentes. Os principais fatores (em ordem de importância):

  1. Quão bom é o recurso para buscá-lo. Os melhores desenvolvedores podem entrar em um novo site e ser produtivos corrigindo erros quase instantaneamente com pouca ajuda. Esta habilidade é rara, mas pode ser aprendida.
  2. A segregabilidade de tarefas. Eles precisam ser capazes de trabalhar em objetos e funções sem tropeçar nos desenvolvedores existentes e diminuí-los.
  3. A complexidade do projeto e documentação disponível. Se for um aplicativo ASP.Net de prática recomendada baunilha e cenários de negócios comuns e bem documentados, um bom desenvolvedor pode ficar preso imediatamente. Esse fator, mais do que qualquer outro, determinará quanto tempo os recursos existentes terão para investir no ensino e, portanto, no impacto negativo inicial dos novos recursos.
  4. A quantidade de tempo restante. Isso é muitas vezes mal estimado também. Frequentemente, a lógica é que temos apenas x semanas restantes e levará x + 1 semanas para que alguém acelere. Na realidade, o projeto vai escorregar e de fato tem duas semanas de desenvolvimento para ir e obter mais recursos em breve ajudará.

De acordo com o Mythical Man-Month, o motivo principal para adicionar pessoas a um projeto tardio é a sobrecarga de comunicação O (n ^ 2).

Eu experimentei uma exceção principal para isso: se há apenas uma pessoa em um projeto, ela está quase sempre condenada. Adicionando um segundo acelera quase todas as vezes. Isso porque a comunicação não é sobrecarga nesse caso - é uma oportunidade útil para esclarecer seus pensamentos e cometer menos erros estúpidos.

Além disso, como você obviamente sabia quando postou sua pergunta, o conselho do Mythical Man-Month só se aplica a projetos atrasados . Se o seu projeto não estiver atrasado, é bem possível que adicionar pessoas não seja mais tarde. Supondo que você faça isso corretamente, é claro.


Obviamente, cada projeto é diferente, mas a maioria dos trabalhos de desenvolvimento pode ter a certeza de ter uma certa quantidade de colaboração entre os desenvolvedores. Onde é esse o caso, minha experiência tem sido que novos recursos podem, de fato, desacelerar as pessoas com as quais eles confiam, e em alguns casos isso pode ser o seu pessoal-chave (aliás, geralmente são pessoas "chave" o tempo para educar um newb). Quando estão prontos, não há garantias de que o trabalho deles se enquadre nas "regras" estabelecidas ou na "cultura de trabalho" com o resto da equipe. Então, novamente, pode fazer mais mal do que bem. Então, de lado, essas são as circunstâncias em que isso pode ser benéfico:

1) O novo recurso tem uma tarefa restrita que requer um mínimo de interação com outros desenvolvedores e um conjunto de habilidades já demonstrado. (isto é, portar o código existente para uma nova plataforma, refatorando externamente um módulo inativo atualmente bloqueado na base de código existente).

2) O projeto é gerenciado de forma que o tempo de outros membros mais antigos da equipe possa ser compartilhado para ajudar a trazer o newb até a velocidade e orientá-lo ao longo do caminho para garantir que seu trabalho seja compatível com o que já foi feito.

3) Os outros membros da equipe são muito pacientes.


Onde uma equipe já está acostumada a parear a programação, adicionar outro desenvolvedor que já tenha experiência em pareamento pode não atrasar o projeto, especialmente se o desenvolvimento estiver ocorrendo com um estilo TDD.

O novo desenvolvedor lentamente se tornará mais produtivo à medida que entender mais a base de código, e qualquer mal-entendido será detectado muito cedo pelo par ou pelo conjunto de testes que é executado antes de cada check-in (e idealmente deveria haver uma verificação em pelo menos a cada dez minutos).

No entanto, os efeitos das despesas extras de comunicação precisam ser levados em conta. É importante não diluir muito o conhecimento existente do projeto.


Se o recurso extra complementar sua equipe existente, isso pode ser ideal. Por exemplo, se você está prestes a configurar seu hardware de produção e verificar se o banco de dados está realmente sintonizado ao invés de apenas retornar bons resultados (que sua equipe conhece como especialistas em domínio) emprestando tempo de um bom dba que trabalha no projeto a seguir para o seu pode acelerar a equipe sem muito custo de treinamento


Se os programadores existentes são totalmente incompetentes, adicionar programadores competentes pode ajudar.

Eu posso imaginar uma situação em que você tinha um sistema muito modular, e o (s) programador (es) existente (s) não tinha sequer iniciado em um módulo muito isolado. Nesse caso, atribuir apenas essa parte do projeto a um novo programador pode ajudar.

Basicamente, as referências do Mês do Homem Mítico estão corretas, exceto em casos planejados como o que eu inventei. O Sr. Brooks fez uma pesquisa sólida para demonstrar que, depois de um certo ponto, os custos de rede e comunicação da adição de novos programadores a um projeto superam os benefícios que você obtém com sua produtividade.


Suponho que adicionar pessoas ao final do trabalho poderia acelerar as coisas se:

  1. O trabalho pode ser feito em paralelo.

  2. A quantidade poupada pelos recursos adicionados é mais do que a quantidade de tempo perdida por ter as pessoas com experiência no projeto explicando as coisas para aqueles que são inexperientes.

EDIT: eu esqueci de mencionar, esse tipo de coisa não acontece com muita freqüência. Geralmente é bastante simples, como telas de administração que fazem CRUD simples para uma tabela. Hoje em dia, esses tipos de ferramentas podem ser, em grande parte, autogerados de qualquer maneira.

Tenha cuidado com os gerentes que apostam neste tipo de trabalho para entregar embora. Parece ótimo, mas na verdade, geralmente não há tempo suficiente para reduzir o tempo do projeto.


Talvez se as seguintes condições se aplicarem:

  1. Os novos programadores já entendem o projeto e não precisam de tempo de inicialização.
  2. Os novos programadores já são proficientes com o ambiente de desenvolvimento.
  3. Não é necessário tempo administrativo para adicionar os desenvolvedores à equipe.
  4. Quase nenhuma comunicação é necessária entre os membros da equipe.

Eu vou deixar você saber a primeira vez que eu vejo todos estes de uma vez.


  • Se as novas pessoas se concentrar em testes
  • Se você pode isolar recursos independentes que não criam novas dependências
  • Se você puder ortogonalizar alguns aspectos do projeto (especialmente tarefas não codificantes como design / layout visual, ajuste / indexação de banco de dados ou configuração de rede / configuração de servidor) para que uma pessoa possa trabalhar nisso enquanto as outras continuam com o código do aplicativo
  • Se as pessoas se conhecem, a tecnologia, os requisitos do negócio e o design, bem o suficiente para poderem fazer as coisas com o conhecimento de quando pisam nos dedos uns dos outros e como evitar isso (isso, claro, é muito difícil de organizar, se já não é o caso)