web-dev-qa-db-fra.com

Comment pouvez-vous estimer le temps des tâches qui consistent principalement à déterminer un problème?

Bien qu'il soit relativement possible pour un développeur expérimenté d'estimer combien de temps il faudra pour mettre en œuvre le code lorsque la résolution du modèle et de la résolution du code est bien comprise, comment pouvez-vous faire une bonne estimation quand, tandis que l'objectif final est bien compris, la La mise en œuvre est une résolution théorique/problématique de 95% et présente de très petites quantités de mise en œuvre?

Mon travail consiste souvent en des tâches pour accomplir des objectifs bien définis, mais je dois trouver la voie à atteindre cet objectif et jusqu'à ce que je comprenne la solution, cela ne précise pas les barrières supplémentaires. Plus spécifiquement, je travaille souvent sur la génération de code ou les outils de manipulation de code automatisés. Une fois la solution entièrement résolue et l'outil perfectionné, il effectuera directement 95% des changements réels très rapidement. Je n'ai cependant aucun moyen d'estimer le nombre de problèmes supplémentaires pourraient être résolus à faire de la génération ou de l'analyse des outils d'outils imprévisibles.

À des fins de planification, ma société veut une meilleure idée de la durée de la durée de la durée, mais comme je ne sais pas combien de problèmes supplémentaires peuvent arriver tout en travaillant en résolvant chaque étape de la solution. Je ne sais pas comment je peux aborder de donner une meilleure estimation.

56
AJ Henderson

Avant de gagner trop loin, laissez-moi dire cela Estimation logicielle: Démystifier l'art noir est une excellente ressource pour les personnes qui envisagent et pensent aux estimations. Les deux images ci-dessous sont tirées de ce livre, tout comme le noyau si les idées présentées ci-après.

Comme vous l'avez noté, les estimations constituent un rôle important dans la possibilité de prédire et de planifier avec précision. Ne pas avoir estimé rend l'entreprise aveugle de combien de temps quelque chose prendra. Il n'est pas rare que l'entreprise ait une idée complètement erronée sur la durée de la durée des choses - ce qu'elle pense est facile de prendre six à huit semaines et de ce que la pensée est difficile est un piratage du vendredi après-midi.

La première chose est de donner une estimation. Une estimation elle-même n'est pas un nombre unique - c'est un engagement. "Combien de temps va prendre ABC" -> "environ 5 jours" signifie que c'est environ 5 jours. Cependant, une bonne estimation est une gamme où vous êtes confiant à 90% de l'avoir dans cette gamme. Si vous voulez dire "je suis confiant à 90% qu'il faudra entre 1 et 5 jours" puis dire cela. Ne travaillez pas à partir de "Je pense que cela prendra entre 1 et 10 jours, donc 5 jours est probablement à peu près moyen" - ce n'est pas une estimation et vous aurez de 50% de temps.

Eh bien, 50% ou plus du temps, les programmeurs sont des sous-estimateurs notoires pour des moments de tâche.

Considérer le cône d'incertitude :

Image de http://www.construx.com - Article complet à http://www.construx.com/thought_leadership/books/the_cone_of_unceraint/

Réalisez que la première estimation de cette plage est de 16x. Cela s'apparente à dire "Je pense que cela prendra entre un après-midi et deux semaines" - mais vous ne savez pas encore. Lorsque vous avancez un peu avec la conception, la gamme se rétrécit jusqu'à 4x. Cela ne signifie pas non signifie qu'il faudra une semaine, cela signifie que vous disiez plutôt "après avoir regardé cela un peu, il faudra entre trois Semaines "- Oui, l'estimation a monté, mais aussi la gamme de l'estimation a diminué.

Avec chaque estimation que vous donnez, vous devez être sûr de 90% que l'estimation est dans cette plage. Vous pouvez vous tromper - 10% du temps qu'il va tomber de cette gamme.

