如果功能标志出错的话

\ 主要结论\\ 如果功能标志出错的话\
功能标志若能妥善利用,将是一项强大的开发技术,可以帮助开发、运维、质保、产品、营销,以及销售人员更快速地将更好的功能投放市场 。功能标志可以帮助软件团队实现分批次的软件发布(代码已发布至生产环境,但可能暂时不可被用户可见),这种方式避免了新功能一经发布就立刻能够被所有用户使用 。功能标志充当了通往新功能的大门 。简单来说,功能可以独立于具体部署被“打开”或“关闭” 。\
然而功能标志并不是简单的“开关” 。功能标志可能包含百分比和不同片段,根据需求的不同可能极为复杂,不仅可用于发布管理(金丝雀发布,摸黑启动,渐进式推出),而且可用于长期控制(访问级别控制权利,不同的一次性客户操作,以及行为控制) 。\
如果未能妥善管理,功能标志也可能造成非常大的麻烦,这种麻烦曾经在30分钟内造成了价值4.6亿美元的损失 。如果错误地使用和管理,功能标志也可能产生大量糟糕的技术债 。本文将介绍几个功能标志滥用的后果以及从中学到的经验和教训 。\
模棱两可/重复使用的标志名\
标志应当使用清晰明了,易于理解的名称 。类似“”这样名称的标志是最容易造成误解的 。某个后端团队可能认为这样的标志只控制了自己目前正在使用的某个功能,然而他们不知道的是,另一个前端团队可能会重复使用这个标志控制自己的某些功能 。两个团队开始根据自己的需求同时切换同一个标志,就如同两个人争相控制同一个电灯开关,这将导致该标志永远不会处于正确的状态 。最终(通过唇枪舌战)他们终于发现问题所在,开始分别使用不同的标志 。\
标志的删除\
标志可用于实现短期或长期控制 。对于短期发布管理工作,可以将代码部署至生产环境,随后由负责对该功能进行验证的团队开启标志 。\
长期标志可用于永久性地控制代码的某些片段 。长期标志可用于实现权利管理或用户基数的划分 。例如一家SaaS公司可以通过功能标志让多个企业客户访问不同功能的片段,或让新手与高级用户获得不同的功能 。判断短期和长期标志之间差异最简单的方法是:看该标志的意图是否是让所有用户最终获得同一个变体 。如果是,那么这就是短期标志,需要为这样的标志制定相应的删除计划 。然而短期标志通常是暂时性的,一旦完成预定用途需要将其删除 。领英()以不及时清理功能标志而出名,他们曾无意中发布了一个所有标志都处于“打开”状态的版本,进而导致网站不可用,充斥着各种相互冲突又过时的功能 。\
这方面有一则最佳实践,可以为短期和长期标志使用不同的命名约定 。例如为所有短期标志添加“Temp”作为前缀,或通过功能标志管理系统为不同用途添加恰当标志 。随后理想情况下,如果看到某个标志被所有用户调用过后,即可放心地删除该标志 。同时如果某个标志未被任何用户调用,则有必要仔细研究一下为什么会发布这样陈旧的代码路径 。有时候对工程师来说,删除陈旧的代码可能是最有价值的工作 。这样如果未来代码的使命已经完成需要退役,要测试和验证的代码数量会变得更少 。\
技术(和非技术)用户的能见性\

如果功能标志出错的话

文章插图
如果使用功能标志控制各种功能,这等于为系统创建了多个状态 。请确保所有部门(工程、质保、性能、支持、营销、产品)都了解这些标志的存在 。最起码要确保前端和后端团队保持同步 。如果有多个微服务,也要让标志对他人可见,这样不同团队才知道自己该使用哪个接口 。\