你如何对你从未做过的事情给出有效的时间估计?

时间:2009-04-08 16:27:28

标签: project-management time project-planning

作为一名新开发人员,他是员工中唯一的软件人员,我遇到了一些挑战,但最困难的可能是时间估计。每次我必须给出项目估算时,我都会喋喋不休。

我的问题是;如果我没有任何经验而且我的环境中没有开发人员,我该如何提供可靠的估算?我已经阅读了Joel Spolsky关于 Evidence Based Scheduling 的文章,但如果我没有任何证据,那该怎么办?

我很欣赏有关此主题的任何建议。

13 个答案:

答案 0 :(得分:30)

您未提供可靠的估算值。你给出了尽可能好的答案,并解释它 只是一个非常粗略的估计,而为什么它是如此粗糙。

如果你说得很清楚:

  • 您无法给出准确的估算
  • 你不能给出准确的估计是完全合理的,因为它与你之前做过的工作不同
  • 随着时间的推移,您将更新估算值,并且您可以更好地了解该主题

我认为你应该没问题。你需要以书面形式明确非常这些事情,这样你就不会在以后粗略估计。

答案 1 :(得分:6)

你可以说“我不知道,我没有足够的证据”

然后做一些原型设计以获得一些证据。

然后回答这个问题。

因此,您实际上可以估计何时可以给出估算值。

答案 2 :(得分:5)

IMO乔尔在他的文章中走的很远,他的结论和建议并非基于任何现实。 (对不起,乔尔)从根本上说,他说你应该能够在开始之前将工作安排到几小时或更短的时间单位。但实际情况是,在进入代码之前,你不知道这些工作单元是什么(在非平凡的系统中)。所以你甚至不能在你打开引擎盖之前想出你将要做的事情的每小时细分,并且让细分反映实际发生的任何准确性。

如果您希望估算值具有任何价值,那么给出项目估算非常困难。对于程序员来说,提出准确的估计是很困难的,因为在你深入了解之前,你经常不会发现项目的所有复杂性。

因此,解决这个问题的方法是在提出估算时进行讨论。对于较小的项目和错误修复这是相当简单的:

  • 复制机器上的错误。
  • 找到导致错误的代码。
  • 弄清楚如何编写将修复bug的代码。
  • 估计编写该代码需要多长时间。

在找到你必须写的代码时,你必须发现大部分或全部复杂性,这些复杂性会使你的估计失去作用。

这种方法的有趣之处在于,生成估算所需的时间通常是实际完成工作的总时间的90%。你几乎必须做这项工作才能得出估计数。特别是在修复错误的情况下,解决方案通常只需要一行代码,因此您的估算结果最终为5分钟。这很好,因为截止日期可以设置在这样的估计值附近。

当你练习这个时,你会越来越好“只知道”需要多长时间。起初,您只能“只知道”最小项目需要多长时间。但随着时间的推移,你将能够估计更大的&更大的项目。

答案 3 :(得分:3)

我首先根据我对问题的复杂性进行估算。这个问题有多大。它可以接触或需要多少件。这给了我一般指导。然后我总是确保添加一个15-25%的软糖因子,因为你会错过一些东西。

最后,您清楚地表明,这是基于您对问题的理解以及如何解决问题的粗略估计。

也不要以非常精确的增量给出任何粗略估计。 4.5小时不是粗略的估计。半天是粗略的估计。

答案 4 :(得分:3)

虽然它很粗糙,但我估计代码行。该参数对生产率的意义接近于零,仍然可以让您了解项目的复杂性。

衡量一个事实,平均而言,开发人员每天可以编写大约200行,最多300行代码。请记住,仅仅为了编码一个人的军队:

  • 可以在一到两周内完成1000行(逻辑)代码的小项目
  • 10,000行(逻辑)代码的平均复杂度项目可以在两三个月内完成。
  • 一个包含100.000行(逻辑)代码的大型项目需要至少几年

对于逻辑代码,您必须添加测试,该测试已包含在先前的估算中。为了弄清楚复杂性,Gimp是600.000行代码,内核的范围是百万或更多。

为此,添加一个事实,即如果您正在使用瀑布式,那么开发代码所需的时间实际上只是开发规范和设计所需时间的一小部分。我估计2/3的时间用于规格+设计,剩下的1/3用于编码,甚至可能在规格+设计部分更多。这真的很耗时。

因此,从复杂性,代码行跟踪您的估算,考虑您拥有的人力以及它们可以并行工作的数量,并添加规格+设计的开销,您将获得非常粗略的估计。 / p>

