对敏捷环境中的大型项目进行估算

我的公司刚刚得到了它的第一个大型开发项目咨询,我想使用敏捷过程。 客户对应用程序抱有远见,但公开承认自己的需求很少,并意识到我们将按小时收费。 因此,我几乎所有的人都以敏捷的方式出售了他。

问题是他希望一个数字可以预算。 我读过很多文章都反对放弃估算,因为客户会为此预算做预算,即使需求发生变化,他们头脑中和书本中的数字也不会。

我读过有很多方法可以在合同中计入价格,但是几乎所有方法(节省一个)都包含一个前期数字。 这似乎违反了敏捷开发的整个原则。

所以我的问题是,如果您是一家敏捷商店,您如何规避敏捷开发的Catch-22?

Chance asked 2020-01-07T19:57:19Z
12个解决方案
40 votes

这是基本问题。

客户什么时候会认为他们完成了?

如果他们认为将在六月前完成,那么您可以组建一支敏捷团队。 这是4-6个人,共6个月。 那是预算。 本质上,您需要为它们做乘法。 团队*费率* 6个月。

如果他们认为大部分工作要在六月前完成,但是之后还会有更多工作,那么您可能正在寻找9个月的工作时间。 同样,您只是在做一个乘数,他们可以自己做。 团队*费率* 9个月。

如果他们认为您将在可预见的将来成为他们的开发团队,请给他们一个可以使该项目在年底完成的价格。 团队*费率* 12个月。

由于每个版本都是重新确定优先级的机会,因此您应该根据在该版本中要完成的工作,将每个版本作为单独的工作定价。 由于这是他们的优先级方案,因此他们可以控制您的建设内容,可以逐步控制预算。

通常,您的客户确实想知道特定功能集的价格。 他们没有问这个问题,而是询问总体预算(这很愚蠢)。 在第一个发行版上花费大量时间,以显示它们得到了什么以及该第一个发行版将花费多少。

最终,他们将看到基本事实。

他们购买的功能从最重要到最不重要。 如果他们确定了正确的优先顺序,那么他们可以随时停止花钱,得到一些有用的东西。

完成是一个相对术语。 有些项目“完成”了,因为没有更多的钱了。 其他人之所以完成,是因为没有时间了。 很少(至少在软件开发中)做过一个项目,因为我们没有足够的工作要做。

S.Lott answered 2020-01-07T19:58:10Z
13 votes

对于这种情况,我们提供了第一部分工作的估算,然后让客户根据需要购买更多的sprint以完成所需的工作。

随着您开发出更多的系统,并将客户的反馈整合到sprint交付品中,您将对所涉及的工作量以及所涉及的成本有更好的了解。

编辑:很酷。 方式很棒! 从您以敏捷方法出售它们的事实来看,顺便说一句好! 也许可以收听此“ Scrum简介”播客。 您可能能够出售它们,因为它们可能不需要立即拥有他们认为需要的所有花哨功能。

高温超导

干杯,

Rob Wells answered 2020-01-07T19:58:53Z
10 votes

看,这里有一个核心事实。 系统将要求您估算成本,在特定交付日期签订合同,并承诺提供完整的交付功能。

您不能同时做这三件事。

不是“你不应该”或“不这样做”是明智的; 您(出于所有实际目的)不能。 我的意思是,成功完成这三个步骤的可能性非常小。

最好的答案是承诺一个成本和进度表,以及一个具有快速迭代和定期反馈的迭代过程,然后编写协议,以使完成固定成本和进度表的工作能够交付。 也就是说,您一直在交付新功能(和修改),直到时间和金钱用完为止。

事实是,即使您同时签署了这三个协议,您仍然能够做到的最好的还是三分之二。 最好对此保持开放。

Charlie Martin answered 2020-01-07T19:59:31Z
10 votes

我最近知道一个a的老政府承包商是这样说的:“正如妓女所说,首先你要把他们送到楼上。”

那不能回答您的问题,但是值得记住。 如果他们事先没有号码就不会上楼(而且他们不会),则必须给他们一个号码。

赞助软件项目的任何人都必须知道他们将从投资中获得什么样的回报,以便他们可以评估投资是否值得进行。 如果一个项目耗资100万美元并耗时12个月,则可能值得一做。 如果花费200万美元并花费24个月的时间,这可能不值得做。

真正的问题是:您能否在一定的时间范围和预算范围内进行此项目,从而使客户有可能实现适当的投资回报? 如果您对这个问题的回答不是“是”,那么他们不应该雇用您来做这个项目。 否则,他们只是在花钱,掷骰子。

