在软件工程开发领域,“敏捷”几乎成了软件企业的共识。然而,许多团队选择的“敏捷”实施方式却是采用Scrum,但这种方式并不真正符合敏捷的本质。实际上,Scrum的结构和流程不仅与敏捷宣言的原则背道而驰,还可能反而妨碍团队的灵活性和创造性。
Scrum的问题:僵化的框架与脱节的实践Scrum的核心思想是将工作分解为固定长度的“冲刺”(Sprint)周期,并通过严格的任务管理和频繁的会议来推动进展。但这种方法的本质是将开发过程塞进一个固定的框架,无论任务的实际需求或规模如何。具体来看,Scrum有以下问题:
固定时间的Sprint与不断变化的需求不匹配Scrum要求将任务划分为特定时间长度的“块”,并在一个Sprint周期内完成。然而,软件开发的需求变化频繁,有时一个任务在当前Sprint完成并没有实际意义。对于复杂或探索性任务,常常需要较长的时间来完成正确的方案,而不是为了“赶Sprint”而仓促交付。
频繁的会议妨碍实际工作Scrum的日常站会、Sprint规划会、回顾会等会议流程往往会占用大量时间,降低团队的专注度。开发者常常发现自己不得不中断手头的工作去汇报进展,导致项目进展的节奏被打乱,甚至产生了厌倦。
Sprint限制下的局限性思维Scrum鼓励短期目标和快速交付,但当团队总是只关注“当前Sprint完成什么”时,往往会忽视产品的整体架构和长远目标。长此以往,团队可能会陷入短视思维,关注的是“完成任务”,而不是如何提供最佳的解决方案。
机械化的反馈回顾Scrum的回顾会原本是为了提升团队的改进意识,但在实际操作中却容易流于形式。很多时候,即便没有具体的改进建议,团队依然需要例行参加回顾会,反而使得敏捷的“适应性”失去了意义。
更灵活的“敏捷”方法Scrum的问题在于,它的流程和框架让开发团队难以实现敏捷宣言中的“响应变化”原则。真正的敏捷应该建立在灵活性和适应性之上,而非依赖一个“统一的框架”。以下是一些更贴合敏捷精神的做法:
根据项目需求拆分自然工作块将工作分解为符合实际需求的大小不同的任务块,而非固定时间的任务块。每个任务块可以是一个独立的功能模块,也可以是一个需要多个开发者协作的大任务,不受时间长度的限制。
按需调整任务顺序与优先级根据需求的变化,灵活调整任务顺序,而非硬性地安排在特定的Sprint中。这样可以保证开发团队在最合适的时间完成最重要的工作。
允许随时变更任务方向如果当前工作由于需求的变化变得不再有价值,那么可以立刻调整方向,而不是等到Sprint结束再讨论调整。这种即时调整可以更好地应对不确定性。
自然而然地进行回顾和反馈反馈和回顾不应仅限于每个Sprint结束后,而是可以随时进行。开发团队可以在工作块完成时邀请客户或利益相关方提供反馈,以保证工作的方向和质量。
完成即交付若某个任务块完成且具备独立交付价值,不妨尽早发布给用户。每个任务完成时都可以进行发布,避免了大量任务积压在一起的风险。
敏捷不等于ScrumScrum可以是一种工具,但它不是敏捷的唯一解答。敏捷的核心在于灵活、适应变化和以人为本,而不是把开发过程塞进一个僵化的流程。相比之下,上述的灵活方法更能激发团队创造力,避免无效的会议和时间浪费,让开发团队真正专注于开发具有价值的功能。