Comment déterminer le nombre de programmeurs nécessaires pour un projet

18

Comment savez-vous combien de programmeurs un projet particulier doit réussir?

L'entreprise pour laquelle je travaille exécute les commandes des entreprises clientes. Nous avons écrit un système de gestion d'entrepôt interne qui gère la gestion des stocks en fonction de l'emplacement, le traitement des commandes, la génération du connaissement, la facturation, l'audit du fret et les rapports (probablement 50 rapports). Il possède également des fonctions de lecture de codes-barres et un portail client ainsi que des dizaines d'autres fonctionnalités plus petites. Il comprend également un horodatage complet des employés. Il s'intègre avec Quickbooks, UPS et FedEx. Il gère le travail d'au moins 50 clients, tous différant légèrement par leurs fonctionnalités. Par exemple, nous importons des commandes à partir de fichiers envoyés par les clients, mais chaque client envoie un format de fichier différent (csv, excel, fichier plat et services Web), nous avons donc bien plus d'une douzaine de méthodes de conversion de commande configurées. Les exportations sont la même histoire.

Le projet est complexe et de plus en plus complexe chaque jour avec plus d'un quart de million de lignes de code. C'est environ 250 000 lignes de code VB.NET, 6 200 lignes de code Ruby et peut-être 5 000 lignes de PHP. Il possède également une base de données MySQL avec environ 200 tables.

En raison des exigences en constante évolution et des besoins différents de dizaines de clients, le code lui-même varie considérablement en qualité, d'un code extrêmement médiocre à un code relativement bon.

Actuellement, ce projet n'a qu'un seul programmeur - moi-même. Je fais également actuellement tout le support produit pour notre entreprise de 75 personnes environ. Cela inclut le dépannage et la configuration de nouveaux clients et toutes les nouvelles fonctionnalités nécessaires. De plus, nous essayons de réécrire le tout pour qu'il soit basé à 100% sur Ruby on Rails. Et nous aimerions commercialiser l'ensemble du système au cours de la prochaine année pour être utilisé par d'autres sociétés.

Actuellement, nous n'avons que moi-même en tant que programmeur mais je ne pense pas que cela soit suffisant. Quelqu'un a-t-il des recommandations sur le nombre de programmeurs qu'un projet de cette ampleur devrait avoir ou sur la façon de déterminer la réponse à cette question? Particulièrement compte tenu du fait que la direction souhaite que le produit soit de qualité commerciale d'ici l'année prochaine?

