放弃敏捷,改用瀑布-是吗?

我在敏捷环境中工作,由于目前的敏捷方案失败(这就是他们的想法),客户觉得他们更喜欢Waterfall。 让他们这样想的原因是,在sprint的最后阶段发生了巨大的设计级别更改,而我们(开发人员)无法在他们指定的时间内完成。

像往常一样,我们俩都在互相指责。 从我们的角度来看,最后所说的更改太多了,设计/代码更改也太多了。 从客户的角度来看,他们抱怨我们(开发人员)没有完全理解需求,并提出了“不是”他们在需求中想要的解决方案。 (就像他们要我们画一只老虎,然后画一只猫一样)。

因此,客户(不是我们)感到敏捷过程不正确,因此他们希望切换到恕我直言的灾难性瀑布模式。 一个简单的原因就是他们在敏捷模式下的满意度还不够,那么在Waterfall开发的设计阶段花费这么多时间后,他们将如何容忍输出呢?

请提出您的建议。

bragboy asked 2020-01-09T22:40:15Z
16个解决方案
52 votes

首先-问自己,您真的在做敏捷吗? 如果是这样,您应该已经向客户端交付了大部分可用功能,这些功能满足了早期sprint中的要求。 从理论上讲,“损坏”应限于您发现需要进行较大设计更改的最终冲刺。 在这种情况下,您应该已经证明了自己的交付能力,并且现在需要与客户进行对话以计划所需的更改。

但是,根据您的描述,我怀疑您陷入了仅以两周为周期进行开发而每次都没有真正投入生产的陷阱,并且为第一个适当的发布牢记了固定的结束日期。 如果是这种情况,那么您实际上是在没有预先进行需求分析/设计的情况下进行迭代瀑布式设计-通常是一个糟糕的地方。

完全瀑布不一定是答案(有足够的证据表明问题出在哪里),但是实际上,一定数量的前期规划和设计通常比新兴架构的“纯”敏捷精神更可取。 精益方法实际上)。 如果大型项目只是开始破解代码,并希望它们都能带来一些冲刺,那么它们根本就不希望建立一个合理的,稳定的架构基础。

除上述之外,“纯”敏捷的另一个常见问题是客户期望管理。 敏捷是作为一种奇妙的东西出售的,这意味着客户可以根据自己的意愿推迟决策,改变主意并添加新要求。 但是,这并不意味着结束日期/预算/工作量保持不变,但人们似乎总是会错过这一部分。

Paolo answered 2020-01-09T22:40:40Z
28 votes

当您有不清楚的要求以及您可能需要在项目的后期阶段进行设计更改时,敏捷开发方法特别适合。 在这种情况下,瀑布式方法不太合适。 瀑布式方法适用于已充分理解的项目,并且在项目的生命周期内需求不太可能发生变化时。 听起来好像不是这种情况。

你的冲刺多长时间? 一种替代方法可能是减少sprint长度-至少在项目开始时。 更加频繁地向客户提供新版本,并与客户讨论更改。 如果您不按照他们的意愿去做,这将变得更加明显,因此,在实施不满足客户要求的解决方案上将浪费更少的时间。

Mark Byers answered 2020-01-09T22:41:06Z
26 votes

我不确定您经营哪种商店,因此很难提出好的建议。 我可以提供两个指导原则:

  1. 如果您与客户之间的沟通不畅,那么任何开发方法都无法挽救您。
  2. 只要饭菜美味,厨师如何组织厨房就不关大餐了。
drxzcl answered 2020-01-09T22:41:35Z
9 votes

听起来您有严重的项目管理和体系结构/设计问题,并且听起来您的沟通也已中断。 从根本上说,我认为改变您的开发方法不会解决任何问题,因此这样做是错误的事情(尽管它可能会恢复一些客户的信心)。

