功能标志与Scrum:实现持续交付
功能标志(Feature Flag,又称功能开关)是代码中的条件分支,通过检查配置值决定是否执行某段代码。其核心在于将部署与发布解耦:代码合并至主分支并部署到生产环境,但配置开关决定是否向用户展示该功能。功能已在生产中,只是尚未对任何人激活。业务就绪时,翻转开关即可,无需部署,无需代码变更。
功能标志的类型
发布标志。 最常见的类型。用于在代码持续部署期间对用户隐藏未完成或尚未发布的功能。应为短期存在——功能完全发布后即删除。长期保留发布标志是一种技术债务。
实验标志。 用于A/B测试和多变量实验。不同用户群看到不同版本;标志控制哪个群体看到哪个版本。实验结束、选定获胜版本后即删除。
运维标志。 用于在运行时控制系统的操作行为——限流、启用熔断器、在两种后端实现之间切换。与发布标志不同,运维标志通常长期存在,代表永久性的操作控制而非临时部署门控。
权限标志。 用于根据订阅层级、地理区域、用户角色或显式授权控制哪些用户可以访问某功能。通常是永久配置,通过账户管理系统而非开发者标志管理工具进行管理。
功能标志所需的技术纪律
功能标志并非没有代价。每个标志都在代码中增加一个条件分支,每个分支都增加复杂性。积累的未整理标志——为数月前已发布功能创建的标志、已结束实验的标志——有时被称为「标志坟场」,带来真实的维护和测试负担。良好的标志卫生要求将标志删除纳入功能工作的完成定义(Definition of Done)。每个标志创建两种必须测试的状态:开启状态和关闭状态。
功能标志如何改变迭代规划与完成定义
功能标志改变了迭代规划中的对话。没有标志时,「完成」通常隐含「已部署且对用户可见」。有了标志,团队可以承诺在迭代结束时完成功能部署并加以标志保护,业务激活则在条件满足时跟进。完成定义需要明确反映标志:代码合并至主分支、标志在两种状态下均经过测试、标志配置可由适当的干系人访问(无需开发者手动翻转)、监控已就位、已创建标志删除工单跟踪清理工作。
XNM咏询帮助组织构建成熟的敏捷与持续交付实践,包括使功能标志安全有效的技术与治理框架。