Nous l'avons tous, des problèmes qui se révèlent difficiles à réparer et à élaborer une solution via un code obscur et des fonctionnalités inattendues bizarres. Lentement, vous travaillez logiquement en essayant de trouver des modèles, des erreurs, des erreurs. Ce processus prend du temps et les problèmes ne sont souvent pas facilement compris par le client.
Comment une réponse quand elle a demandé la question "Quand sera-t-elle faite?", Surtout lorsque le client peut ne pas comprendre les complexités inhérentes du développement de logiciels?
Vous répondez honnêtement à la question.
Vous leur dites que c'est un problème difficile, la solution n'est pas évidente et vous ne savez pas combien de temps il faudra pour résoudre. Promettez de les mettre à jour sur vos progrès tous les [horodatage], ils savent donc que vous y travailliez, et bien sûr, leur envoyer les mises à jour.
Les développeurs abordent un problème complexe en le décomposant en plus petits et en les résolvant séparément.
dans un monde idéal, résolution d'un problème serait un problème complexe [~ # ~] a [~ # ~] et vous seriez capable, dans un temps donné, de le décomposer dans une courte liste de petits problèmes un1 à an, pour chaque évaluation du temps est simple, étant donné que le temps nécessaire pour résoudre le problème complexe initial serait:
avec [~ # ~] d [~ # ~ ~] Être le processus de décomposition elle-même.
dans le monde réel, le seul problème est que t ( [~ # ~] D [~ # ~] ) serait effectivement plus grand que le temps que vous dépensez de résoudre les petits problèmes. En d'autres termes, afin d'accéder à ce niveau de décomposition du problème, vous devez pratiquement résoudre le problème lui-même.
Vous pouvez toujours:
Séparez la tâche donnée (résoudre le problème) en petits morceaux, chaque morceau étant encore un problème complexe,
Évaluer le temps prévu pour chaque morceau et le risque correspondant.
Par exemple, la tâche 1 nécessite env. 5 heures, mais le risque d'être bloqué le faire est élevé, alors donner 12 heures à l'attente du client.
Évaluez les dépendances et comment ils affectent le temps.
Par exemple, la tâche 19 nécessite 2 heures et le risque est si bas que vous pouvez dire que c'est 2 heures à coup sûr. Non 1. Mais la tâche 19 s'appuie sur la tâche 24: la tâche 24 peut affecter la tâche 19 d'une manière dont vous souhaitez réécrire complètement le code de la tâche 19 à l'aide d'une approche différente.
Donnez tous ces détails à votre client. Ne donnez pas la somme.
Le dernier point est important. Si vous donnez la somme, disons 192 heures, le client croit que c'est une métrique très précise et le temps que vous allez passer, c'est de 189 à 195 heures.
Si, au lieu de cela, vous donnez les détails,
Le client qui se soucie comprendra que ce n'est pas 192 heures. Il est 192 heures si tout se passe mal, compte tenu du risque déterminé lors de l'évaluation. C'est aussi 238 heures si tout va encore pire. C'est aussi 85 heures si tout va bien.
Quant au client qui s'en fiche, il ne lira pas votre réponse dans tous les cas. Tout ce qu'il veut, c'est un nombre, pour pouvoir vous blâmer plus tard. En donnant une réponse très détaillée, il ne sera jamais lu, vous savez qu'il ne peut pas vous demander le temps qu'il faudra à nouveau: vous avez déjà répondu cela. Il ne peut également pas vous blâmer plus tard, puisqu'il n'a pas lu la réponse afin de calculer la somme.
Tout ce que vous estimez n'oubliez pas d'inclure loi de Hofstadter : Cela prend toujours plus de temps que vous prévoyez, même lorsque vous prenez en compte la loi de Hoffstadter.
En règle générale, j'utilise une formule modifiée de CPM/PERT. C'est quelque chose comme ça:
Mn + Mx + C(T) / 2 + C, where
Mn is the minimum number of hours you think it will take,
Mx is the maximum number of hours you think it will take,
T is the typical number of hours it takes,
and C is a confidence factor from 1 - 3 based on how much you've done similar things.
(Je ne sais pas comment faire tout le formatage des mathématiques fantaisie; si quelqu'un veut éditer ceci pour cela, n'hésitez pas.)
So, if you think:
Mn = 60 hours
Mx = 180 hours
T = 100 hours
C = 2
Then: 60 + 180 + 2(100) / 4 = 110 hours.
J'irais souligner que cela pourrait varier de manière significative, en fonction de la façon dont le projet va. Si vous réévaluez votre projet tous les quelques jours, vous pouvez même fournir une mise à jour hebdomadaire. Cela va longtemps à satisfaire les clients irritables. :)
Expliquer les délicats vagues aux utilisateurs non techniques est difficile. Cela est vrai à la fois dans des phases créatives d'un projet et lors du suivi d'un bogue Pesky. Dans les deux cas, le traditionnel "décomposer le travail à des pièces plus petites" ne fonctionne pas aussi bien.
La tâche originale se concentre sur ce dernier cas, alors allons-y. Si vous ne pouvez pas donner une chronologie, dites à l'utilisateur ce que vous allez essayer et lorsque vous les contacterez. Lorsque vous atteignez le point de mi-chemin sur la chronologie auto-imposée, donnez une courte mise à jour courte et honnête. Au moins une heure avant la date limite, donnez votre réponse officielle. Maintenant, vous avez de la crédibilité. Si le problème n'est pas résolu au moins, vous brillez de la lumière. Cela peut sembler une perte de temps, mais ce n'est pas le cas.
Comme vous ne pouvez pas rendre compte des barrages routiers inconnus et des surprises imprévues, il peut être difficile d'estimer avec confiance. Idées:
Pour le nouveau développement, surtout le développement agile:
"La perfection est atteinte, pas quand il n'y a rien de plus à ajouter, mais quand il n'y a plus rien à emporter." - Antoine de Saint-Exuper
Si vous estimez l'effort et le temps de réparer une quasi-impossible de reproduire une ou des erreurs dans un système hideusement complexe avec très peu de développeurs avec des connaissances de domaine intimes du système, la seule réponse correcte est "quand elle est corrigée".
Typiquement, je leur dirais simplement la vérité. Je leur dirais qu'ils ne le savent pas en ce moment et je pourrais avoir une meilleure idée d'une semaine. Je leur remettrai alors un parc à ballon avec autant de gigues devant lui, comme vous pouvez vous intégrer sur le papier pour indiquer qu'il s'agit d'une hypothèse à base de devinette. S'ils commencent à te balancer durement, commencent chaque phrase avec "c'est possible ..." Habituellement, tout le monde que je fais quelque chose pour est heureux avec le "chèque de retour dans une semaine ou donc, mais maintenant tout ce que je peux dire, mais tout ce que je peux dire, c'est environ 2 mois" ou quelque chose comme ça.
le processus logiciel personnel (PSP) se concentre sur l'amélioration des estimations. Ceci est réalisé par la journalisation disciplinée des tâches. Ceci, en substance quelque peu "accélère" l'élément "expérience" de l'estimation depuis que vous aurez des données réelles sur les tâches typiques. Bien sûr, cette profession nécessite toujours des solutions uniques à de nombreux problèmes, mais dans mon expérience, les estimations sont meilleures après avoir utilisé PSP.