Gosto e votei na resposta de mcottle, mas quero cobrir algumas outras dinâmicas e argumentos que as outras respostas ainda não levantaram.
Primeiro, implícito na resposta de mcottle está o fato de que, abaixo de um certo nível de habilidade, alguns problemas são simplesmente impossíveis. Infelizmente, a maneira como você descobre isso é por sua equipe tentando e falhando, o que é muitocaro. Depois de falhar, há duas lições possíveis para aprender com isso. Uma opção é você aprender que precisa de desenvolvedores mais competentes, contratá-los e concluir o projeto significativamente acima do orçamento e do cronograma, mas pelo menos estará preparado no futuro. A outra opção é que esse projeto seja "muito difícil" para sua equipe e essas coisas não deverão ser tentadas no futuro, ou seja, você desiste do projeto e efetivamente quaisquer outros semelhantes. Obviamente, raramente será formulado como "somos burros demais para fazer isso", mas será racionalizado como "nossos sistemas são muito complexos" ou "temos muito código legado" ou outros. Essa última visão pode distorcer significativamente a perspectiva de uma empresa sobre o que é possível e quanto tempo / desenvolvimento deve ser caro. "
Uma pergunta é: qual é exatamente o plano da sua empresa? Ok, eles contratam programadores juniores baratos. Três anos se passaram, e agora? O que eles fazem com o desenvolvedor que está com eles ao longo desses três anos? Eles nunca deram a ele / ela um aumento? As opções aqui são as seguintes:
- Eles dão aumentos competitivos para reter os funcionários. Nesse caso, por que eles teriam um problema em pagar taxas de desenvolvedor sênior agora? Voltarei a isso embora.
- Eles têm taxas estagnadas, o que significa que, eventualmente, vão "resumir-se" a funcionários que não têm motivação e / ou habilidade.
- Eles ativamente removem mais funcionários seniores.
Os segundos dois casos implicam muita rotatividade de funcionários, o que significa perda de conhecimento da empresa e pagamento para aumentar continuamente os funcionários. No segundo caso, você está selecionando essencialmente desenvolvedores ruins e, portanto, os custos aumentam na forma de agendas crescentes. A maneira como isso acontece é que tudo está indo bem no projeto X, até que Jim sai de repente, que foi um dos melhores desenvolvedores, porque ele não recebe um aumento há dois anos, agora o projeto "compreensivelmente" levará muito mais tempo, pois você precisa contratar e treinar novos desenvolvedores juniores que (presumivelmente) não serão tão bons quanto Jim. É assim que você recalibra as expectativas.
Mesmo no caso de aumentos competitivos serem fornecidos, se você só tem desenvolvedores juniores, onde e como eles devem aprender? Você basicamente espera que um deles aprenda as boas práticas por conta própria , apesar do ambiente de trabalho e, eventualmente, mentore os outros (em vez de partir para pastos mais ecológicos). Faria muito mais sentido "preparar a bomba" com alguns bons desenvolvedores. É mais provável que você desenvolva uma cultura de especialistas iniciantes . O resultado é que você acabará pagando taxas de desenvolvedor sênior para pessoas que são apenas um pouco melhores que desenvolvedores juniores e são culturalmente tóxicas.
Um benefício, particularmente, de desenvolvedores muito bons, que estou surpreso que ninguém mais mencionou, é que eles podem ser facilmente um fator multiplicativo . Pode ser que um desenvolvedor júnior e um desenvolvedor sênior levem a mesma quantidade de tempo para fazer uma mesa. No entanto, um bom desenvolvedor não fará isso. Eles farão um gerador de mesa que reduz o tempo para que todos façam uma mesa. Alternativamente / adicionalmente, eles elevam o limite do que é possível para todos . Por exemplo, os desenvolvedores que implementaram a estrutura MapReduce do Google provavelmente eram extremamente qualificados, mas mesmo se os usuáriosdo MapReduce são totalmente incapazes de criar uma versão massivamente distribuída de seu algoritmo por conta própria, agora podem facilmente com o MapReduce. Muitas vezes, essa dinâmica é menos flagrante. Por exemplo, melhores práticas de controle, teste e implantação de fontes melhoram a todos , mas pode ser mais difícil rastrear uma pessoa específica.
Para discutir um pouco o outro lado, talvez os superiores estejam certos. Talvez desenvolvedores mais experientes não sejam necessários. Se for esse o caso, parece que o desenvolvimento não é uma parte significativa da empresa. Nesse caso, eu apenas eliminaria completamente os desenvolvedores e usaria software de prateleira ou contrataria empreiteiros sob demanda. Talvez valha a pena explorar por que eles não usam apenas contratados, e não uma equipe interna. Se você vai ter muita rotatividade de funcionários de qualquer maneira, aumentar as empresas contratadas não deve ser um problema.