如何学习做出更好的估计?[关闭]


42

我估计不足。当有人问我要花多长时间时,我什至不敢猜测,因为我将完全失去能力。通常我太乐观了,应该将我的猜测乘以一个较大的X因子...

如何学习做出更好的估算?我的大学没有教它,即使我们为所有的劳动都有最后期限,但我从未想过实际花费多长时间。我应该。为了大家的缘故(尤其是我的)。



Answers:


28

我仍然不太擅长,但是我发现跟踪您对任务的估计时间和实际花费的时间可能会很有帮助。这样,您就可以对通常的距离有个明确的认识。具有时间跟踪功能的问题管理软件(在我的案例中为Jira)或电子表格可以对此提供很大帮助。

我认为最重要的是体验。


1
这个。这是最有用的估算方法。为了变得更好,人们可以跟踪实际执行任务的时间,因此下次可以给出更好的估计。工作分解结构对此是一个有用的概念。
陶Szelei

3
这是一个很好的答案。我想补充一点,除了记下您的估算外,写一些“ daylog”可能会有所帮助,其中记录重要的决策,遇到和解决的问题等。如果偏离50%或更多,则可能有用的是调查原因,然后这些“日志”将有很大帮助(有关更多详细信息,请参阅“实用程序”中的第64-69页)。另外,请注意向谁显示数字;不了解您正在做什么的人可能会尝试使用它们来对您不利。
Leif

我会做您所做的-手动操作。它基本上是基于证据的计划(en.wikipedia.org/wiki/Evidence-based_Scheduling),由Joel率先提出并在fogcreek.com/fogbugz中
Mawg 2015年

18

时间管理的墨菲定律:要弄清楚长的东西怎么走,弄清楚它是如何长采取并双击它。

然后,移至下一个较高的时间单位。因此,我们为一个为期一天的项目分配了两个星期。


2
我讨厌这么说,但这可能是我在这里看到的最简单,最有效的指标。
glenatron 2010年

3
我被教导加法和平方法则。如果我认为这将需要一天,则加一会使其成为两天,平方会使其变为四天。我知道还有其他人将幅度提高,但没有加倍。所以一天变成了一周。两个半星期变成两个半月,依此类推。无论您的工作水平如何,都必须为即将发生的未知数添加填充。
old_timer 2010年

9

您可以通过集体学习来学习。

我使用Planning Poker。它是一种基于共识的估计技术。

必须跟踪您的估计并将其与您有效完成的工作进行比较。您将获得Velocity

每次您估算某物时,请乘以您最近的速度以得到准确的估算


扑克事情听起来真的很有趣,您真的按照链接中所述执行此IRL吗?它有助于您创建更精确的估计吗?
汉尼拔·莱克特博士

是。这件事使估算变得有趣!并认真准确。当然,您必须进行一些练习,但是一旦“了解”,就无法再使用其他方法进行估算了。

听起来确实很有趣!:)糟糕的是,我永远无法在我的公司中出售此产品:-/
Hannibal Lecter博士2010年

@dr Hannibal Lecter:使用宠物店的把戏。告诉他们并不确定,您将使用它来进行测试。相信我,这将是确定的;)

9

史蒂夫·麦康奈尔(MS Press)撰写的《软件评估》是一本不错的书。

软件评估的主要内容总结如下

没有历史信息,您的估计就毫无用处。

这是我认为迭代项目比大型分阶段瀑布项目获得更多成功的原因之一。他们不打算一次只用一点黑匣子伏都教就只知道他们认为应该是什么的信息,而不是一次只计划一年的计划。每次迭代时,他们都会重新估算/重新计划,并使用最后几次迭代作为估算的基础。

需要牢记的其他几点:

  1. 它只会变慢。应用80/20规则意味着除非您的项目管理非常有纪律,否则以后会更加艰苦。
  2. 估计!=计划。估计是弄清楚完成某项工作所需的努力的过程。计划是将其纳入计划的过程。
  3. 60%的效率几乎是您所希望的。70%是乌托邦。如果您要以天为单位进行估算,请构建它。如果您要以小时为单位进行估算,请不要忘记稍后再应用。
  4. 记住长长的尾巴。估计是针对某种风险和未知水平“可能”需要多长时间进行调整的粗略猜测。之所以会出现长尾巴,是因为实际所需的工作量永远不会少于0。OTOH,最多花费的时间仅取决于您愿意花多少时间才放弃。正如我的前任老板所说:“所有估计都是+/- x%,绝不会减”。