Il y a beaucoup façons d'estimer la taille des projets. En comparant les projets passés, à l'aide d'un proxy (je pense que cela prendrait 1000 lignes de code qui prendrait cette longue pour écrire), en utilisant des points de fonction (pour convertir en loc ...), obtenir des estimations d'un certain nombre de personnes, puis Raffinez-le itérativement ... Certains travaillent pour certains projets, certains travaillent pour d'autres projets.

A Très Chapitre important de ce livre que j'ai mentionné au sommet est # 23 qui traite du politique d'estimation et de gestion des gestionnaires et des dirigeants.

La clé d'une estimation est le processus itératif de l'affiner après avoir travaillé un peu.

Donner trop précis d'une estimation trop tôt dans le processus peut être très sujet aux erreurs. Si vous n'en êtes pas sûr, donnez-lui une large estimation, puis revenez avec une autre estimation après une certaine période pour plus de temps pour plus d'introspection dans le problème et éventuellement dessiner comment vous le ferez, en regardant combien de code vous avez écrit pour le dernier problème similaire et d'autres facteurs qui auront une incidence sur l'estimation.


Les estimations nécessitent une pensée - ne cédez pas les estimations du brassard. Ceux-ci ont souvent énormes erreurs associées à eux par rapport à ce qu'il faut quand vous y réfléchissez un peu.

De Comment répondre lorsque vous êtes demandé une estimation?

Que dire quand on demande une estimation

Tu dis "Je te reviendrai."

Vous obtenez presque toujours de meilleurs résultats si vous ralentissez le processus et passez du temps à parcourir les étapes que nous décrivons dans cette section. Les estimations données à la machine à café seront (comme le café) reviennent vous hanter.

Du chapitre 4 de l'estimation logicielle:

Figure 4-8 Average error from off the cuff estimates

Notez que, dans ce cas, les estimations après un bit d'examen sont systématiquement moins sauvages et prononcées par erreur que les estimations du brassard. Ne ferez pas les estimations du brassard. Asseyez-vous et pensez à la tâche et estimez-le après un peu de pensée.

41
user40980

Boss: AJ, nous avons 3 chiens, 2 lapins, une catapulte et une religieuse. Nous devons trouver un moyen d'obtenir tous les 7 (oui, la catapulte aussi) sur un mur de 20 pieds et dans le lac de l'autre côté sans que les chiens ne mangeaient aucun lapin et sans noyer la religieuse. Combien de temps cela vous mènera-t-il pour trouver la solution?

Voir, le problème estimant combien de temps il faudra pour résoudre un problème, c'est que cela prend différentes personnes un temps différent. Si vous avez des antécédents de résolution de problèmes similaires, vous pouvez estimer en fonction de la durée de la durée pendant laquelle cela vous a déjà pris auparavant. Si vous ne le faites pas, alors vous n'êtes pas estimé, vous devez simplement deviner.

En outre, le problème peut ne pas avoir une solution acceptable. Ou peut-être que la solution nécessitera une autre autorisation qui pourrait lancer tout le projet. Ou peut-être la solution change toute la nature perçue du problème de sorte que la solution devienne tout à fait inutile.

La morale de l'histoire est que si vous n'avez pas assez d'informations pour faire une estimation raisonnable, alors NON. Pas encore. Se procurer plus d'information. Recherche plus. Typiquement, il est parfaitement acceptable de dire: "Je reviendrai à vous dans 2 jours avec des nombres plus solides."

Lors de la conception d'une solution pour i Client, je ne signerai pas de contrat avant d'avoir assez de la conception générale complète que je connais à quoi ressemblera la solution et combien de temps le projet prendra. Cela signifie que je risquez d'avoir effectué des travaux de conception initiaux que je ne suis pas payé (si le projet ne passe pas), mais c'est mieux que d'être risqué de sous-facturation de manière significative pour le travail effectué .

15
tylerl

