web-dev-qa-db-fra.com

Comment estimer une tâche de programmation si vous n'en avez aucune expérience

Je rencontre des difficultés avec la direction qui demande des estimations sur les tâches de programmation qui utilisent des contrôles tiers avec lesquels je n'ai aucune expérience préalable.

Je comprends certainement pourquoi ils voudraient les estimations, mais j'ai l'impression que toute estimation que je donnerai sera a) trop courte et me fera mal paraître ou b) trop longue et me fera mal paraître.

Quelle estimation ou réponse pourrais-je donner à la direction pour les retirer de mon dos afin que je puisse continuer à faire mon travail!

96
Jon Erickson

La meilleure réponse que vous puissiez donner est de demander du temps pour créer un prototype rapide pour vous permettre de donner une estimation plus précise. Sans certains expérience avec un outil ou un problème, toute estimation que vous donnez est essentiellement dénuée de sens.

Soit dit en passant, il est très rarement difficile de donner une estimation trop longue. Des problèmes imprévus se produisent, les priorités changent et les exigences sont "mises à jour". Même si vous n'utilisez pas tout le temps que vous avez demandé, vous aurez plus de temps de test, ou vous pourrez sortir "tôt".

J'ai toujours été beaucoup trop optimiste dans mes estimations, et cela peut mettre beaucoup de stress dans votre vie, surtout lorsque vous êtes un jeune programmeur sans l'expérience et la confiance en soi pour dire aux patrons des vérités inconfortables.

91
RB.

Je vais vous révéler un secret. Même si vous étiez un expert de cette technologie, votre estimation est probablement très inexacte. C'est la nature de la bête lorsqu'elle fait quelque chose qui est intrinsèquement une tâche de R&D. Malheureusement, la direction essaie souvent d'appliquer un modèle de fabrication et d'exiger des estimations précises. Pour illustrer mon propos, considérons la difficulté d'estimer avec précision les deux efforts suivants:

A) Fabriquez un autre parapluie 11K qui est exactement le même que le 2K que vous avez produit le mois dernier. B) Concevez un nouveau type de parapluie et construisez le premier.

Le développement logiciel est B, mais ils demandent une estimation en supposant A.