您能解释一下60%的指标来自何处(和70%的乌托邦)吗?在某处有关于该主题的文章吗?
krokodilko '18

7

我很惊讶,没有人提到罗伯特·马丁(Robert Martin)的《干净的编码器》The Clean Coder)中描述的PERT风格的估算技术。在该方法中,您估计三种情况需要花费多长时间:乐观(O),名义(N)和悲观(P)。然后,预期持续时间= (O+4N+P)/6,您的标准偏差为(P-O)/6

这似乎工作得很好,当管理层真正关心某件事可能花费多长时间时,我已经使用了几次。

正如其他人所评论的,我还通过检查历史数据(“做类似的事情花了多长时间?”)进行了估算。

但是我最喜欢的方法是根本不进行时间估计,而仅进行点估计并获得迭代的速度。如果团队在确定规模和完成工作(用户故事)方面相当一致,那么您甚至不问每件事要花多长时间,就节省了很多时间。

很难估计小时数,并且需要大量工作才能将其分解为足够小的块以进行有效测量。即使那样,它们也很少是正确的,因为变量太多了,我们忘记考虑疾病,休假甚至分心的事情了。

如果我必须进行小时估算,那么我只会尝试在迭代中处理较小的任务。除非我知道可以减少,否则我会以半天的估算值(4、8、12小时)来衡量所有内容。但是我很少估计少于1小时的时间。


自从回答了这个问题以来,我也将更多地转移到“没有估计”的阵营中。一些很棒的主意应运而生。
艾伦(Allan)

5

首先也是最重要的是,您必须定义一个流程并坚持执行。在流程的每个阶段结束时都包括修订计划。您也可以有序地修改该过程。

其次,进行某种设计。设计是规划的第一步,您要建造没有图纸的房屋。

第三,追踪时间(努力)。您至少应该区分:

  • 分析
  • 设计
  • 单元测试(包括修复缺陷)
  • 集成测试(包括修复缺陷)
  • 与用户进行验收测试(包括修复缺陷)

    如果您对每种测试类型的缺陷修复工作进行了测量,那将是很好的选择,但是它增加了复杂性,因此您可以稍后进行。

第四,确定要估算的关键基础项目。例如:

  • 自动化过程数(分析)
  • 领域模型实体的数量(设计)
  • 表格和报告数量(代码)

第五,关联基础项目和工作量。例如:

  • 分析工作量= X工时/要自动化的过程
  • 设计工作量= Y工时/领域模型实体
  • 代码工作量= Z工时/表格(或报告);表格数量= A *域模型实体
  • 单元测试工作量= M%*代码工作量
  • 集成测试工作量= N%*代码工作量
  • 验收测试工作量= P%*代码工作量

第六,跟踪每个项目的绩效和偏离估计的情况。因此,您可以微调您的相关因子。

第七,重复改进。在第一个项目结束时,您将获得很多见识,到第三个项目,您将可以轻松进行计划和估算。

看看http://en.wikipedia.org/wiki/Personal_Software_Process,它确实有效。


3

每当遇到估计问题时,请尝试将其分成较小的部分。然后查看您是否已经完成了类似的工作。如果有的话,您应该已经对每件作品花费了多长时间有了一个清晰的认识。如果您不这样做,则应该开始积极跟踪各种任务所花费的时间。这将帮助您进行将来的估算。

所需的总时间将超过各个部分的总和,因为您需要一些时间来进行集成和测试。

如果您没有做过类似的事情,您可能可以依靠其他人的经验并从中获得估计。但是,不要以表面的价值来对待它。没有什么可以教您喜欢的经验。

有点像射击目标。先前的估算镜头应该可以告诉您您的成绩如何,以便您可以进行校正。


3

我发现最简单的方法是将上述最小任务划分为每个任务,然后将该估算加倍。然后,我将它们加在一起并加百分之五十。在理想条件下,这给了我大约的项目时间。如果这项工作实际上将与其他工作并行进行,则将需要更长的时间。如果您将不得不等待其他人,则期望他们花费的时间是您认为的两倍。等待内容或反馈或其他信息的时间通常比看起来更长。

在我工作的地方,我们会为过程的每个步骤制定最佳案例/预期案例/最坏案例的估计,这对于指导工作以及评估评估结果的方式很有用。

除了您需要能够抵抗程序员低估任务的诱惑之外,该技术并不是那么重要,但是重要的是对何时可以交付内容保持保守。如果您花了七个星期来构建某些东西,而您答应了八个星期,那么您可以早一点入手,看起来不错,或者进行一些额外的测试并确保可靠性。如果您承诺六个星期,即使您绝对不是您的错,您也可能看起来很糟。如有疑问,请保守地猜测。