Je vous suggère d'essayer quelque chose de mi-chemin entre les réponses de Tylerl et Michaelt avec ce qui suit:

  • diviser le travail à effectuer en 3 ou 4 phases. Les phases devraient être:
    1. Analyse du problème
    2. Prototypage de la solution
    3. Solution du monde réel
    4. Évaluation de la sortie (test)
  • fournissez une estimation uniquement pour la phase 1 (analyse) basée sur votre expérience ou sur phases 1 + 2 (analyse + prototype) à votre gestion. Ensuite, fournissez-leur une estimation pour les phases 3 + 4 lorsque les phases problématiques 1 et 2 sont effectuées (ou au moins avancées suffisamment avancées afin que vous puissiez avoir confiance dans votre estimation).

La justification de la direction est que vous connaissez par expérience que vous avez besoin de x jours pour analyser une base de code donnée (probablement selon sa taille) et avoir une action d'outils de base ou de scripts en cours d'exécution (et peut-être échouer). Ensuite, le nombre d'erreurs devrait vous fournir des informations sur la difficulté réelle de la tâche à accomplir.

Cela peut ne pas être exactement ce que la direction veut, mais je crois qu'il est toujours préférable de trouver des estimations que vous rencontrerez réellement.

4
sansuiso

Comme cette question concerne principalement les types de travaux de recherche, demander aux développeurs de logiciels est une approche courageuse, une métrique commune est que le développeur de logiciels qui prend deux fois plus longtemps que leur estimation est probablement un bon développeur. Toutefois, cela dit, les tâches de recherche (et d'architecture) font très partie de la programmation et sont souvent ignorées/minimisées. Ils sont également souvent difficiles à estimer.

La première question que je me poserais, est-ce un problème qui peut être résolu? Ce n'est pas un intellect ni un problème de pouvoir cérébral, mais une réalité pratique. Sauf si vous êtes dans le monde de Google Moon Shots, où l'échec est un résultat attendu, la réalité difficile est que je devrai livrer ceci , peu importe Ceci s'avère être. Une règle approximative de l'treet semble-t-elle être que nous savons déjà quels 90% de la solution doit être?

La deuxième question que je demanderais, quoi d'autre serait utile de savoir en réfléchissant à la solution? C'est vraiment un moyen de vérifier la double vérification, savons-nous vraiment assez pour trouver une solution qui sera acceptable. Il peut générer une série de des tâches des tâches qui aident à mieux définir ce que la solution doit être, chacune étant généralement assez facile à définir et à estimer .

La troisième question est, qui est la mieux adaptée à l'équipe pour ce genre de problème? Quiconque obtient cette tâche aromatisera le résultat avec son propre style. Donner ce genre de problème à un programmeur qui compte 10 millions de questions au début d'une tâche, puis disparaît et fournit quelque chose pour la première fois (bien que lentement) pourrait bien être un meilleur choix que de lui donner le programmateur qui frappe rapidement la mise en œuvre. , mais quand il y a un problème, sa seule découverte à la fin du processus.

Ensuite, la tâche réelle serait de penser à des solutions possibles, des implémentations et des approches, et d'avoir une échelle de temps fixe dans laquelle ils doivent faire rapport.

Lorsqu'ils rapportent en retour, vous avez le choix d'obtenir un ensemble plus large de solutions possibles, ce qui donne à la mise en œuvre d'une solution ou de réfléchir, car la solution n'est toujours pas définie assez clairement.

1
Michael Shaw

Avec des questions de recherche sur les chercheurs où il n'est pas clair qu'il y a une réponse du tout, sans parler d'une idée claire de ce qui doit être fait, je propose habituellement de passer la quantité de temps x de temps comme départ.

"Je ne sais pas si cela est encore possible, mais je pourrais passer deux jours à la recherche de la recherche. Cela ne nous donnera probablement pas une solution, mais peut-être que je pourrai exclure certaines choses et j'aurai probablement une idée Quelles sont les prochaines étapes concènes et quel type d'investissement de temps ils signifieraient. Ensuite, nous pouvons décider si c'est logique de prendre une autre étape. "

Alors, mettez l'incertitude dans l'autre direction - l'estimation est joliment précise (je vais passer deux jours), c'est juste très indéterminé ce qui sera atteint à ce moment-là.

Timeboxing, fondamentalement.

1
RemcoGerlich