kstevens715
la source
11
J'attendais une blague d'ampoule :(
Oded
lol ... google le titre et vous en trouverez probablement. Quand j'étais sur Google, j'ai trouvé un tas de ceux-là accidentellement lol.
kstevens715
8
Si les exigences ne cessent de changer, aucun nombre de mains supplémentaires ne fera expédier et sortir ce produit. Vous devez d'abord définir les exigences.
Odé le
C'est certainement vrai dans mon cas. Je sais que la question que je pose ne répond probablement pas très bien. Mais si je pouvais comparer les types de projets sur lesquels d'autres personnes travaillent et le nombre de personnes qui participent à temps plein à ces projets, cela pourrait peut-être aider.
kstevens715
Cette question semble être très similaire à cette question . Peut-être y trouverez-vous également certaines des réponses utiles.
S.Robins

Réponses:

3

Je dirais au moins 5 personnes. Un pour le test, un pour les spécifications, le support et la documentation et 3devs. Il y a beaucoup de choses à tester dans votre cas, donc un testeur dédié à 50% ne devrait pas être déraisonnable. Une personne écrivant les exigences et ayant un support client pour configurer votre infrastructure pour les tests, etc. devrait être là. Je pense que trois développeurs sont assez faibles pour un projet comme celui-ci. Un grand back-end qui est intégré à de nombreux systèmes tiers et un front complet avec un très grand nombre de rapports personnalisés. Je voudrais avoir.

  1. Un bon développeur back-end (persistance / couche métier)
  2. Un bon développeur intermédiaire / frontal qui crée des classes d'action et la conception CSS JavaScript.
  3. Un bon développeur agissant comme architecte mais réalisant également du code dans toutes les couches avec l'aide d'experts des deux autres. Ce développeur peut également faire des choses comme configurer le branchement Maven Jenkins Git du framework JUnit et ainsi de suite.

Que se passe-t-il si vous partez, tombez malade, prenez des vacances, etc. Une personne par projet n'est jamais intelligente. Il n'est pas non plus bon d'être seul car vous n'évoluez pas professionnellement sans collègues. Je travaille assez souvent seul, en mettant en place de nouvelles architectures et ainsi de suite, souvent en équipes de disons 5 développeurs mais je n'évolue jamais autant que quand je dis à un collègue de laisser mettre cela en place ensemble et nous nous enfermons une semaine à parler, discuter et choisir des cadres. La programmation par paire est extrêmement généreuse et ne peut pas être effectuée avec un seul développeur, et qui fera des révisions de code si vous n'êtes pas sûr? Si vous êtes coincé, qui vous aidera? Je n'entreprendrais un projet d'une seule personne que s'il faisait partie d'une plus grande portée et pouvait faire appel à des ressources d'experts si nécessaire.

Farmor
la source
1
J'ai pris 2 jours de vacances l'été dernier et quelqu'un a dû pénétrer par effraction dans ma maison pour récupérer mon ordinateur portable ... ouais. Je parle toujours de travailler en vase clos car je n'ai pas beaucoup d'autres développeurs avec qui interagir. Et vivant dans une petite ville, il n'y a même pas de groupes d'utilisateurs ou quoi que ce soit à rejoindre. Nous (je?) Venons de commencer à écrire du code de test récemment, en fait lorsque nous avons commencé la transition vers Rails. Je ne peux déjà pas imaginer développer sans tests. J'adore l'idée d'avoir un testeur dédié à 50%.
kstevens715
1
Au moins un développeur doit être un spécialiste de la base de données.
HLGEM
8

Bienvenue dans le monde souvent difficile des ressources !

Le problème n'est pas celui de la taille du projet par rapport à la taille de l'équipe. C'est une idée fausse très courante qui cache souvent d'autres problèmes qui sont généralement liés à la gestion. Le problème est lié à la portée . Vous devez décider de ce que vous pouvez réaliser avec vos ressources actuelles - alias vous. Ensuite, vous devez décider si votre capacité à gérer la charge de travail est suffisante pour gérer la tâche dans les délais qui vous ont été alloués. Ainsi, les besoins de votre projet doivent être identifiés et définis.

  • Voulez-vous passer du temps à nettoyer la base de code existante?
  • Est-ce une exigence fondamentale pour assurer la réussite du projet?
  • Avez-vous de nouvelles fonctionnalités à ajouter au système? Quels sont les aspects les plus importants de votre projet qui doivent être traités, et quels sont les éléments mineurs qui sont sur la liste de souhaits?
  • Une des exigences peut-elle être abandonnée ou au moins reportée jusqu'à la prochaine version de maintenance?

Lorsque vous avez une idée de l'étendue de vos besoins, vous pouvez plus facilement déterminer la charge de travail requise pour obtenir un résultat dans un certain délai. Si vos ressources sont susceptibles d'être surexploitées, vous aurez besoin de plus de personnel. Si vos ressources sont susceptibles d'être sous-utilisées, vous pouvez vous retrouver à rapprocher votre échéance ou augmenter la portée de votre projet.

Si votre instinct vous dit que vous n'avez pas assez de personnel pour gérer le projet, vous avez peut-être raison, mais vous devez comprendre pourquoi c'est ce que vous dites instinct. Il ne suffit pas d'avoir simplement un sentiment. Au lieu de cela, vous devez être en mesure d'examiner le problème scientifiquement afin de fournir des preuves pour sauvegarder vos instincts, et vous devez être prêt à faire face à la possibilité que vos instincts puissent même avoir tort. Une fois que vous avez rassemblé vos preuves - c'est-à-dire: la portée du projet, vous devez vraiment vous asseoir avec votre direction et plaider en faveur de la réduction de la portée du projet ou de l'augmentation des ressources disponibles pour assurer la réussite du projet, sur la base sur la preuve à portée de main.

S.Robins
la source
La portée semblerait être la réécriture complète d'un système SLOC 250K en quelque chose de qualité rétractable (ou du moins de qualité de logiciel de consultation). L'avantage est que la collecte des exigences et la conception globale sont probablement déjà effectuées. Ce n'est pas petit, et ce n'est pas quelque chose pour un développeur qui a d'autres responsabilités.
David Thornley
@DavidThornley Cela dépend fortement de l'étendue des tâches des développeurs, de ses délais, de sa charge de travail, de la façon dont son entreprise commercialise déjà le produit. J'ai vu de nombreux projets complexes travaillés par une équipe de 1-2 personnes qui ont été très réussis parce qu'ils étaient bien gérés ... et beaucoup d'autres qui ont échoué. Je suis toutefois d'accord pour dire que la tâche est énorme et que, en soi, c'est déjà un peu un drapeau rouge en termes de ressources. Le truc, c'est que ça ne vaut pas la peine d'embaucher beaucoup de gens sans avoir fait un peu de devoirs d'abord, ce qui est vraiment le point de ma réponse. :-)
S.Robins
La portée est quelque chose que j'ai soulevé un peu ces derniers mois. 20% du projet a 80% de l'impact sur l'entreprise. C'est sur cela que j'essaie de me concentrer. Malheureusement, le 80% qui a 20% de l'impact est ce qui est poussé à l'avant de la ligne alors que nous essayons de faire face aux "urgences" en y jetant plus de code et de fonctionnalités. Une fois, j'ai demandé un gel des fonctionnalités afin de pouvoir résoudre certains problèmes de base. Ils m'ont donné 5 jours. Inutile de dire que c'est 5 ans plus tard et bon nombre des problèmes fondamentaux demeurent. Merci pour votre message, très utile.
kstevens715
6

Le succès du produit / projet dépendra de l'engagement de l'entreprise qui l'a payé. S'ils vont embaucher plus de programmeurs / personnel de soutien, il y aura une baisse inhérente de productivité de la part d'un seul programmeur, qui sait qu'il doit former, enseigner, gérer, etc. non pas que c'est une mauvaise chose .. mais il y aura être une diminution avant que toute augmentation ne soit réalisée .. il y a aussi le besoin d'analystes commerciaux, de gestionnaires, des ventes et du support du produit une fois qu'il est commercialisé ..

L'hébergement d'une application commerciale est bien plus que la simple création d'une plateforme solide. il y a des exigences de support, un support technique, une correction de bugs, une formation des utilisateurs, etc.

avez-vous une bonne procédure d'analyse / spécifications / estimation en place? sinon, commencez maintenant , vous pouvez le faire vous-même.

travaillez-vous votre cerveau en ce moment? Si c'est le cas, préparez-vous à travailler deux fois plus dur si vous êtes censé gérer ce processus et continuer à développer (augmenter en raison?).

et voici la réponse de mon expérience précédente dans une situation similaire dans la tarification de la région sud de la Californie:

5-6 personnes && ~ 500k

  • 1 développeur principal / gestionnaire portant tous les chapeaux (~ 100k - 120k)

  • 2 programmeurs Sr. (très capables, autonomes) avec une bonne compréhension et compétences en DB (2x ~ 80 - 100k)

  • 1 Chef de projet pour l'interface avec la direction ($$?), Cette personne doit également être en mesure de comprendre les besoins de l'application et de communiquer ces besoins directement aux programmeurs.

  • 1? (HTML / UI) développeur? avec des compétences javascript (je déteste la programmation UI / code de balisage)

  • 1? Personne de la base de données? cependant, la plupart des bons programmeurs n'ont aucun problème à créer des structures de données évolutives, cependant, si vous allez avoir des problèmes d'optimisation, vous voudrez au moins avoir un consultant

hanzolo
la source
1
+1 J'aime bien votre ventilation! Complétez OT les salaires que vous citez me dépriment car j'ai pensé à travailler dans SoCal mais ils ne sont pas beaucoup plus élevés qu'en Europe occidentale, si les gens Sr sont comme MSc + 5 ans de travail.
Farmor
1
Je suis d'accord, sauf que je recommanderais également un programmeur de niveau d'entrée pour prendre en charge les tâches de support (configuration du client et améliorations mineures) et faire un travail de grognement général. La combinaison de certains rôles peut fonctionner selon les niveaux de compétence impliqués.
jfrankcarr
Wow, vous pouvez obtenir des développeurs seniors à So Cal pour 80-100K? Cela semble assez faible compte tenu du coût de la vie. Peut-être que nous avons des idées différentes de «senior»; les développeurs seniors que je connais à Dallas obtiennent beaucoup plus que cela.
Kevin Cline
Nous avons probablement aussi des idées différentes de ce que le goût est bon .. J'ai embauché 2 .Net Sr. qui étaient jeunes et talentueux avec beaucoup d'expérience au cours des 10 dernières années et qui étaient prêts à travailler dans cette gamme. Nous avons utilisé la dernière Microsoft Stack (TFS, .NET 4, C #, EF 4.1, MSSQL 2008 R2, blah blah ..), et nous n'avons eu aucun problème à frapper un bon code propre. Nous étions une petite équipe, et le problème que nous avons trouvé en essayant d'embaucher des Sr. était qu'ils étaient résistants à l'apprentissage et avaient trop d'opinions et transportaient trop de bagages (nous n'avions pas non plus de fenêtre d'embauche)
hanzolo
2

1 programmeur sur une grande base de code avec tous la responsabilité de configurer, tester, communiquer, soutenir, documenter et corriger les bogues n'aura pas beaucoup de temps pour écrire du nouveau code ou ajouter des fonctionnalités (ou même refactoriser l'ancien code).

Répartissez votre semaine en fonction du pourcentage de ces tâches obligatoires qui ne développent pas l'entreprise et vous serez surpris de la rapidité avec laquelle la direction embauche de l'aide supplémentaire.

Les grands projets ont une certaine quantité de frais généraux associés qui ne disparaîtront pas (surtout si vous implémentez / testez de nouveaux clients tout le temps comme vous semblez l'être). C'est la raison pour laquelle vous avez des rotations de support et un support en général; certains membres de l'équipe ont donc le temps de travailler sur de nouvelles fonctionnalités.

Vous pouvez également consulter des livres sur l'estimation de logiciels. Ces livres peuvent ne pas sembler avoir beaucoup à dire, mais ils contiennent des études de cas intéressantes dans divers domaines et étayent leurs affirmations par des preuves.

Brian
la source
95% de mon temps est consacré à l'une de ces tâches. J'aime l'idée des rotations de support. Cela peut être quelque chose à considérer si nous embauchons quelqu'un que je peux faire tourner avec lol. Aujourd'hui, par exemple, je commençais à travailler sur un code de base et j'ai été interrompu parce que quelqu'un avait besoin d'une batterie.
kstevens715
@ kstevens715 - Il semble que vous ayez besoin d'aide, même si c'est le gamin de quelqu'un qui est technique. Je suppose que vous recevez au moins un revenu à 5 chiffres, si on me disait de me procurer une batterie, cela coûterait environ 10 $ pour mon employeur (35% de mon salaire horaire).
Ramhound