功能蔓延(feature creep)是指在开发过程中产品功能需求不受控制地扩大,每次新会议都会增加“只是一个小功能”而不重新调整期限和预算。这个术语描述的是初始工作量成倍增长、发布日期不断推迟的情况。根据Standish Group CHAOS Report 2024的数据,52%的失败项目包含不可控需求扩大的因素,这使得功能蔓延成为开发失败的主要原因之一。
要点
功能蔓延(feature creep,也称为范围蔓延或需求蔓延)是指项目的功能需求逐渐不受控制地扩大的趋势。每个新功能看起来都“无害”,但累积起来就会破坏计划。
在移动开发中,由于应用商店发布的严格期限,功能蔓延尤其危险。如果iOS应用无法在承诺日期准备就绪,由于App Store的审核流程,发布可能会推迟数周。
根据Atlassian的数据,70%的团队在大型项目中至少遭遇过一次功能蔓延。然而只有25%的团队拥有正式的变更管理流程。
“功能蔓延”这个术语由feature(功能)和creep(蔓延,逐渐推进)组合而成。最早出现在20世纪80年代的管理文献中。
在编程领域,弗雷德里克·布鲁克斯在《No Silver Bullet》(1986年)一文中推广了这个术语,描述了软件复杂性的增长速度超过团队控制能力的情况。
如果以上三个迹象中至少出现两个,那么项目正处于功能蔓延区域,需要立即采取范围控制措施。
功能蔓延的原因很少是单一的,通常是多种因素组合作用,相互加强。理解根本原因是解决问题的第一步。
根据PMI Pulse of the Profession 2024的数据,47%的项目因不完善的需求管理而受损,38%因发起人参与不足(无法拒绝利益相关者)而受损。
客户在开发过程中看到产品,意识到自己想要不同的或额外的东西。这是一个正常的学习过程,但如果没有控制就会破坏计划。
例如,客户订购一个具有基本功能的配送应用,一个月后又要求添加与快递员的聊天功能,接着是地图追踪,然后是与智能手表的集成。
竞争对手发布了新功能,团队感到需要“追赶”他们,即使这些功能并未被计划。这是反应性功能蔓延,最难控制。
根据Gartner的数据,因竞争压力而添加的功能中65%无法收回投资,因为在不理解其价值的情况下复制他人功能很少带来成果。
产品负责人(PO)是负责产品统一愿景和待办列表优先排序的角色。如果PO薄弱或职责模糊(多人持不同意见),功能蔓延将不可避免。
在Scrum中,PO拥有批准需求的专有权利。如果这一权利被模糊化,每个利益相关者都会开始推动自己的“重要”功能,待办列表将不受控制地膨胀。
功能蔓延同时从多个方面破坏项目:期限、预算、质量和团队士气。每种后果都会加剧其他后果。
根据Standish Group的数据,存在不可控功能蔓延的项目平均超支66%,交付的功能比计划少42%。
每个新功能都需要设计、开发、测试和集成的时间。如果在不删除旧功能的情况下添加新功能,期限将不可避免地推迟。
在移动开发中,功能蔓延尤其隐蔽:新功能中后期发现的错误可能阻碍发布,应用将错过发布窗口。
团队工作越来越多,却看到终点不断远离。这会打击士气并导致倦怠。根据GitLab Survey 2024,58%的开发者将不稳定的需求列为压力的主要来源。
在患有慢性功能蔓延的团队中,人员流动率比严格控制范围的项目高出40%。新开发者需要时间进行入职培训,这进一步拖慢了项目进度。
当期限紧迫时,团队会牺牲质量:省略测试、放弃重构、积累技术债务。产品“半成品”就发布了。
根据Google Play的数据,错误较多(评分低于3.5)的应用在商店页面上就损失了70%的潜在安装量,这使得功能蔓延在经济上得不偿失。
控制功能蔓延需要在项目的所有阶段采取系统方法:从合同到日常优先级决策。范围管理工具必须在开发开始前就位。
基本原则是,每个新功能都必须被明确请求、评估工作量,然后要么纳入范围并调整期限,要么被拒绝。
明确定义的范围是防止功能蔓延的基础。合同或项目任务书应包含具体功能列表和验收标准。
“友好界面”或“灵活的报告系统”这样的表述是危险的,因为它们留出了解释空间。需求必须是可衡量且明确的。
MoSCoW是一种优先级排序方法,将需求分为四类:必须(必须有)、应该(应该有)、可以(可以有)和不(暂不进行)。
在添加新功能时,团队确定其类别。如果所有必须已满,该功能将归入可以或不,不影响当前版本。
任何需求变更都必须经过正式的变更请求流程。请求包含描述、理由、工作量评估和对期限的影响。
由产品负责人或指导委员会做出决定。如果功能未通过变更请求,即使首席执行官要求也不会被采纳。
敏捷方法论包含防止功能蔓延的内置机制:时间盒、进行中限制、待办列表优先级排序和定期检查。但它们本身并不能保证保护。
关键要素是团队和产品负责人遵守约定流程的纪律。没有纪律,即使最严格的Scrum也无法防止范围膨胀。
在Scrum中,冲刺有固定时长(通常为2周)。如果团队无法完成所有任务,则移除优先级最低的任务,而不是延长冲刺。
这迫使产品负责人和团队严格确定优先级。新功能只有在其工作量相等的另一功能被移除后才能进入冲刺。这样工作量就保持可控。
看板使用进行中工作的限制(WIP)。团队在完成当前任务达到设定限制之前,无法接手新任务。
进行中限制使功能蔓延变得可见:如果“进行中”列已满,团队客观上无法接手新功能,这对所有利益相关者都显而易见。
常见问题
正常扩展伴随着期限、预算和资源的重新评估。功能蔓延是在没有相应调整计划的情况下添加功能,而且往往团队不易察觉。
在合同中固定最小可行产品范围,指定一名拥有否决权的产品负责人,实施变更请求流程,并与利益相关者商定新功能必须在开发开始前经过评估和批准。
有时,如果市场或用户需求发生了根本性变化,功能扩展可能是必要的。但在这种情况下,范围必须被正式重新评估,而不是在不被察觉的情况下“蔓延”。
向客户展示每个新功能对发布日期和预算的影响。使用可视化工具 — 路线图、燃尽图、带优先级的待办列表。看到后果的客户会减少要求“再多一个小功能”的频率。
在不重新调整期限的情况下,安全添加的新功能不超过初始范围的10-15%。超过此限度的任何内容都需要正式的项目重新规划。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。