Le mieux que vous puissiez faire est de diviser la tâche en morceaux les plus petits possibles (pas plus d'une demi-journée chacun), puis de tripler le nombre final que vous obtenez. (Méthode Spolsky)

Alternativement, Steve McConnell a un livre entier (sans doute plusieurs) sur cet aspect du génie logiciel. http://www.Amazon.com/Software-Estimation-Demystifying-Practices-Microsoft/dp/0735605351

38
JohnFx

Steve McConnell (et d'autres) parle du cône d'incertitude . Fondamentalement, vous fournissez une estimation qui ressemble à ceci:

Le travail prendra entre 3 et 9 semaines, 4 semaines étant les plus probables.

Au fur et à mesure que le projet avance, vous pouvez affiner votre estimation. Au fur et à mesure que vous effectuez plus de travail et comprenez mieux l'effort requis, vous pouvez affiner votre estimation pour être plus précis.

Cela a fonctionné pour moi, mais cela peut nécessiter des efforts pour amener les autres parties prenantes du projet à comprendre le processus.

31
Jim Blizard

Vous voudrez peut-être envisager de donner à la fois une estimation et un niveau de confiance, c'est-à-dire que c'est 50/50 que cela prendra 3-6 mois ou 6-9 mois ou 75% de chance d'être fait en 9 mois et 90% que vous serez fait en un an.

Une autre chose que vous pourriez envisager est d'utiliser l'approche " sagesse des foules ". Faites le tour et demandez à 25 à 50 personnes combien de temps elles pensent que cela prendra et faites la moyenne de leurs estimations. Planning Poker de Mike Cohn est, je pense, très similaire à cela, bien que difficile à planifier avec un seul développeur.

13
tvanfosson

Décomposez votre estimation en:

  • Connus connus; combien de temps faut-il pour faire ce que vous savez faire. Vous devriez pouvoir donner cette estimation avec un haut degré de confiance.
  • inconnues connues; combien de temps pensez-vous qu'il faudra pour faire ce que vous ne savez pas comment faire. Vous pouvez utiliser une méthode comme celle de dacracot pour donner différents niveaux de confiance sur cette estimation.
  • inconnues inconnues; c'est le trou noir en temps réel. Ce sont des choses qui surgissent au moment le plus inopportun et vous mordent dans le cul. Fournissez une fourchette pour l'estimation avec une justification basée sur les risques que vous prévoyez.

Offrez d'ajuster l'estimation et certains jalons en cours de route. Toutes les inconnues inconnues deviendront des inconnues connues, les inconnues connues deviendront des connues au fur et à mesure que vous gagnerez en expérience, et l'estimation de vous-mêmes connues peut être ajustée en fonction des progrès réalisés à ce jour. Vous pouvez faire une estimation initiale, puis réestimer lorsque vous avez fait environ 25%, puis à nouveau à 50%, puis à nouveau à 85%. À chaque étape, votre estimation devrait commencer à converger vers le temps réel que les tâches prendront.

10
Patrick Cuff

J'utilise un système d'étiquetage précis pour mes estimations ... classe A, classe B et classe C.

L'estimation de classe C est la première qu'ils obtiennent. Il est ouvertement déclaré comme plus ou moins 50% en raison d'inconnues. S'ils veulent que je continue à leur donner une classe B, alors j'ai besoin d'argent pour faire des recherches.

La classe B est de plus ou moins 25%. Parfois, c'est assez bon et ils me donnent l'argent pour construire. Sinon, moins d'argent et plus de recherche.

La classe A est de plus ou moins 10%, la finale et aller ou non. Si c'est un aller et que je m'éloigne trop de l'estimation je l'avoue souvent et tôt.

8
dacracot

Je pense que si vous supprimez l'expression "qui utilise des contrôles tiers avec lesquels je n'ai aucune expérience antérieure", vous pourriez avoir une meilleure description de votre problème plus important.

Si "Agile" nous a appris quelque chose, c'est que, si la direction attend de vous, sur une base continue, d'estimer les projets de cette façon, et vous aurez "mauvaise mine" si vous dites que cela ne peut pas être fourni parce que vous n'avez pas assez d'informations, vous êtes sur la route de l'échec.

Le plus gros problème sera les problèmes sur lesquels vous n'avez aucun contrôle et que vous n'avez même pas encore identifiés. Combien de fois avez-vous regardé en arrière et vous êtes-vous dit "Eh bien, j'ai frappé mon estimation directement sur le bouton - au troisième essai, après avoir compris que ... et que j'avais besoin d'une version ... et que le dba serait allumé vacances pendant une semaine et que le chef de projet aurait besoin de moi pendant ... une semaine et que ma femme était enceinte et ... ".

J'essaierais vraiment de dire: "Je peux identifier les facteurs de risque critiques et proposer une liste de contrôle des livrables pour les tester dans xx jours. À ce stade, je vous donnerai une autre estimation incrémentielle.

Et ce serait vraiment bien si vous pouviez suggérer qu'ils devraient "Veuillez insister pour que je n'essaye jamais de vous donner une estimation crédible de ce type à l'avenir. Renvoyez-moi si j'essaye."

(Surestimé, mais seulement légèrement.)

8
dkretz

N'essayez même pas d'estimer. Il n'y a aucun moyen que votre estimation soit correcte. Ce n'est après tout qu'une estimation.

Je recommanderais plutôt de diviser la fonctionnalité en petits morceaux (pas plus que, disons 1-2 jours) et d'essayer de livrer ces morceaux en tant que code de travail, complet, testable et précieux au client/gestionnaire. De cette façon, il verra par vous-même vos progrès au jour le jour. Cela signifie également qu'il peut en fait décider d'arrêter le développement une fois satisfait et le considérer comme terminé, même s'il n'a peut-être pas atteint tous les objectifs.

Jetez un œil aux pratiques agiles "Release Planning" et "Iteration Planning" pour des informations plus détaillées sur cette approche.

7
Martin Wickman

Gardez à l'esprit que si vous demandez une estimation de temps plus importante mais que vous la faites à temps, cela semble beaucoup mieux que sous-estimer et devoir demander une prolongation.

J'essaierais de me moquer d'un prototype pour que vous ayez une meilleure idée du temps qu'il faudra. Soyez honnête avec votre direction afin qu'elle puisse prévoir des retards inattendus dans la courbe d'apprentissage.

EDIT: Vous pourriez également voir si vous pouvez obtenir un délai plus "itératif". Dans "Pensée et apprentissage pragmatiques", Andy Hunt souligne que les gens sont des experts du projet plus près de la fin du projet et les moins informés au tout début. Cela n'a pas beaucoup de sens de faire toute votre conception et votre estimation du temps au tout début, alors que tout le monde est le moins informé du projet. Si vous "itérez" les délais et résolvez le problème en morceaux, vous aurez plus de succès.

5
Jordan Parmer

Beaucoup d'estimation précise est la connaissance de soi. Si vous avez écrit beaucoup de code, si vous avez dû apprendre beaucoup d'API, vous commencez à vous faire une idée de questions comme:

  • Combien de temps me faut-il pour apprendre une nouvelle API?
  • Combien de temps me faut-il pour apprendre une nouvelle langue?
  • Combien de temps me faut-il pour apprendre un nouvel ensemble d'outils (compilateur/éditeur de liens/IDE)?
  • Combien de temps me faut-il pour réaliser une tâche typique?
  • Combien de temps me faut-il pour tester mon travail?
  • Combien de temps me faut-il pour déployer mon travail?

Tout au long de cela, vous devriez avoir une idée de choses telles que:

  • Combien de bogues typiques vous créez et comment ils sont classés (c.-à-d. Faciles, difficiles, impossibles)
  • Combien de complications sont introduites (c.-à-d. Besoin de refactoriser en raison du manque d'API tierce ou d'API boguée; besoin de reconcevoir en raison d'une mauvaise compréhension des capacités; outils/processus de construction non standard)
  • Combien de temps est perdu en raison d'interruptions/de problèmes extérieurs

Sur la base de toutes ces choses, vous pourrez développer une idée du temps que prendra quelque chose et être en mesure de formuler vos hypothèses ("en supposant que l'API est saine ...") même face à des informations malheureusement incomplètes.

5
plinth

Estimez le temps dont vous avez besoin pour apprendre suffisamment pour faire une meilleure estimation, par exemple, "Je ne sais pas: je n'ai jamais travaillé avec cela auparavant. Cela me prendra probablement insérez votre estimation ici = afin de travailler ce que vous devez savoir à ce sujet que je devrais savoir avant de pouvoir vous donner une bonne estimation pour l'utiliser pour terminer votre projet. "

5
ChrisW

Décomposez-le en éléments avec lesquels vous avez une certaine expérience. Le fait de le couper vous donnera une meilleure idée de ce que vous savez et de ce que vous ne savez pas.

Une fois que les pièces sont suffisamment petites pour pouvoir être considérées comme des tâches définies, certaines d'entre elles seront totalement non estimables. Pour ceux-là, soit le prototype en premier, soit vous laissez un peu de temps raisonnable, selon la taille de la pièce. Si vous trouvez que vous avez des pièces non estimables plus grandes que 2 à 4 semaines de travail, recommencez par les couper.

Finalement, vous passerez à des solutions technologiques très étranges (qui devraient fonctionner, mais vous ne savez pas avec certitude), et beaucoup de travail à faire pour sauvegarder ces choses, une fois que cela fonctionnera. Il y aura quelques éléments de conception manquants, pour lesquels il est préférable de choisir une bibliothèque bien connue ou un algorithme très simple pour la version initiale.

Si vous ne pouvez pas décomposer les tâches, vous devez alors embaucher quelqu'un qui possède suffisamment d'expérience (car votre manque d'expérience va vous hanter par d'autres moyens également). Si vous ne pouvez pas embaucher quelqu'un, alors vous devriez simplement négocier pour une période aléatoire (6 mois à 2 ans) et vous diriger directement vers un prototype en désordre (jusqu'à ce que vous ayez réussi à vous donner suffisamment d'expérience pour savoir ce qui est bien et ce qui est faux). Mais, si vous finissez par vous battre, il est important de ne pas vous tromper et de penser que vous le faites de la bonne manière. Les prototypes devaient être jetés. J'espère qu'une fois le compte à rebours du prototype terminé, vous êtes prêt à le construire pour de vrai.

Paul.

3
Paul W Homer

Lors de la programmation, j'ai toujours pris ce que je pensais vraiment qu'il me faudrait et le multiplier par 3 pour fournir une estimation. Si je pense que je peux faire un travail en 1 semaine, je dis au client que cela prendra 3 - si je pense que cela me prendra vraiment 3 semaines, je le dis au client 9 semaines.

En faisant cela, je me suis mis à "sous promesse, à livrer plus" - si vous pouvez réussir, votre vie sera bien meilleure et vos clients seront extrêmement heureux.

Dans votre cas, vous voudrez certainement comprendre au moins QUELQUE partie de ce que vous plongez avant de fournir une estimation. Vous devrez peut-être même fournir une estimation du temps qu'il faudra pour fournir une estimation. La multiplication par 3 garde les clients satisfaits.

3
Jeremy H

C'est une compétence indispensable que le chef de projet et le programmeur peuvent avoir (et bien sûr maîtriser!), J'ai trouvé un article, Estimer les tâches de développement logiciel rendues (un peu) plus facilement, ce qui devrait aider à une meilleure estimation des tâches du projet.

2
O.Badr

Il vous suffit de deviner un nombre extérieur et de procéder à une évaluation immédiatement, de leur faire savoir que les informations futures peuvent affecter vos estimations, mais que vous les maintiendrez à jour.

Au fur et à mesure de votre évaluation, tenez-les informés - soit par le biais d'un document publié sur le Web, soit par des mises à jour hebdomadaires, mais incluez toujours une "date de fin estimée" mise à jour et les raisons (le cas échéant) des extensions.

La plupart des gestionnaires devraient comprendre que - en demandant des dates de fin, ils disent vraiment "donnez-nous une idée de la façon dont nous pouvons planifier notre horaire" et "ne prenez pas seulement une éternité".

Si vous finissez par vous étendre plus d'une ou deux fois, réévaluez l'intégralité de votre emploi du temps en fonction de vos nouvelles connaissances que vous aspirez à estimer.

2
Bill K

J'ajouterais à ce que RB a dit, lorsque je me retrouve dans cette situation, j'évalue le temps qu'il faudrait avec des outils que je connais, puis double cette estimation pour construire une courbe d'apprentissage.

L'important est de communiquer à la direction que l'estimation est un devinez, s'ils demandent une estimation plus précise ou s'ils essaient de - cher Dieu - vendre vous un délai (cela ne prendra sûrement que vous 2 jours pour construire le Starship Enterprise, vous êtes bon vous êtes) COLLEZ À VOS ARMES À FE, ne compromettez pas votre estimation, ou le fait que ce n'est pas fiable.

Si la direction vous supplante et temporise la tâche par exemple "Eh bien, cela doit être fait en 2 jours", faites-leur savoir à nouveau que c'est leur estimation, qui est exactement aussi fiable que la vôtre.

Notez tout cela par écrit.

2
Binary Worrier

Je fais beaucoup d'estimation dans mon travail et c'est un vrai défi. L'un de mes plus grands défis consiste à estimer le temps qu'il faudra à un développeur différent pour accomplir une tâche sans savoir à quel point ce développeur sera qualifié.

Bien que vous puissiez voir un certain succès initial avec la méthode "sous promesse, sur-livrer", vous constaterez qu'avec le temps, vous serez surenchéri par d'autres personnes qui suivent l'école de pensée "sur promesse, sous-livrer". Le manque de précision reviendra vous mordre de toute façon. La précision est très liée à l'expérience et à la limitation du nombre d'inconnues avec la technologie.

Une chose que je suggérerais serait de vous faire une idée du type de budget sur lequel votre estimation fonctionnera. Si vous avez un petit budget, ne devenez pas fou avec une technologie inconnue et restez avec ce que vous savez. Si votre budget est un peu plus flexible, vous pouvez vous permettre d'expérimenter un peu.

Reconnaissez également qu'il y aura certaines tâches où tout ce que vous pouvez fournir est un Wild Ass Guess (WAG). Pour ceux-ci, vous devez définir un temps minimum pour votre estimation et indiquer clairement que vous ne savez pas quel est le maximum. Souvent, ce type d'estimation est une raison suffisante pour que certaines fonctionnalités/exigences soient supprimées par la direction.

2
Karthik Hariharan

C'est une situation très courante: la nécessité de faire face à l'inconnu. Un moyen utile de résoudre ce problème est de réaliser qu'en plus des tâches de programmation réelles, vous avez un peu d'apprentissage à faire - et la direction doit en être consciente.

Lorsque vous êtes dans une situation comme celle-ci, le projet devient soudainement un projet de R&D et un temps plus long que la normale ne vous fera pas mal paraître, car vous apprenez et produisez des programmes. Je ne sais pas à quelle vitesse vous apprenez ni quelles ressources vous avez pour faire face aux problèmes que vous pourriez rencontrer (Stack Overflow est l'une des options que vous avez).

Je dirais que vous devriez estimer comme d'habitude, puis multiplier par 1,5 (si vous êtes un apprenant rapide et avez accès à des ressources pour résoudre vos questions) ou par 2,5 si vous êtes un apprenant moyen et ne comptez que sur vous-même.

J'espère que ça aide!

1
Kwang Mark Eleven

Toutes les réponses ci-dessus ont couvert à peu près tout ce qui concerne l'élaboration de l'estimation elle-même.

Une chose que je voudrais souligner est de garder une trace de votre estimation (une petite feuille de calcul Excel à la Joel, ou même un document Bloc-notes si c'est très simple), et à la fin de chaque jour, mettez-le à jour avec les chiffres les plus précis que vous pouvez maintenant fournir . Même si vous n'avez pas besoin de le transmettre à vos patrons, le garder à jour vous donne une meilleure idée de la façon dont les choses progressent, et plus important encore, vous aurez une bonne idée de pourquoi votre estimation change au fur et à mesure de l'avancement des travaux.

Faire cela vous permettra de mieux estimer à l'avenir, à la fois pour cette technologie spécifique et d'autres que vous n'avez pas utilisées auparavant, simplement parce que cela vous oblige à un certain niveau à remarquer quand vos attentes changent à intervalles réguliers, et à comprendre pourquoi cela s'est produit .

1
Andrzej Doyle

Estimer le temps que quelque chose va prendre fait partie de votre travail. Tant qu'il est entendu qu'il s'agit d'une estimation plutôt que d'une échéance, vous ne devriez avoir rien à craindre. Il n'y a personne mieux placé pour fournir une estimation que la personne qui va écrire le code. Si vous ne pouvez pas fournir une bonne estimation, vous devez informer la direction du risque lié à votre mauvaise estimation afin qu'elle puisse reconsidérer s'il vaut la peine de prendre le risque de programmer contre ces contrôles tiers inconnus.

1
Sam Meldrum

Pouvez-vous donner une gamme? 40-60 heures, quelque chose comme ça?

Plus les tâches sont petites, plus il est difficile, si vous pouvez les regrouper, vous aurez un peu plus de "slop" car les erreurs peuvent s'équilibrer à la fin du projet.

Examinez tous les domaines avec lesquels vous avez de l'expérience et utilisez-les comme guide. "La dernière fois qu'il fallait créer une fonctionnalité qui a changé la base de données, il m'a fallu X". Bonne chance.

0
Dan Williams

Faites de votre mieux pour diviser la tâche en plusieurs parties gérables. Avec un peu de chance, il y a des tâches spécifiques liées au composant tiers impliqué et d'autres qui sont moins couplées (et donc plus faciles à estimer). Donnez à la direction les estimations divisées et indiquez où résident les estimations les plus incertaines.

Je suis entièrement d'accord avec celui qui a suggéré de jouer et de prototyper certains. Définissez un délai fixe pour l'activité de prototypage. ("J'ai d'abord besoin de deux jours pour améliorer cette partie de mon estimation.")

0
PEZ