一些采用像 scrum 这样的自适应和敏捷工程方法的人可能没有意识到你自己陷入了什么。
敏捷工程的原因是向您的客户发布现在可用的任何东西,并逐渐建立其可用性和功能。
- 如果您的项目预计在 18 个月内完成,但如果您可以每 2 个月有更多可用的东西 - 为什么不每两个月发布一次功能,而不是等到 18 个月后的盛大圣日,因为无论哪种方式,项目仍将持续 18 个月.
- 您的客户的要求可能会发生变化,因此让您的客户有机会经常改变主意,以免为时已晚,从而使客户兴奋不已。
- 有人可能会在 10 个月后发布您的模块之一的开源模块,然后您无需做太多其他事情,只需集成该模块即可。
因此,scrum 的动态需要 scrum 人员,或者至少是 scrum 主管和/或项目经理/架构师来模块化......模块化还不够好;但细化项目。
您必须将模块细化到合适的大小,并为每个模块提供合同接口规范,以便在模块内管理模块内的更改。如果您的模块本身或由于其他模块的依赖无法满足合约接口,您必须冻结代码以使您能够广播合约接口版本 1,以便其他团队可以继续,尽管功能少于预期在下一个通用产品版本中。
代码冻结是代码冻结。
如果您的代码冻结经常遇到解冻延迟,那么您的 Scrum Master 和产品架构师没有沟通或没有正确地完成他们的工作。也许,试图让您的管理层相信他们正在使用一种称为敏捷编程的行业时尚,这可能是没有意义的。或者管理层需要聘请架构师和 Scrum Master,他们能够根据团队的技能以及客户的期望和项目的技术限制来设计和细化项目。
我认为有些管理人员和他们的 scrum master 甚至没有意识到一个好的架构师对 scrum 环境的重要性,并且拒绝雇用一个。一个能够倾听并与团队合作的优秀架构师对于 Scrumming 过程是无价的,因为他/她必须不断地调整架构以适应不断变化的粒度和期望。
我也认为有一些管理元素和他们的 scrum master 属于编程世界的另一个谱系,由于像瀑布这样的较长开发周期的糟糕经历,他们因此认为 scrum 是为了在一个月内生产出一个产品,因此进行了细致的调查进入跨模块效果并不是真正必要的。他们坐下来,在空中弄湿手指,然后进行了一次出色的冲刺。
如果您的团队经常遇到代码冻结的问题,那么你们可能需要对整个项目进行代码冻结并重新考虑您的策略,并查看原因是由于您拒绝定义适合模块粒度的模块合约。或者你们是否完全定义了模块合同,以便当前可以精简卡住模块的功能,以使其他团队或模块能够继续。
你们是否有一个 UML 策略来帮助发现项目发布的预计功能并允许您查看搁浅模块的影响,然后查看需要关注哪个模块才能达到所需的产品发布级别?您是否参加了 Scrums 和 sprint,并且没有 UML 的图片来显示您的先进或延迟程度,以至于您只是愉快地或盲目地颠簸自己?或者您的 Scrum 主管是否会对房间说“是”或“否”,嗯……那个模块似乎很重要——实际上并没有清楚地了解哪些是与产品发布相关的最可绞合的模块。
通过逐步冻结模块来实现产品发布代码冻结。一旦一个模块完成,就会进行产品测试以确保该模块满足其合同,并且该模块被代码冻结为 2.1 版。尽管 2.2 的该模块的工作取得了进展,但整个项目不应依赖于 2.2,而应依赖于 2.1。该策略是在测试产品版本以及产品版本是否应该缩减其功能时,尽量减少需要解冻合同的模块数量。如果渐进式模块化冻结对您的开发团队没有帮助……要么产品非常复杂,而您的管理层对实现正确发布的迭代次数预期不足,要么模块化架构和策略需要认真重新考虑。