我将特别关注迈向瀑布式的过程,因为您现在选择的是本质上只捕获一次需求(我们知道您有问题),而没有输入能力。 那种刚性对于不灵活的交付目标很有用,但是在您一直在变化的地方这是完全不适当的-敏捷!

  • 短期而言,我会退一步,并在此阶段与他们再次检查您的需求。 重新协商并确认您当前的状态。

  • 中期,我将与客户进行更多的交流-尝试让他们参与一段时间的日常讨论(直到您恢复信心,然后您才能变得更加灵活)。

  • 从长远来看,您必须担心您的项目经理和高级开发人员如何使您升任该职位。 如果客户无法解决问题,那是一回事(但这要由项目经理来管理,所以您不会被束之高阁)。 抱怨更改太多是不合理的,这仅意味着您在确定需求时费力(这是对话,而不是独白),或者您必须拥有更多但可能更短的sprint。

最重要的是,我看不到朝瀑布方向迈进是正确的。 它不能直接解决任何问题,我只能看到它加剧了您已经强调的问题。

警告:我真的不能在瀑布上取得平衡,因为我从未见过它能有效工作,而且恕我直言,对于企业项目而言,它已经完全过时了。

annakata answered 2020-01-09T22:42:24Z
8 votes

敏捷或瀑布只是词语。 只有事情起作用了,而没有。对许多人来说,软件开发似乎是虚拟的,他们不理解为什么很难改变他们所要求的小事情。

您的客户应该了解,构建软件就像建造房屋一样:当您建造完所有地基和墙壁时,很难更改所有房屋的最终计划和房间设计。

一些实践有助于避免此类问题:数据建模,数据字典,数据流程图...的目的是全面了解每个需求。 在许多独立的块中切割产品有助于在继续设计或指定最终产品的其他部分时开始编码。

有关所有可行的方法,请参阅Steve McConnell的书:“快速软件开发:驯服野性软件计划”。

Jérôme Radix answered 2020-01-09T22:42:58Z
7 votes

敏捷开发并没有使您免于实际提出您和客户都同样理解的设计的负担。 敏捷仅使以较小的增量提出设计成为可能,而不是一次全部提出。 而且,在客户比较困难的情况下,提出正确的设计会花费一些时间。

因此,我将花更多的精力与客户坐下来,坐在白板上,仔细研究他们真正想要的是什么。 在这种情况下,开发过程是敏捷的还是瀑布式的,我认为这并不重要。

Nakedible answered 2020-01-09T22:43:23Z
4 votes

让他们这样想的原因是,在sprint的最后阶段发生了巨大的设计级别更改,而我们(开发人员)无法在他们指定的时间内完成。

Scrum在某种意义上是“短瀑布”,您应该避免更改冲刺持续时间的要求。 看来这没有发生! 因此,看不到从切换到传统瀑布将获得任何收益,但是您应该坚持对冲刺持续时间的冻结要求。也许您的迭代时间太长了?(因为您提到了sprint,所以我假设您遵循Scrum)。

与您的客户交谈并同意以下内容:

- Shorter iterations, up to 3 weeks max.
- No changes in requirements during the iteration. 
- Features are planned at the beginning of the iteration 
- Every iteration ends with deliverable: fully functional software with all features that are fully operational
- Iteration length does not change. Unfinished features are left for the next iteration (or maybe discarded if client changes his mind).
- Number of "feature points" you can deliver in a single iteration should be based on the team metric, not client insistence. This is your "capacity".
- Client decides what features (but not how many of them) are planned for the iteration 

您应该问自己的另一件事是,为什么您的应用程序中会有如此多的“设计级别更改”。 现在,您应该已经具备了基本的体系结构和设计。 也许您应该查看实际设计并尝试强加一些设计准则并实现一些模式。 例如,在典型的企业Web应用程序中,您可能最终会使用DAO之类的东西。 添加新功能时,可以创建新的DAO,但是基本体系结构和设计不会改变。

但是,您似乎并没有交付客户想要的东西。 在这种情况下,将工作产品交付给客户至关重要,因此他可以为下一次迭代提供明智的反馈。

关于

“我们(开发人员)无法完成   在他们指定的时间内。”

客户端不应是指定迭代时间范围的客户端。 迭代长度应始终相同。 进入迭代的需求应作为客户优先级的结果而获得,但为迭代计划的需求量应基于团队执行的估计以及您在迭代期间能够提供的“点数” 。

Dan answered 2020-01-09T22:44:17Z
3 votes