我建议你the mythical man month。这是一本很棒的书。

答案 5 :(得分:1)

就个人而言,我想象一个估计作为统计分布 - 并试图用它传达标准偏差的概念:

10是'它有50%的几率在8到12'之间

很难比整体项目估算更准确。完全有可能获得更精确(分成单独的独立故事,集体估计每个和其他敏捷实践) - 但它有成本。

(此外,估计不应该是对可交付成果的参与 - 否则会被填补并变得无用)

答案 6 :(得分:1)

如果你拒绝对你从未做过的事情做出估计,你可能会一辈子都这样做。首先尽可能地分割任务,这将有助于您阐明如何去做。您将有更多机会将任务的片段与之前完成的任务进行比较。不要犹豫,向您的经理传达您的确信程度。

答案 7 :(得分:1)

对于一位经验丰富的程序员,他至少知道系统并且在他们面前有一套合理的要求,“我不知道”不是一个有效的答案。如果你说你不知道你的PHB会熄灭并应用他们的1337 h4x0r sk1lz并按照“这听起来像小菜一碟,大约1小时”的顺序进行估算。

你应该能够将问题分解为一系列你以前解决过的小问题,并为每个部分提出合理的数字。指出它非常粗糙,一旦你对问题进行全面分析就会大大爆发。

他们被称为'估计',因为他们很粗糙。通过更多地进行估算并学习尽可能地利用过去的经验,你会更好地进行估算。记住要考虑意外事件(中断,任务切换,生病的可能性,可能的返工等)。通常增加50%会使估计更接近标记。

答案 8 :(得分:0)

提供粗略估计,并对此非常清楚。

确定如何解决项目的策略。特别是识别您可以作为工作中间版本提供的系统部分。特别注意最接近这些功能,你可以释放全部功能,如果可能的话,将其余部分从范围中删除(保留一份列表以及出现的任何内容,作为后续项目安排)。

使用短迭代。考虑/分析中间版本如何适应2-6周的迭代。考虑到这给你的学习,并调整整体估计。

继续第一次迭代,并应用您所了解的假设。在早期迭代中你的情况通常指向估计中的问题。抵制考虑初始开销的估计部分偏差的诱惑,因为您可能会延迟实现估计偏离的时间点。请注意,我确实理解/同意项目的速度随着时间的推移而增加,但考虑到这一点往往会隐藏/延迟问题。

答案 9 :(得分:0)

我一直这样做。几乎我所做的一切都是第一次。我怎么估计?我猜测!然后我再次猜测。而且我一直在做每个增量工作时间间隔的delta时间间隔,因为项目计划是迭代的,你只知道你在做什么时知道的。我的猜测是相当不错的,因为经过许多年,我已经找到了“看起来”容易和“看起来很难”的东西

答案 10 :(得分:0)

试试Function Point Analysis。对于CRUD的东西,它给出了很好的球场数据。它的主要优点在于它不是基于您要实现的内容,而是基于用户要求的内容。但是,您需要了解您的FP效率。您可以使用相同语言的过去项目来完成此操作。

如果您无法构建历史数据集,那么可以使用目标语言的平均生产率。它会给你一些东西,不一定接近现实,但至少会让你比较不同项目的努力。

现在,请注意FPA在算法上很重的软件上很糟糕,它依赖于AVERAGES,这意味着你可能会高估或低估每个项目。

答案 11 :(得分:0)

我的同事总是说,首先估算项目长度,然后乘以2加1再加上下一个最高单位。所以,如果你的答案是3天,那么你会说7周。这是一个半开玩笑,一个想法是首先估计项目,然后当它完成看你离你有多远时,也许你总是偏离2或3的倍数,或者其他什么。

答案 12 :(得分:0)

任何未知的任务或工作总是具有某种程度的已知且易于估计的事物。我分手了,我立刻就我所知道的事情和我认识的事情给出了估计。其余的是老实说被宣布为一个薄弱点,然后我们开始“讨价还价”。如果工作人员信任我的能力,除了粗略的估计和风险之外,我将共同努力。这绝不是一次失败,仅仅是因为我永远不会完成一项我无法抬起或撞到地面的任务(直觉?)。如果工作人员不信任我,我总是建议询问谁以及在哪里寻找更好的选择。然后我们要么一起工作要么不工作。我们大部分时间都这样做,但每个人都处于安全的一面。我的工作,“瘦身专家”得到了他/她的削减,经理们很高兴,客户满意。也许这有点天真,但它对我有用:)