Answers:
您能给出的最佳答案是要求时间来敲定一个快速的原型,以便您进行更准确的估算。如果没有一些使用工具或问题的经验,你给任何估计基本上是没有意义的。
顺便说一句,给出太长时间的估计很少有问题。发生无法预料的问题,更改优先级,并且“更新”需求。即使您不花所有的时间,您也会有更多的测试时间,或者可以“提前”发布。
我的估计总是过于乐观,这会给您的生活带来很大压力,尤其是当您是一个年轻的程序员时,没有经验和自信来告诉老板不舒服的真相。
我让你秘密。即使您是该技术的专家,您的估计也可能非常不准确。做某事本身就是研发任务,这就是野兽的天性。不幸的是,管理层经常试图应用制造模型并要求准确的估计。为了说明我的观点,请考虑准确估算以下两项工作的难度:
A)再制造11K伞,与您上个月生产的2K伞完全相同。B)设计一种新型的雨伞并制造第一个。
软件开发为B,但他们要求假设A为一个估计。
您能做的最好的事情就是将任务分解成最小的部分(每次不超过1/2天),然后将最终的数目增加三倍。(Spolsky方法)
另外,史蒂夫·麦康奈尔(Steve McConnell)有一本关于软件工程这方面的整本书(可以说是几本)。 http://www.amazon.com/Software-Estimation-Demystifying-Practices-Microsoft/dp/0735605351
史蒂夫·麦康奈尔(Steve McConnell)和其他人谈论不确定性的锥体。基本上,您提供的估算值如下所示:
这项工作将需要3到9个星期,最有可能需要4个星期。
随着项目的进行,您可以优化估算。随着您完成更多工作并更好地了解所需的工作,您可以优化估算以使其更加准确。
它对我有用,但是可能需要一些努力才能使项目中的其他利益相关者了解过程。
将您的估算细分为:
提议一路调整估计和某些里程碑。任何未知的未知数都将成为已知的未知数,随着您的经验积累,已知的未知数应成为已知的已知数,并且可以根据迄今为止的进度来调整已知已知数的估计。您可以进行初步估算,然后在完成约25%时重新估算,然后再次估算50%,然后再次估算85%。在每个里程碑,您的估计应开始收敛于任务实际花费的时间。
我认为,如果删除短语“正在使用我以前没有经验的第三方控件”,则可能会对较大的问题有更好的描述。
如果“敏捷”教会了我们任何东西,那就是,如果管理层希望您不断地以这种方式估算项目,并且您说“无法提供”,因为您没有提供,您就会“看起来很糟”。足够的信息,您在通往失败的路上。
最大的问题将是您无法控制,甚至尚未发现的问题。您有多少次回头对自己说:“好吧,我在确定了...并且我需要版本...并且dba会在休假一周,项目经理将需要我……一周,而我的妻子怀孕了……”。
我会很努力地说:“我可以确定关键的风险因素,并提出可交付成果的清单,以便在xx天内对其进行测试。届时,我将再给您提供增量估算。”
如果您可以建议他们应该“真的,那就太好了”,请您坚持认为我以后永远不要给您这种类型的可信估计。如果尝试,请解雇我。”
(夸大了,但只是略有增加。)
许多准确的估计是自知之明。如果您编写了很多代码,或者必须学习很多API,那么您就会开始对以下问题有所了解:
在整个过程中,您应该对以下内容有所了解:
基于所有这些内容,即使面对严重不完整的信息,您也将能够弄清需要花费多长时间,并能够陈述您的假设(“假设API正确……”)。
将其分解为您确实有经验的东西。将其切碎的动作将使您对所知道的和不知道的有更好的了解。
一旦碎片很小,可以将它们视为单个定义的任务,其中的一些将完全不可估量。对于这些,要么先制作原型,要么就给自己一些合理的时间,具体取决于作品的大小。如果发现您的不可估量的部分超过了2-4周的工作量,请先将其切碎。
最终,您将获得一些非常奇怪的技术解决方案(您认为应该可行,但不确定),一旦可行,需要做很多工作来备份这些东西。会缺少一些设计,为此,最好为初始版本选择一些知名的库或一种非常简单的算法。
如果您无法分解任务,那么您应该雇用具有足够经验的人(因为缺乏经验也会以其他方式困扰您)。如果您不能雇用某人,那么您应该随机讨价还价(6个月至2年),然后直接进入一个凌乱的原型(直到您设法给自己足够的经验来知道什么是对的,什么是对的)错误)。但是,如果最终遇到了麻烦,那么重要的是不要开玩笑,并认为您正在按照正确的“方式”进行操作。原型本应被丢弃。希望一旦原型倒计时完成,您就可以真正构建它了。
保罗
我在工作中处理很多估算工作,这是一个真正的挑战。我最大的挑战之一是估计不知道该开发人员的熟练程度的不同开发人员完成任务所需的时间。
尽管您可能会看到“承诺不足,交付过度”方法取得了一些初步的成功,但是您会发现,随着时间的流逝,遵循“承诺过度,交付不足”思想的其他人将超越您。缺乏准确性会以任何一种方式再次困扰您。准确性与经验密切相关,并限制了该技术的未知数。
我建议的一件事是对您的估算将使用哪种预算有所了解。如果预算有限,请不要对陌生的技术发疯,并坚持自己所知道的。如果您的预算稍微灵活一点,那么您可以承受一些实验费用。
还应认识到,在某些任务中,您只能提供Wild Ass Guess(WAG)。对于这些,您应该设置一个最短的估计时间,并明确表示您不知道最大值。通常,这种估算是管理层拒绝使用某些功能/要求的充分理由。
这是项目经理和程序员都可能具有的必不可少的技能(当然也可能是大师!),我发现了一篇文章,《简化软件开发任务的估计(一点)》,希望对更好地估计项目任务有帮助。