如果您当前对该问题的回答是“我们还不知道”,那么他们不应该雇用您来从事该项目。 但这并不意味着他们不应该雇用您来确定该项目是否值得做。 对此,咨询公司的一个很好的流行词是“初步范围界定练习”。

敏捷开发涉及在三个维度上管理曲线:花费的金钱,日历时间和功能集。 假设预算和计划是固定的,则功能集必须是可变的。 鉴于这些限制,您不知道最终的功能集是什么。 但是您可以知道,在这些约束条件下可以生成的功能集是否在客户可以接受的范围内。

您可以知道这一点,并且可以找到答案。 发现这一点是您的公司可以做的,而您的客户则不能。 您可以向他们提供这项服务,他们应该向您付款。 避免免费这样做的诱惑,并将其称为销售成本。 项目范围界定与软件开发一样,都是专业服务的一部分。 您不是要关闭交易; 您这样做是为了帮助您的客户做出业务决策,使他们没有足够的信息来做。

但是首先,您必须让他们上楼。

Robert Rossney answered 2020-01-07T20:00:25Z
6 votes

这些答案确实很棒。 我没有太多经验可以分享,但是我想到了一个比喻:

去年,我和妻子改造了我们的厨房。 承包商提议按时间和材料开帐单,而不是给出估计,因为我们不知道在水暖,地板下损坏等方面会发现什么。 我们同意,因为我是在家工作,所以我一直可以回答问题。 承包商和我关系融洽,所以当出现问题时,他可以随意敲我的办公室的门,我们将进行讨论。 很快做出了决定,并且按照我想要的方式完成了工作。 这似乎与频繁审核客户的敏捷优先级相似。

相比之下,我妻子的表弟也在装修他的房子。 他是一名急诊医生,在装修过程中他不在现场。 因此,他说,承包商经常在没有咨询他的情况下做出重大决定时会感到惊讶(“什么?我不希望那扇窗户被挡住!把墙壁撕掉,照原样重新布置窗户!”)。 这当然是非常痛苦的昂贵,并且使日程安排从水里飞了出去。 绝对不是敏捷。

因此,一种使客户相信时间和材料模式可行的方法可能是确保他们能够经常进行进度报告以获取他们的反馈。 我相信这已经是大多数敏捷方法论的核心建议。 首先,当然这需要客户将他们的信任交给顾问。

作为单独的资源,我搜索并找到了关于该主题的书:Mike Cohn撰写的“敏捷评估和规划”。 阅读该页面上来自一群令人印象深刻的敏捷专家的赞美语录。

Bill Karwin answered 2020-01-07T20:01:06Z
3 votes

首先,我想说的是,我认为您以敏捷的方式和按小时的价格向他出售产品真是太好了。 那很难做到。

关于您的困境,我认为您应该向他提供一个粗略的价格估算及其包括的功能/范围。 在开发过程中,如果您发现即将发生的重要事情将改变范围/成本,您对客户说:“停下来,这很棒,但是要了解它改变了我们讨论的原始范围。”

在这一点上,客户有幸同意,知道他将支付比原先想的要多的钱,或暂时停止新的开发。 许多敏捷项目都建立在许多微型阶段中,您可以对其进行准确的价格/时间估算。 在任何新的迷你阶段开始之前,重要的是,您和客户必须对接下来发生的事情以及将花费多少时间/成本保持一致。

Eran Galperin answered 2020-01-07T20:01:36Z
2 votes

与往常一样,质量,功能和时间(=资源)是您的主要参数。 我们不再对质量感到困惑,因此只剩下功能和资源。 通常,您通常可以说服一定数量的资源至少达到某个功能集。 因此,只要您能找到提供合理功能集的大量资源,我相信对于许多客户来说就足够了。 好处是他们可以在移动中控制进度,并且总是可以选择退出。

krosenvold answered 2020-01-07T20:01:57Z
2 votes

我这样做的方法是使用当前的速度,并根据复杂性(层数)的粗略估计来估计范围。 在开始计划应用程序时,您将对其进行更新,以使范围估计逐渐变得越来越好。

