像往常一样,我们互相指责对方。从我们的角度来看,末期的变化太多了,需要修改的设计/代码也太多了。而客户则抱怨说我们(开发人员)没有完全理解需求,并提出了“不符合”他们需求的解决方案(例如他们要求我们画老虎,而我们画了一只猫)。
因此,客户(而不是我们)认为敏捷开发过程不正确,他们想转向瀑布流式开发方式,但我认为这将是灾难性的。简单地说,客户在使用敏捷模式时都不够满意,那么在瀑布流式开发的设计阶段花费那么多时间后,他们又如何容忍输出结果呢?
请给出您的建议。
我不确定你经营的是哪种商店,所以很难给出好的建议。但我可以提供两个指导原则:
听起来你们有严重的项目管理和架构/设计问题,通信也出现了问题。我认为从根本上说,改变你们的开发方法论并不能解决这些问题,因此这是错误的做法(尽管可能会恢复一些客户信心)。
我特别担心你们向瀑布模型靠拢,因为现在你们选择了仅仅捕捉需求一次(我们知道这是你们的问题),没有机会获得反馈。这种刻板性对于不灵活的交付目标很有用,但在这里完全不适用,因为你们总是面临变化——那就是敏捷!
短期内,我建议你们回头再次检查他们的需求,重新谈判并确认当前状态。
中期内,我建议你们加强与客户的沟通——尝试让他们参与日常站立会议一段时间(直到你们恢复信心,然后可以更加灵活)。
长期内,你们必须担心你们的项目经理和高级开发人员如何将你们推到这个位置。如果客户不合理,那是一回事(但这仍由项目经理来处理,所以你们不能脱责)。抱怨有太多的变化是不合理的,这意味着你在确定需求时出了问题(这是一个对话,而不是独白),或者你需要更多但可能更短的迭代周期。
总之,我认为向瀑布模型靠拢根本不可能是正确的。它并不能直接解决任何问题,我只能看到它会加剧你们已经指出的问题。
免责声明:我无法客观地评价瀑布模型,因为我从未见过它有效地工作,而且在我看来,对于企业项目来说,它已经完全过时了。
因此,我会花更多精力与客户坐下来,用白板讨论他们真正想要的是什么。在这种情况下,开发过程是敏捷还是瀑布并不重要。
敏捷或瀑布模型只是词语而已。有些做法行得通,有些则不行。 软件开发对于许多人来说似乎是虚拟的,他们不理解为什么修改他们要求的小事情难度如此之大。
你的客户应该明白,构建软件就像建造房屋一样:当你建好所有的基础和墙壁时,要更改整个房屋的最终计划和房间设计就很困难了。
一些实践可以避免这种问题:数据建模、数据字典、数据流图...其目的是完全了解每个需求。将产品切分成许多独立的块有助于在继续设计或指定最终产品的其他部分的同时开始编码。
参见Steve McConnell的书籍《快速软件开发:驯服狂野的软件进度》,了解所有有效的实践方法。
Scrum 可以看作是一种“短暂的瀑布式开发”,在冲刺期间应该与需求变更隔离。但似乎现实并非如此!因此,不要认为改用传统的瀑布式开发能够带来好处,而应坚持在冲刺期间冻结需求。也许你们的迭代周期太长了?(我假设你们采用 Scrum,因为提到了 sprint)
与客户沟通并达成以下共识:
- 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