当客户的需求完全不变时,使用敏捷是错误的吗?


12

我最近看到很多帖子说,使用敏捷的主要原因之一是因为客户经常更改需求。

但是,假设客户不会经常更改需求。实际上,客户的要求虽然严格,但可能有些含糊(但没有任何不合理的含糊),但无论如何,我还是使用敏捷。

我之所以选择敏捷,是因为该软件足够复杂,以至于存在一些细节和问题,直到我真正面对这些问题时我才意识到。我可以像瀑布一样进行全面的繁重计划,但是要花上几个月才能完成所有高级设计和低级代码签名。但是,系统有一个非常具体的固定体系结构设计。

我的问题是:这会被认为是不好的,牛仔编码,反模式等吗?在需求稳定时开始编码之前,我们是否必须采用瀑布式计划并尽可能详细地计划,而不是敏捷中的这种“让我们去做”的心态?

编辑:这里的主要观点是:我们不能责怪客户改变需求。假设客户向我们指出了一个非常具体的问题,给我们一个非常合理的细节的愿望清单,然后让我们独自一人(即客户有自己的生产性工作要做,别再烦他们了。只向他们演示当您有最低限度的工作原型时结束)。在这种情况下使用敏捷会错吗?


2
@randomA:其实,恕我直言,你应该从来没有尝试纯粹的瀑布只有当你想创建一个工作产品,它需要一个多星期的努力。
布朗

10
请给我你的客户
razethestray

7
与@razethestray相比,我为您的客户提供2倍的收益
欣快感2014年

2
如果您的客户不想“每天打扰”,请学习如何与他进行有效的沟通。例如,不要对不确定的问题做出假设(可能是错误的),而是在列表中收集问题并定期向客户发送列表。更好的是:安排一次会议讨论要点。如果要求如此明确,以至于列表仍然为空:则不开会(但我想不会)。如果您开始在软件中实施错误的假设,那么以后您将付出更多的努力。
布朗

3
@randomA:您可以通过不询问任何内容来让客户满意一段时间,然后,在交付最后一件事时,让他非常不高兴,因为事实证明您错过了很多要求,因此您可以放弃程序并开始从一开始(客户将不愿支付)。或者,您可以通过要求他在两次之间足够的时间来构建正确的程序,使他有些不满意,但到最后,当程序实际上将执行他想要的并且他得到了所支付的费用时,他会感到非常高兴。选择您的选择。
布朗

Answers:


16

将其视为不良的牛仔编码反模式吗?

简短的回答:不。正确地进行“敏捷”并不意味着“没有计划”,而是意味着不会过度分析事物。

使用敏捷的主要原因之一是因为客户经常更改需求。

这是一个过于简化的陈述。“更改需求”还涉及团队对需求的理解如何变化。这是关于当客户实际看到该软件的一些版本时,客户对需求的优先级如何变化。

实际上,“敏捷”最适合您所描述的情况的 IMHO- 客户对他的总体需求有很好的了解,您可以从中编写一个总体计划,在待办事项中填充很多“用户案例”,并且已经足够的信息来选择正确的系统架构。然后,敏捷开发策略的短暂迭代将有助于使“含糊的要求”更加精确,如果您仍然朝着正确的方向前进,则会获得大量反馈。它还将为您提供有关实际工作量和成本的早期反馈(即使您详细了解每一点要求,在瀑布式方法中仍然会失败)。


3
正确地进行“瀑布式”并不意味着要“计划一切”,而是意味着不要对事物进行不足的分析。
Giorgio 2014年

1
@Giorgio:正确执行“瀑布式”意味着在需求“含糊不清”并且“软件足够复杂,有很多细节,直到我真正面对这些问题时我才意识到”,因此不应用它。原始问题)。
布朗

6

在这种情况下使用敏捷仍然是一个很好的主意。敏捷有很多好处,其中只有一项就是来自客户的定期反馈,以及您所提到的响应不断变化的需求的能力。

瀑布项目因失败而臭名昭著的主要原因之一是“几乎完成”的问题-最后测试产生的大量bug,留下无法发布的产品,也不知道是否需要再花两天或两年的时间来修复突出的bug。敏捷完全消除了这种风险。如果敏捷项目正在运行,您仍然可以提供一个工作版本,该版本:

A)通过演示向客户证明您实际上就在那儿(“所有这些故事都已完成,如果您愿意,我们可以做最后几个”),再花一些时间就能得到他们想要的东西。

B)潜在地足以使他们无论如何开心和释放。

对我而言,消除这种完全失败的风险仅仅是一个足以使企业转向敏捷开发流程的理由,构建比最初计划的更好的软件的能力正在锦上添花。正如其他答案中提到的那样,那些“具体”的要求通常仍然令人惊讶。


我不明白A)以哪种方式解决了您在回答开始时提到的问题:您如何知道最近的几个故事是否需要几天或两年?您只真正知道何时实际进行操作,不是吗?
乔治

1
没错,但是区别在于您拥有一个处于当前状态的可发布产品,而不是90%已完成但无法发布的有缺陷的软件。您还拥有经验性证据,证明交付可发布的功能花费了多长时间,并且您对剩余工作的估计可能会提供更大的信心,即您无法证明所做的任何事情实际上都有效。
SpoonerNZ 2014年

这取决于:如果所有计划的功能都是必不可少的,那么具有90%功能的产品将无法使用/不可发布:它只能用于演示已经存在的功能。根据我的经验,敏捷并非在所有情况下都是可取的:有些项目更适合使用敏捷(需求不断变化,小型,独立且独立的特性),而有些项目则不适合(稳定的需求,复杂和/或关键任务)特征)。
乔治

我同意-交付不足在两种情况下都不是一件好事,但是作为利益相关者,您会信任能够生成功能完整的软件版本的团队,以在一切正常但缺少某些功能的情况下工作,或者为团队提供一个错误的一堆堆源代码,理论上具有您的所有功能,但崩溃很多,并且有很多意外行为?我知道我会更信任。
SpoonerNZ 2014年

当然,我会信任第一支团队,但是我不同意使用非敏捷方法,您总会遇到“一堆堆满了错误的源代码,理论上具有您的所有功能,但崩溃很多,并且有很多意外行为” 。至少到目前为止,这还不是我的经验。
乔治

3

如果您需要与客户之间频繁的反馈循环,那么敏捷是理想的选择。这可能是因为需求经常更改,但是也可能是由于其他原因。

另一方面,如果需求是完全稳定的,并且客户只希望一次大爆炸交付,那么敏捷可以同样很好地工作,但是您可能需要针对客户在此期间期望的参与量进行一些调整。项目。这意味着必须在您自己的组织中担任产品负责人角色,并且该人员必须从客户那里获得足够的授权才能做出决定。


1
我经常想知道不想让太多参与的客户是否有真正的业务需求。我经常在将现有应用程序“转换”为新技术的项目中发生这种情况。如果您有疑问,请检查代码。没有人在等待重拍。
2014年

@ user99561:您是对的,但是在这种情况下,要求通常并不模糊,它们很明确-只要新程序的行为与旧程序完全相同。在这种情况下,确实不需要“敏捷”方法。确实,基于里程碑的迭代方法(无需太多客户交互)就足够了。
布朗

晶莹剔透?祝你好运,找出确切的行为是什么,异常是什么。大多数时候,甚至业务人员也不了解应用程序中会发生什么。我的建议:从这些项目中尽快逃脱。因为您知道项目何时开始,但是由于应用程序的行为不同,您不知道最后一次发布错误的时间将得到修复。
user99561 2014年

0

您始终可以将较大的发行版划分为较小的发行版(冲刺),并要求您的客户提供反馈。这样,您可以确定自己做的正确,客户可以跟踪您的进度。

如果出了点问题,您可以为您的客户提供一个尽快纠正您的机会,这非常好。最好尽快纠正您的错误,而不是在结尾时给他废话,然后甚至在您不知道从哪里开始时尝试解决该问题。


我刚刚添加了一个编辑说明。客户表现出一个问题,他们的细节足够详细,愿望清单清晰,希望不再麻烦。因此,假设在演示可以工作的原型时,几乎没有客户反馈。
通知A
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.