对我来说,听起来好像敏捷项目中没有“ Big Plan™”。 使用敏捷过程并不意味着没有长期计划,它更多地是要解决在更远的将来日益增加的不确定性。 例如,应该有一个发布计划,其中包含未来两个月内所有版本的计划功能(以及一个较不详细的计划,其后具有针对该版本的功能),因此客户可以清楚地知道何时需要某个功能以及何时发布 有可能更改要求。

在我看来,在这个过程中似乎没有(足够的)客户参与。 我知道这是一个非常棘手的问题,但是如果可以在每次迭代结束时与客户讨论当前的进度,那么它会很有帮助。 正如@Mark Byers所写的那样,您从客户那里获得的反馈越多,您的状况就越好。

也要尽量不要指责,因为这会使人们受阻。 尝试使用“检查并采用”方法来获得更好的流程。

Rudi answered 2020-01-09T22:44:48Z
3 votes

目前尚不清楚您要进行哪种设计更改。 图形设计? 用户体验设计? 代码设计?

无论如何,最好的解决方案是与客户进行更多,更早的讨论。 共同开发满足客户要求的明确的具体示例。 您可以将这些示例转换为回归测试,以确保继续满足它们。

另外,请随着讨论的进行继续进行讨论。 显示可用的输出-不要等到sprint快要结束时。 首先进行最有可能产生问题的部分的工作。 还要研究使您更容易更改经常发现的事物的方法。

关键是使客户更多地参与其中,甚至参与设计的迭代。 也许您只想对设计进行一些讨论。

George Dinwiddie answered 2020-01-09T22:45:22Z
3 votes

解雇客户。 即使您不理解它们的意思是您的错,瀑布式搜索也会给他们1次给您反馈的机会,而不是每次冲刺结束时的机会。 有些人/客户从字面上是如此愚蠢,以至于他们不值得工作。 解雇他们,或告诉他们您正在使用Waterfall而不进行实际切换。

Josh answered 2020-01-09T22:45:42Z
3 votes

您的客户不知道如何开发软件或如何管理软件开发过程。 不要期望客户在这些问题上提供有意义的指导。 作为一种特殊情况,客户并不真正知道“瀑布”和“敏捷”等术语的含义; 不要期望他们为您的开发方法提供有意义的投入。 此外,只要满足要求的预算和时间范围内的要求,客户就不会真正在意这些细节。 不要指望他们在乎,也不要将它们与内部过程中的许多构建不充分和无关信息混淆。

这是客户关心的,并且正在尝试与您讨论(部分使用您自己的技术术语):他们的要求,他们失望的期望以及您与他们沟通的方式。 在这些问题上,客户是绝对的权威。 解释他们所说的关于您的关系和产品的说法,而不是对内部流程的有用评论。 不要在内部的最后期限和流程中混浊,讨论进度,期望和关系。 (如果他们坚持谈论内部机制,则可以重新映射这些术语:例如,他们理解为“下一个版本”的内容可能在内部称为“下一个主要版本”,或其他名称)。

在我看来,客户可能需要更高的门槛,然后才能要求他们提供反馈或使用糟糕的产品。 值得验证是否正确。 如果是这样,您应该尊重这一点-如果您的团队认为这是最好的,并且仍然在内部使用敏捷方法。 如果他们说“瀑布”,您也许可以在内部将其解释为“我们为需求设定了最后期限,然后我们暂时不允许添加更多功能”。 与客户讨论是否适合他们的要求期限,然后再进行这种冻结。

您团队中的某个人需要成为客户的拥护者,并站在客户的问题之上并为之奋斗。 提倡者一定不能袖手旁观,也不能站在团队的立场上来反对客户。 他们应该是代理老板。 然后,您可以将内部流程沟通(团队倡导)与外部沟通(倡导客户)分开。 倡导者可以在某种程度上使客户与闲聊和他们不喜欢的构建隔离开来,而无需在内部流程上人为地施加某种管理或调度。

需要澄清的是,我根本不认为您应该与客户保持秘密或疏远,但您应该(A)听取客户对这种关系的看法以及您如何沟通和尊重,(B)保持那种 与内部开发流程分开,应该以最终满足客户期望的任何方式对其进行管理。

Sasha answered 2020-01-09T22:46:25Z
2 votes