例如,给出一个6mos到2年的估算值(如果您确定将花费不到2年的时间。将其分解为功能部件,然后计划这些功能部件,您会得出更好的估算值,因此 在6个月之后,您可以确定地说(不做任何其他更改),我们将在2-3个月内完成(总共8-9个月)。最终,您可以说,我们将 在下一次迭代(2周至1个月)之后完成。

您需要将此与客户联系在一起,让客户知道添加功能会增加完成时间,然后让他们决定如何进行-删除功能或增加时间。 对于任何给定的项目,范围和时间实际上是可以有效更改的唯一变量。 质量和资源几乎是固定的。 实际上,您可以添加资源,但是通常您会发现时间会增加,质量最初会下降,因此这仅在时间跨度较长的情况下才有效。

tvanfosson answered 2020-01-07T20:02:28Z
1 votes

您可以采取的一种方法是给客户一个您认为相对接近的总体估计。 还给出一个百分比。 该百分比将是由于需求变化而增加或减少的预算拨款。

示例:总体估算为10,000美元,但由于要求不明确且项目可能会轻易改变路线,因此有+/- 30%的价格调整选项。

这样,客户可以大致了解预算额,并且您可以灵活地承担项目费用。

Berek Bryan answered 2020-01-07T20:02:58Z
1 votes

这是一个非常棘手的问题。 请参阅Robert Glass在他的《软件工程的事实和谬论》一书中对这个话题的看法。 (请注意,亚马逊提供的新图书的价格低于二手书![自2009年1月5日12:20 -08:00起;还有Google图书。)

Jonathan Leffler answered 2020-01-07T20:03:18Z
1 votes

如果您已经成功地向客户出售了敏捷方法,并且按小时计费,则不要给他们估计完成项目所需的费用! 即使他们说只想要预算目的,也不要这样做!

原因是任何成本估算都将被视为确定的承诺; 无论您说不是多少次,以及客户说他们了解多少次,这都将被视为一项承诺。 即使客户理解,他们的老板也不会,尽管他们不能合法地强迫您按照您所说的价格交货,但您会成为一家没有履行承诺的公司。 提供估算值一开始就放弃了敏捷的所有优势。

我的建议是告诉他们,您在财政年度结束前(或客户感兴趣的任何其他计费期)的支出不会超过某某金额。 这足以使他们进行财务计划,而不必说该项目将在那时完成。

DJClayworth answered 2020-01-07T20:03:49Z
0 votes

这是我对与故事要点相关的一个封闭问题的回答。 我一直在用它进行宏观估算。

当我切换到要点时,只有在我能满足以下两个要点时,我才决定这样做。 1)查找和论据以证明切换的合理性并使团队信服2)找到一种简单的使用方法。

说服力

我花了很多时间对此主题进行阅读,但最终找到了使我和我的团队信服的论点:几乎不可能找到两个同意在任务执行时间上达成共识的程序员,但是相同的两个程序员几乎总是会达成共识。 当显示两个不同的任务时,哪个任务最大。

这是您“估计”待办事项的唯一技能。 在这里,我使用“估计”一词,但在早期阶段,这更像是将积压的订单从难到难排序。

将点数放入积压中

在整个Scrum团队的参与下完成此步骤。

开始将故事逐个放入新电子表格中,同时保持以下顺序:最大的故事在顶部,最小的故事在底部。 直到所有故事都在列表中为止。

现在是时候为这些故事加分了。 我个人使用的是扑克筹划量表(1 / 2,1,2,3,5,8,13,20,40,100),因此我将在此示例中使用它。 在该列表的底部,您可能会执行微任务(需要4个小时或更少的时间才能完成的任务)。 给每个微任务取值1/2。 然后,通过为故事赋予值1(小数位数),继续到列表的顶部,直到很清楚一个故事要大得多(2而不是1,因此是两倍大)。 现在使用值“ 2”,继续在列表中向上移动,直到找到一个故事,该故事应该明显是3而不是2。继续此过程,一直到列表顶部。

注意:尝试将绝大多数点保持在1到13之间。第一次,您可能会遇到很多大故事(20、40和100),并且必须将它们分解成小于或等于13的块 。

这就是要点和原始积压。 如果您有新故事,请将其与该列表进行比较,以了解它的适用范围(更大或更小的过程),并为其提供邻居的价值。

速度与估算(宏观规划)

要估算完成该积压工作需要多长时间,请执行第一个冲刺计划。 总结团队选择的故事和VOILA!的总分,这是您的第一个速度量度。 然后,您可以将积压中的总点数除以该速度,以了解需要多少个冲刺。

该速度会在最初的2-3个冲刺中改变并稳定下来,因此始终关注该值总是好事

pcantin answered 2020-01-07T20:05:10Z
translate from https://stackoverflow.com:/questions/414346/giving-estimates-for-large-scale-projects-in-an-agile-environment