La réponse de mcottle me plaît et je suis favorisée, mais je souhaite aborder d'autres dynamiques et arguments que les autres réponses n'ont pas encore évoqués.
Tout d'abord, la réponse de mcottle implique implicitement le fait qu'en-dessous d'un certain niveau de compétence, certains problèmes sont tout simplement impossibles. Malheureusement, la façon dont vous le découvrez est que votre équipe essaie et échoue, ce qui est trèscoûteux. Après avoir échoué, il y a deux leçons possibles à tirer de cela. Une des options consiste à apprendre que vous avez besoin de développeurs plus compétents. Vous devez donc les embaucher et terminer le projet de manière à dépasser considérablement le budget et le calendrier, mais au moins, vous êtes prêt à l'avenir. L’autre option est qu’un tel projet est «trop difficile» pour votre équipe et que de telles choses ne devraient pas être tentées à l’avenir, c’est-à-dire que vous abandonnez le projet et effectivement tout projet similaire. Bien sûr, il sera rarement exprimé comme "nous sommes trop stupides pour le faire", mais sera rationalisé car "nos systèmes sont très complexes" ou "nous avons beaucoup de code hérité" ou d'autres. Ce dernier point de vue peut considérablement fausser le point de vue d’une entreprise sur ce qui est possible et sur la durée et le coût du développement. "
Une question est, quel est exactement le plan de votre entreprise? D'accord, ils vont embaucher des programmeurs juniors bon marché. Trois ans passent, et maintenant? Que font-ils avec le développeur qui les accompagne depuis trois ans? Est-ce qu'ils ne lui ont jamais accordé une augmentation de salaire? Les options ici sont les suivantes:
- Ils accordent des augmentations de manière concurrentielle pour fidéliser leurs employés. Dans ce cas, pourquoi auraient-ils de la difficulté à payer les taux de développeur senior maintenant? J'y reviendrai cependant.
- Ils ont des taux stagnants, ce qui signifie qu'ils finiront par se "résumer" en des employés qui manquent de motivation et / ou de compétences.
- Ils éliminent plus activement les employés plus âgés.
Les deux autres cas impliquent un important roulement de personnel, ce qui entraîne une perte de connaissances de la part de l'entreprise et une rémunération constante des employés. Dans le second cas, vous sélectionnez essentiellement les mauvais développeurs et les coûts vont donc augmenter sous la forme de calendriers croissants. Tout se passera bien pour le projet X jusqu'à ce que, soudain, Jim s'en va, qui était l'un des meilleurs développeurs, car il n'a pas obtenu d'augmentation depuis deux ans, le projet prendra "naturellement" beaucoup plus longtemps, vous devez embaucher et former de nouveaux développeurs juniors qui (vraisemblablement) ne seront pas aussi bons que Jim. C'est ainsi que vous recalibrez les attentes.
Même dans le cas où des augmentations compétitives sont fournies, si vous avez tous des développeurs débutants, où et comment sont-ils censés apprendre? En gros, vous espérez que l'un d'entre eux apprendra les bonnes pratiques par lui-même en dépit de son environnement de travail et finira par en encadrer d'autres (par opposition à un départ plus vert). Il serait beaucoup plus logique de "préparer la pompe" avec de bons développeurs. Plus probablement, vous développerez une culture de débutants experts . Le résultat est que vous finirez par payer des tarifs pour développeurs seniors à des personnes légèrement meilleures que les développeurs débutants et culturellement toxiques.
L'un des avantages, en particulier de très bons développeurs, que je suis étonné que personne d'autre n'ait mentionné, est qu'ils peuvent facilement être un facteur multiplicatif . Il se peut fort bien qu'un développeur débutant et un développeur senior prennent le même temps pour créer une table. Cependant, un bon développeur ne fera pas cela. Ils vont faire un générateur de table qui réduit le temps pour tout le monde pour faire une table. Alternativement / en plus, ils vont augmenter le plafond de ce qui est possible pour tout le monde . Par exemple, les développeurs qui ont implémenté le framework Google MapReduce étaient probablement extrêmement qualifiés, mais même si les utilisateursde MapReduce sont totalement incapables de créer eux-mêmes une version massivement distribuée de leur algorithme, ils le peuvent désormais facilement avec MapReduce. Souvent, cette dynamique est moins flagrante. Par exemple, de meilleures pratiques de contrôle, de test et de déploiement de la source améliorent les compétences de chacun , mais il peut être plus difficile de rechercher une personne spécifique.
Pour discuter un peu de l’autre côté, peut-être que les hauts dirigeants ont raison. Peut-être que des développeurs plus expérimentés ne sont pas nécessaires. Si tel est le cas, cependant, il semblerait que le développement ne soit pas une partie importante de la société. Dans ce cas, je voudrais simplement éliminer complètement les développeurs et utiliser un logiciel standard ou embaucher des entrepreneurs à la demande. Il serait peut-être intéressant d’expliquer pourquoi ils n’utilisent pas uniquement des sous-traitants plutôt qu’une équipe interne. De toute façon, si vous allez avoir beaucoup d’employés, la montée en charge des entrepreneurs ne devrait pas être un problème.