1

您可以尝试建立一个跟踪记录,以了解各种任务的估计值和实际值,以建立足够的记录,然后知道要在列表中重复出现的特定事物的乘数。当然,这是一个反复试验的练习,但对我来说似乎很好。在可能出现这种模式之前,许多试验也要说些什么。这很可能类似于许多其他答案,这些答案可能会归结为“只要做就做!”。因为这实际上就是我们大多数人开发技能的方式。进行估算时看到错误有多大的痛苦?是的,但是如果估算结果更好,那么每个人最终都会感到高兴。


1

如果您可以将项目分解为较小的任务,并对这些任务进行估算,则总体上将更为准确。任何超过几天的任务都应该进一步分解。如果您无法进一步细分,可能会存在需求缺口。如果您必须对单行需求做一个餐巾纸的估算,那么……没有什么能真正帮助您。不幸的是,很多时候很多商店都以这种方式工作。


1

除了只写一本书之外,我还提供一些有关如何使用“分解”估算方法的建议:

  • 将您的任务分解为较小的组件任务。尽可能估计每个任务。

  • 添加一个计划和设计任务(包括您现在正在做的事情。)进行估算。

  • 如果您还没有,请添加一个任务,以“将任务组合在一起”。起初,此任务似乎没有用。但是,当您使用这种“分解”估算方法时,总会耗费大量时间来完成“落在任务之间”和“将任务拉在一起”的工作。这可能很难估计。尽你所能。

  • 添加任务以进行测试和记录。您的作业可能不需要大量的测试和文档编制,但是您至少应该花一点时间考虑一下。

  • 将任务估算值相加以获得总体估算值。

  • 继续,然后将总估算值乘以2††。这将使您有时间进行填充:

    1. 完成您在原始任务列表中忽略的事情
    2. 完成直到进行之前您还不知道的事情
    3. 吸收他人的反馈意见并做出改变
    4. 被周围发生的其他事情打扰,例如会议
    5. 提前完成比预计完成多

最后但并非最不重要的一点是,不要害怕为自己勾勒出可能完全错误的估计。有时,不管有多么严重的不准确之处,只要勾勒出所有内容,就可以帮助您开始对所涉及的事物有更好的了解。

††随着您获得越来越多的经验,可以调整此“忽悠因素”以适合您的个人风格和工作环境。


1

为自己工作时有效的公式:

  1. 将待办事项分解为1至4小时的粒度。我发现我通常对这些准确

  2. “未知数因子”:乘以2即可得出未知数。即,如果您要开发一个ouchdb应用程序,但现在不了解任何有关javascript和http的信息,请添加2 ^ 2作为多因素。

  3. 上下文切换因子:如果要在完美的环境中(例如在学习角落的家中)工作,请乘以1.5;如果要在不完美的环境(办公室/拥挤的地方等)中工作,请乘以2.5。

我发现这是实际花费时间的+/- 20%内!


0

了解自己的偏见。如果您的上次估计值太低了两倍,那么下次将初始估计值加倍。(当然,霍夫施塔特定律很难做到这一点……)

记住在先前的工作最初发布之后需要多少工作并将其添加到下一个估计中,这总是一个好主意。例如,您的上一个任务需要2个月才能完成,但是上线之后,支持,修补程序和其他更改又使您花费了一个月的时间,因此,下一次估计类似任务需要3个月。


0

对于开场白,请阅读Barry Boehm的“软件工程经济学”和Tom DeMarco的“控制软件项目”。阅读并消化了这两篇文章后,请阅读Barry Boehm撰写的“使用COCOMO 2进行软件成本估算”。

接下来我要说的是,这将帮助您参加很多概率统计课程,甚至是基础烹饪课。

没有任何估计是完美的。有可能早点来,有一些迟点来。Boehm最初的详细COCOMO模型给出的预测结果证明与实际结果相差30%之内,而不是60%的时间。这比他撰写和出版这本书时的常见情况要好得多。

当您做出最佳猜测时(仅此而已),您就包括了这些概率。如果将估算值加入,则会增加迟到的可能性。如果您增加估计数,则将增加您提早到达或按时完成的可能性。您将其抽出或放出多少控制着概率的变化,并且必须一定取决于提早或迟到的处罚。(在这里插入恐怖故事-多年来有很多恐怖故事!)

DeMarco在某种程度上解决了这个问题。他还指出,存在一个“不可能的区域”:无论尝试哪种英勇英雄,有些时间表都太紧而无法制定。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.