要从根本上解决需求变更的瞬息万变与版本发布节奏的僵化迟缓之间难以调和的深刻矛盾,企业必须进行一场从产品管理理念、研发流程设计到核心技术架构的、深刻的、系统性的变革。其核心应对策略包括:首先,必须在思想上,彻底摒弃“一次性规划、长期交付”的“瀑布式”思维,全面地、真诚地拥抱能够持续响应和验证变化的敏捷与迭代开发模式、其次,在技术实现层面,必须通过全面采用功能开关、蓝绿部署等高级发布策略,实现“代码部署”这一技术动作与“功能发布”这一业务动作的深度解耦,从而将发布的“开关”,从工程师手中,交还到业务和产品的手中、并建立一套能够适应不同紧急和重要程度变更的、分层的、多节奏的发布“火车”模型。

此外,组织必须极大地强化产品管理的专业职能,建立起一套基于“价值与成本”的、严格的需求甄别与优先级排序纪律,充当高质量的“守门人”,并通过持续地优化技术架构以提升系统的模块化和解耦度,为独立、快速的变更提供“土壤”,最终辅以一套透明、持续的沟通与预期管理机制,将过去那种失控的、干扰性的“变更风暴”,转变为一种可控的、高效的、驱动业务增长的“敏捷响应”。
一、矛盾的根源:为何“变化”总是与“计划”为敌
在软件开发的历史中,“需求变更”与“发布计划”之间,似乎永远上演着一出“矛”与“盾”的战争。一方面,商业世界本身,充满了永恒的不确定性。市场环境、竞争格局、用户偏好、法律法规,无一不在以我们无法预测的方式,快速地变化着。对于业务而言,“拥抱变化”是其生存和发展的本能,快速地响应这些变化,是抓住机遇、规避风险的唯一途径。因此,从业务的视角看,需求变更是天经地义、理所当然的。
而另一方面,传统的软件工程,则是一种追求“确定性”和“可预测性”的规「程」。它试图通过在项目初期,进行详尽的需求分析和周密的计划制定,来构建一个稳定、可控的交付流程。在这种被奉为圭臬的“瀑布模型”中,整个交付过程,被划分为一个个线性的、前后依赖的、不可逆的阶段。一旦“需求分析”的大门关闭,任何后续的变更,都会被视为对“神圣计划”的“干扰”和“破坏”,需要启动繁琐的、高成本的“变更控制流程”。这种模式,将“变化”视为“敌人”,其内在的、深刻的、结构性的矛盾在于:它试图用一种静态的、僵化的、确定性的方法,去应对一个动态的、多变的、充满不确定性的商业世界。当快速变化的市场需求,撞上这条缓慢、笨重、不欢迎变化的“瀑博”式交付流水线时,节奏的严重不匹配,以及随之而来的无休止的冲突、延误和内耗,便成为一种无法避免的宿命。
二、敏捷的“心法”:用短迭代拥抱而非对抗变化
要化解“变化”与“计划”之间的根本矛盾,第一步,也是最重要的一步,就是进行一次深刻的“心法”升级,即全面地、从思想到行动地,拥抱**敏捷开发**(Agile Development)的核心理念。敏捷的核心,并非是“不要计划”,而是用一种全新的、更聪明的“做计划”的方式,来主动地、有节奏地“拥抱”变化,而非消极地“对抗”变化。
敏捷,通过将过去那种长达数月甚至一年的“大瀑布”,分解为一个个短小的、固定节奏的(通常为1-4周)、可重复的“迭代周期”(在Scrum框架中被称为“冲刺”,Sprint),为需求的变更,提供了一个个可预期的、定期的“入口”。在每一个迭代开始之前,团队都会与产品负责人一起,从那个动态变化的、按优先级排序的“产品待办事项列表”中,选取最高价值的需求,作为本次迭代的目标。一旦迭代开始,团队会尽可能地,保护这个短周期内的计划不受干扰,以确保能够交付一个可用的、有价值的产品增量。而在迭代结束时,团队则会通过“评审会”,向所有干系人,展示本次迭代的成果,并收集最真实的反馈。这个“计划-执行-评审-调整”的短循环,如同一个“心跳”,为整个产品开发,注入了一种既灵活又有节奏的生命力。它使得,任何新的、紧急的需求变更,都不再需要去“打断”一个遥遥无期的长期计划,而只需在下一个、近在眼前的迭代计划会上,与其他需求,一起被重新评估和排序即可。
三、发布的“魔术”:部署与发布的解耦之道
即便我们采纳了敏捷的短迭代开发模式,但如果每一次迭代的产出,都必须经历一次高风险、高成本的“正式发布”流程,那么我们只是将一个“大的发布瓶颈”,替换成了一系列“小的发布瓶颈”而已,节奏不匹配的问题,依然没有从根本上得到解决。要实现真正的、随需应变的敏捷性,必须在技术实现上,进行一次“魔术般”的、革命性的变革,即“部署与发布的解耦”。
“部署”(Deployment),是将新的代码,安全地、可靠地,安装到生产环境服务器上的“技术动作”。而“发布”(Release),则是将这些已经部署好的新功能,开放给最终用户使用的“业务动作”。在传统模式下,这两者是“原子性”地、捆绑在一起的。而现代的持续交付与DevOps实践,其精髓,就在于用技术手段,将这两者彻底分离开来。最核心的技术,就是“功能开关”(Feature Flags)。开发团队,可以将一个尚未开发完成、或需要等待特定时机才对用户可见的新功能,用一个“开关”逻辑,包裹起来。这些包含了“被关闭的”新功能的代码,可以安全地、频繁地(甚至一天多次地),被“部署”到生产环境中,但由于开关是关闭的,最终用户,对此是完全无感知的。当业务部门,根据市场节奏,决定在某个精确的时间点(例如,在大型促销活动开始的那一刻),正式“发布”这个新功能时,产品经理或运营人员,只需在一个后台管理界面上,轻轻地,将这个功能的“开关”,远程地“打开”即可。这种解耦,将发布的“定时权”和“控制权”,从过去那个充满不确定性的、由技术团队主导的“部署窗口”,解放了出来,赋予了业务无与伦比的灵活性和精准度。
四、节奏的“艺术”:设计多班次的“发布火车”模型
在解决了“部署”与“发布”的解耦之后,我们还需要为不同类型、不同紧急程度的需求变更,设计一套与之相匹配的、差异化的“发布节奏”。试图用一个“一刀切”的、单一的发布节奏(例如,“我们公司规定,所有变更,都必须在每双周周四的发布窗口进行”),去应对所有五花八门的业务需求,是另一种形式的“僵化”。
一个更成熟、更具弹性的发布模式,是借鉴现实世界中的交通体系,设计一个由多班次、不同速度的“列车”所构成的“发布火车”模型。在这个模型中,可以包含:1. 一趟“每日班车”或“即时救护车”。这趟列车,专门用于承载那些最高优先级的、紧急的线上Bug修复(Hotfix)。它拥有最高的“路权”,可以绕过大部分的常规流程,以最快的速度(例如,一天多次),将修复补丁,安全地,送达生产环境。2. 一趟“固定节奏的主干线列车”。这是最常规的、承载了绝大多数新功能开发的“主力军”。它可能以每周、或每双周的固定节奏,准时地,从“开发站”出发,开往“生产站”。这个固定的、可预期的节奏,为产品、市场、销售等所有相关部门,提供了一个清晰的、可以进行协同和规划的“时间表”。3. 一趟“慢速重载货运列车”。这趟列车,专门用于承载那些不紧急,但极其重要、影响深远的“大型基础设施改造”或“底层架构重构”项目。它的发车周期可能很长(例如,一个季度一次),但每一次的“运输”,都为整个系统未来的发展,奠定了更坚实的基础。通过这样一个多层次、差异化的“发布火车”体系,组织就能在“响应紧急变化”与“保持可预测节奏”这两者之间,找到一个动态的、艺术性的平衡。
五、需求的“守门人”:从“传话筒”到“价值看门人”的产品管理
当研发团队,通过敏捷和技术创新,具备了更强的、响应变化的能力后,一个新的、更严峻的挑战,便会浮出水面:并非所有来自业务方的“变更”,都是有价值的、值得被快速响应的。如果研发团队,不加甄别地,对所有涌入的需求变更,都进行“有求必应”式的开发,那么他们很可能,只是在“敏捷地”,制造着大量的、无人问津的“产品垃圾”。
因此,要从根本上,解决节奏不匹配的问题,组织必须极大地,强化“产品管理”(Product Management)这一关键的“守门人”职能。一个优秀的产品经理,绝不应是一个被动地、接收和传递业务需求的“传话筒”。他必须成为一个主动的、数据驱动的、对最终商业结果负责的“价值看门人”。这意味着,产品经理,必须建立起一套严格的、透明的、基于“价值与成本”的“需求评估与优先级排序”的纪律。他需要不断地,向提出需求的业务方,追问一系列深刻的“为什么”:“这个变更,如果我们做了,预期会为哪个核心业务指标,带来多大的、可量化的提升?”、“为了实现这个变更,我们需要投入多大的研发成本?其投入产出比,是否优于待办列表中的其他选项?”、“这个需求的紧迫性,是真的源于用户价值,还是仅仅源于某个内部干系人的个人偏好?”。通过运用诸如“加权最短作业优先”(WSJF)、“RICE评分模型”等专业的优先级排序框架,产品经理,能够有效地,将那些真正高价值、高紧急度的“黄金”需求,从大量的“青铜”和“黑铁”需求中,筛选出来,从而确保宝贵的研发资源,永远被投入在“最值得”的地方。
六、架构的“韧性”:用“解耦”为独立变更提供土壤
在物理世界中,我们不可能在不影响其他房间的情况下,去改造一栋“承重墙”结构的大楼。同样,在软件世界中,如果我们的系统,是一个所有功能都紧密地、犬牙交错地耦合在一起的“单体式”架构(Monolithic Architecture),那么,任何一个微小的需求变更,都可能需要对整个庞大的系统,进行牵一发而动全身的、高风险的修改和完整的回归测试。这种“刚性”的、缺乏“韧性”的技术架构,是制约组织无法实现“小需求、快发布”的、最深层次的技术“瓶颈”。
因此,要从根本上,提升组织对需求变更的响应能力,就必须在技术架构上,坚定地,朝着“高内聚、低耦合”的模块化,乃至“微服务化”的方向演进。一个设计良好的、松耦合的架构,就如同一个由许多个独立的、可以通过标准接口进行互换的“乐高积木”所搭建起来的系统。每一个“积木”(模块或微服务),都由一个独立的、小而美的团队负责,这个团队,可以独立地,对这个“积木”,进行修改、测试、部署和发布,而几乎不会对其他的“积木”,产生任何非预期的影响。这种架构上的“解耦”,为组织带来了无与伦比的“敏捷性”。不同产品线的需求变更,可以由不同的团队,以完全不同的节奏,并行地进行交付,而无需再像过去一样,所有人都必须等待那趟唯一的、缓慢的、需要协调所有部门的“中央发布火车”。
七、沟通的“桥梁”:建立透明的预期管理与协作契约
最后,我们必须认识到,解决节奏不匹配的问题,不仅仅是流程和技术的挑战,更是一场深刻的、关于“沟通”和“预期管理”的组织能力建设。如果业务方、产品和研发团队之间,缺乏一个透明的、共享的、基于事实的沟通“桥梁”,那么,即便拥有了最敏捷的流程和最先进的技术,彼此之间的误解、不信任和冲突,依然会反复上演。
建立这座“桥梁”,首先,需要一个“透明的、可视化的路线图与待办列表”。产品经理,必须维护一份所有干系人,都能随时查看的、动态更新的产品路线图(Roadmap)和产品待办列表(Product Backlog)。这使得业务方,能够清晰地看到,他们所提出的需求,当前正处在哪个位置、其优先级如何、以及大概的排期是怎样的,从而将过去那种“黑箱”式的等待,转变为一种开放、透明的共同展望。其次,需要建立“高频次的、有仪式感的同步与演示机制”。例如,在每个敏捷迭代结束时,举办的“评审会”(Sprint Review),就是一个极佳的沟通“仪式”。在这个会上,研发团队,可以直接地,向业务干系人,演示他们在这个迭代中,完成的、可工作的软件增量,并获得最直接、最真实的用户反馈。要建立这种透明度,一个能够将需求、开发、测试与发布等环节,端到端打通的管理平台是必不可少的。例如,通过像智能化研发管理系统PingCode这样的平台,可以让所有干系人,实时地看到一个需求变更,当前正处于哪个研发阶段、预计何时能够进入发布窗口,从而极大地减少了信息不对称和不必要的沟通成本。通过这些持续的、结构化的沟通,组织才能在“灵活性”与“可预测性”之间,建立起一种健康的、相互理解的、可持续的“协作契约”。
常见问答
问:我们公司尝试推行了Scrum敏捷开发,但感觉只是把过去三个月的“大瀑布”,切成了很多个为期两周的“小瀑布”。需求变更,依然只能在每个迭代(Sprint)开始前的计划会上提出,一旦迭代开始,就完全不接受任何变更。这是否违背了敏捷的初衷?该如何改善?
答:这种情况非常普遍,是许多团队在敏捷转型初期,都会遇到的典型问题。它确实在一定程度上,违背了敏捷“拥抱变化”的核心精神,但其背后的动机——即“保护团队在一个短周期内,能够专注地、不受干扰地,完成一个有价值的目标”——又是合理的。改善的关键,在于在“保护专注”与“响应变化”之间,找到更精细的、更灵活的平衡,而非“一刀切”的“禁止变更”。1. 区分“干扰性变更”与“澄清式变更”。迭代内部,应严格禁止那些会“改变迭代目标”的、颠覆性的“新需求”插入。但对于那些,只是为了“更好地实现当前迭代目标”的、澄清式的、细节性的需求调整,则应该被允许和鼓励。2. 为“紧急的、高价值的”变更,预留“快速通道”。可以在每个迭代的计划中,有意识地,预留一小部分(例如10-20%)的“缓冲”或“快速响应”容量。当迭代中,确实出现了“不响应,就会造成巨大业务损失”的、极高优先级的意外变更时,可以与产品负责人协商,动用这部分“缓冲”容量,并可能需要“置换”出某个原计划中,优先级最低的需求。3. 引入“看板”(Kanban)方法。如果团队所面临的业务环境,其需求的“涌现性”和“不确定性”确实极高,以至于连为期两周的计划,都显得过于僵化,那么,或许Scrum并非最适合的框架。可以尝试引入更侧重于“持续流动”和“限制在制品(WIP)”的“看板”方法。在看板模式下,没有固定的迭代周期,团队只需按照优先级,从待办列表的顶端,持续地“拉取”下一个最重要的任务来做,这为高频的需求变更,提供了更大的灵活性。
问:“部署与发布解耦”所依赖的功能开关技术,听起来非常理想,但我们的业务,对功能的“完整性”和“品牌体验的一致性”要求很高,非常不希望出现一个“开发了一半”的、“半成品”的功能,被意外地发布给用户,该如何平衡这种灵活性与业务的严谨性?
答:这个顾虑非常重要,它触及了功能开关实践的“成熟度”问题。解决方案的核心,在于将功能开关的管理,从一个“纯技术的、分散的”行为,提升为一套“有策略的、中心化的、受治理的”产品发布能力。1. 建立“功能开关生命周期管理”流程。一个功能开关,从其“创建”开始,就应该有明确的“主人”、清晰的“目标受众”(是对内部员工、特定用户群,还是全员发布?)、预期的“开启/关闭”时间,以及最重要的——一个明确的“清理计划”。当一个功能,已经100%全量发布并稳定运行后,其对应的、代码中冗余的功能开关逻辑,必须被及时地、作为技术债,进行清理。2. 采用“多环境”的功能开关配置。一个成熟的功能开关管理平台,其自身,也应该具备“开发”、“测试”、“生产”等多套环境。一个新功能,可以先在测试环境中,为QA人员“打开”开关,进行充分的验证。在确认其功能完整、体验符合标准后,再在生产环境中,按照预设的灰度策略,逐步“打开”开关。这确保了,任何一个“半成品”,都不会有接触到真实用户的机会。3. 将功能开关,与A/B测试和数据分析平台,进行深度整合。功能开关,不仅仅是一个“发布”工具,更是一个强大的“在线实验”工具。可以将新功能,作为A/B测试的一个“实验组”,只对一小部分用户开启,并密切地,通过数据分析,来观察这个新功能,是否真的带来了预期的业务指标提升。通过这种数据驱动的方式,来决策,是应该“全量开启”,还是“关闭并下线”这个功能,从而让发布的决策,变得更加科学和严谨。
问:作为一名产品经理,我总是被来自不同业务方和公司老板们的、各种看似“十万火急”的需求变更所包围,很难守住既定的发布节奏和产品路线图,我该如何进行有效的向上管理,对这些需求进行“降噪”和“过滤”?
答:这是产品经理岗位上,最核心也最艰难的挑战之一。有效的“向上管理”,其关键,在于将自己从一个被动的“需求接收者”,转变为一个主动的、用“数据和逻辑”来引导和影响干系人的“业务顾问”。1. 让“机会成本”变得可见。当一个干系人,带着一个“紧急”需求插入时,不要直接说“不行”。而是应该拿出那个透明的、已经按优先级排好序的待办列表,并对他说:“非常好的想法!为了做您这个需求,根据我们目前的资源,我们将不得不,把原计划中,正在进行的A、B、C这三个需求,向后顺延。这三个需求,预期能带来XX的价值。您看,我们是否可以一起评估一下,您这个新需求的价值,是否能够超过我们延迟A、B、C所带来的‘机会成本’?”。这种方式,将对话,从“能不能做”,巧妙地,转变成了“做哪个更划算”的、更理性的商业决策。2. 建立一个统一的“需求入口”和“评估流程”。要坚决地,杜绝通过微信、邮件、口头等任何非正式渠道,来接收需求。要求所有的新需求,都必须通过一个统一的“需求提交模板”,来提交到产品待办列表中。这个模板,会“强制”需求方,去思考和回答一些关键问题,如“这个需求的目标用户是谁?”、“它要解决什么核心问题?”、“我们如何衡量它是否成功?”。这个简单的流程,就能自动地,过滤掉大量拍脑袋的、思考不成熟的“伪需求”。3. 用“产品路线图”来统一“军心”。要持续地,向所有干系人,布道和沟通,那个经过深思熟虑的、与公司战略紧密对齐的“产品路线图”。要让他们明白,我们的资源是有限的,我们必须集中火力,去打那些在“主航道”上的、能带来最大战略回报的“战役”。任何一个偏离主航道的“临时想法”,都必须拿出极具说服力的理由,来论证,为什么我们应该“调整航向”。
文章包含AI辅助创作,作者:mayue,如若转载,请注明出处:https://docs.pingcode.com/baike/5217033