这里最明显的问题是与客户的沟通。 如果您真的想敏捷,则必须在日常基础上与客户沟通。 只有客户才能做出决定。 如果您仅在春季中期和冲刺结束时与客户交流,很自然以后您会在应用程序中发现问题。 客户还必须接受sprint中实现的功能并进行测试。 在此之前,功能尚未完成。

我写这篇文章是因为我在当前项目中遇到类似的问题,但我知道失败的地方。

Ladislav Mrnka answered 2020-01-09T22:46:50Z
1 votes

如果团队和客户之间的沟通问题没有解决,则瀑布可能会更糟,如果客户仅在产品完成后才看到产品(隧道效应)。

您评论了从冲刺6-7开始的更改,这些更改开始导致对早期冲刺中完成的任务进行返工。 这些更改应该早在Sprint审核期间就已检测到。

如果在功能说明中存在误解,并且团队未实现客户期望的功能,则应在实现该功能的Sprint之前发现它,并且最好在当前的Sprint中修复。

如果客户改变了主意,则应将新想法与其他任何待办事项一起添加到产品待办列表中,并为Sprint进行优先级排序和选择。 这不应被视为返工。

您是在每次冲刺之后将软件交付给客户,还是只是进行演示?

沟通不畅的原因可能是在Sprint计划中:团队应仅对明确定义的待办事项进行承诺。 项目的定义应包括接受标准。 客户是产品负责人吗?是产品负责人吗?

philant answered 2020-01-09T22:47:34Z
1 votes

对开发过程进行远程调试非常困难,以至于我不愿对您应该做什么提出任何意见。 在我看来,您团队之外的人似乎都没有足够的信息来对此做出非常有用的判断。

得出结论的一个较小的结论是猜测出了什么问题。 根据您的描述,这听起来像是您认为在银行中取得了进展的早期可交付成果,但最终却需要大量返工。

造成这种情况的一个常见原因是“所有”需求的发现/创建较晚,这在项目范围内的所有事物都应该是正确的。 如果认真对待的话,这可能是致命的:例如,“所有对话框都必须可调整大小”这样的简单操作显然超出了Microsoft改造Windows的能力。

可以在这里找到这种失败的经典解释(尽管在非敏捷项目中)

上汽集团的雷诺兹说:“一旦他们看到了我们编写的代码的产物,他们就会说,'哦,我们必须改变这一点。这不是我的意思。” “那就是当我们在更改请求之后,在更改请求之后开始记录更改请求时。”

例如,据SAIC的工程师说,在八个小组完成了大约25%的VCF之后,FBI希望在所有屏幕上增加“页面粉碎”功能。 也被称为“面包屑”,这个名称受Hansel和Gretel童话的启发,该导航设备为用户提供了URL列表,这些URL标识了通过VCF到达当前屏幕所经过的路径。 SAIC工程师说,这项新功能不仅增加了复杂性,而且由于必须用新功能对完整的线程进行改装,因此延迟了开发。

这里的关键词是“所有屏幕”。 因此,面对这种性质的变化,除非您有一些预先存在的工具支持,否则您只能打开电源(更改所有背景颜色确实是微不足道的),否则您会遇到麻烦。 您认为到那时为止所取得的进步将被证明是虚幻的。

解决此类问题的唯一已知方法是第一时间解决问题。 如果失败了,那就让他们错了。

soru answered 2020-01-09T22:48:28Z
1 votes

许多商店都添加了敏捷装饰,以使自己对期望的顾客“看起来敏捷”。 也许您只需要添加一些瀑布修饰,然后每2个Sprint向其展示一次产品即可。

orbfish answered 2020-01-09T22:48:48Z
0 votes

我相信您的客户搬到瀑布是错误的。 它可以治愈症状,而不是治愈疾病。您描述的问题是沟通中的一种-客户想要一只老虎,您正在给他们一只猫。

瀑布模型包括许多步骤,以验证书面要求是否已交付-但不能确保书面要求符合业务的含义。

我将研究影响映射,行为驱动开发(BDD)和故事映射等技术,以改善沟通。

Neville Kuyt answered 2020-01-09T22:49:18Z
translate from https://stackoverflow.com:/questions/3226711/giving-up-agile-switching-to-waterfall-is-this-right