产品胜过项目
软件项目是为软件开发提供资金和组织的一种流行方式。它们将工作组织成临时的、仅构建的团队,并通过商业案例中预测的特定收益进行资助。产品模式则使用持久性的、包含构思-构建-运行的团队来解决持续存在的业务问题。产品模式使团队能够快速调整,减少其端到端周期时间,并通过使用短周期迭代来验证实际收益,同时维护其软件的架构完整性以保持其长期有效性。
2018年2月20日
软件项目是为软件开发提供资金和组织的一种流行方式。项目根据商业案例中预测的收益,逐案进行资金支持。它们以一个或多个临时团队的形式组织,这些团队成员在项目组织之外具有持久的汇报关系。他们从“人才库”中配备人员,这些人员被认为在专业领域内是可互换的。通常,软件项目团队的工作是构建或增强某个系统或应用程序,然后继续进行其他工作。
然而,项目并不是为软件开发提供资金和组织的唯一方式。例如,许多将软件作为产品或服务出售的公司不会以项目的形式为其核心产品/平台开发提供资金或组织。相反,他们使用近乎永久的团队来运行产品开发和支持,只要产品在市场上销售,这些团队就会持续存在。预算可能逐年变化,但通常足以持续为产品生命周期内的持久核心开发组织提供资金。团队获得资金是为了在一段时间内解决特定的业务问题或提供服务;工作性质由要解决的业务问题来定义,而不是要交付的一组功能。我们将这种工作方式称为“产品模式”,并断言,为了以这种方式为软件开发提供资金和组织,并不一定需要构建软件产品。
什么是产品模式?
“产品模式”是一种工作方式。它是一种为软件开发提供资金和组织的方式,与项目方式有很大不同。虽然它通常适用于数字时代的企业IT,但这种工作方式特别适合那些希望通过数字平台推动业务的人。与项目的差异总结如下,并在本文的其余部分中详细阐述。
项目
产品模式
什么获得资金?
预定义的解决方案或突出范围获得资金。
团队获得资金。
产品模式团队以滚动方式获得资金(例如,一次获得一年的资金),并定期进行评估。团队一个接一个地解决问题,大致在同一领域,通过与产品/业务战略一致的不断发展的路线图进行工作。
为开发生命周期的哪一部分提供资金?
主要用于构建解决方案。
用于构建、运行和迭代解决方案,甚至转向不同的解决方案,直到可验证地解决潜在问题。
如何组织“构思”、“构建”和“运行”的价值流阶段?
作为独立的部门。
作为具有统一汇报层级的单一部门。
团队持续多长时间?
直到项目资金持续,理想情况下意味着直到最初设想的解决方案交付。通常,持续数周或数月。
只要路线图具有业务相关性。通常,持续数年。
人们是否会在同一领域长期工作?
并非设计使然。对于任何个人来说,下一个项目可能在完全不同的领域。
是的。
优先级如何运作?
项目由业务以及项目组合管理 (PPM) 小组进行优先级排序。了解更多。
路线图项目由产品负责人及其业务对应方进行优先级排序。跨领域计划由业务或技术领导层进行优先级排序。计划不会获得自己的团队。它们被分配给预先存在的产品模式团队。
收益验证如何运作?
在项目批准之前,重点是正式评估预计收益。在项目交付后,通常没有机制来验证实际收益。
产品负责人通过 A/B 测试、分析、用户调查等数据或业务反馈来证明实际收益。这种能力取决于良好的工程能力,能够以小块的形式频繁开发和发布,以及良好的分析能力,能够确定采用率、转化率等的增量变化。
在评估前期预计收益方面,相对较少强调,尤其是在执行周期时间短且能够以低成本尝试新想法的最佳团队中。产品负责人有权根据自己的判断批准路线图项目的开发。通过以小规模、端到端的迭代进行开发,产品负责人能够尽早发现任何偏离目标的努力,从而快速失败(廉价失败)。
成功如何定义?
按时按预算交付商定的范围。
直接与业务成果相关的指标得到改善,或者与业务成果最多相隔一到两个级别。因此,理想情况下,每个产品模式团队都是一个以业务 KPI 为导向的团队。例如,Scout24 以这种方式运作,团队负责流量、参与度等。
团队组织是否存在任何限制?
没有。
当团队的组织既与业务相关能力保持一致,又与企业架构边界保持一致时,产品模式的效果最佳。如果没有前者,他们可能会失去与业务目标的一致性。如果没有后者,他们会失去自主权,即相对独立于其他团队发展其系统的能力。
产品模式不再局限于销售软件的公司。它在所谓的科技公司中很常见,这些公司由科技平台支持,这些平台流式传输内容、电子零售、分发共同基金、寻找出租车、住宿、航班,等等。它也开始在更传统的、老牌企业的数字/产品/工程/IT部门中流行起来。例如,澳大利亚保险集团 (IAG) 最近从项目转向更持久的平台组织,以产品模式运作。澳新银行 正在尝试类似的事情。
有一些产品模式团队的变体,这些变体并不理想。有些地方使用项目模式资金和产品模式组织的折衷方法。即使是产品模式组织,也不总是构建+运行。或者跨职能团队由向不同职能主管汇报的人员组成。
理想的产品模式团队是一个赋能的、以成果为导向的、与业务能力保持一致的、长期的、跨职能的、包含构思-构建-运行的团队,能够并且期望解决问题并改善业务成果,而不是按计划交付范围。这些团队承担的问题通常是长期的,例如持续改进从购物车到结账的转化率(降低购物车放弃率)。问题也需要定义得足够窄,以便单个团队可以拥有它们。例如,虽然“净推荐值”(NPS) 是一个很好的整体指标,但它通常过于宽泛,任何特定团队都无法签署它。
在产品模式中,不仅团队是长期的,它与问题领域的关联也是长期的。产品模式团队通常以拉式开发模式运行,重点是实现流动,而不是使用故事级别估计和发布计划来实现可预测性。
产品模式运作的优势
在当今(2017年)的商业环境中,产品模式运作比项目模式运作有几个优势。
快速调整的能力
过去,IT/工程只需在收到市场情报或反馈后一年内做出反应就足够了。随着“数字”成为主流,这种情况不再适用。让我们以在线零售为例。从广义上讲,基本在线零售平台的功能可以分为目录、订单管理、支付和履行。
在项目模式中,可能在某个时间点,由于优先级的原因,我们有影响订单管理、支付和履行的活动项目,但没有影响目录。现在,如果我们从市场或业务利益相关者那里收到意外的、与目录相关的反馈,我们将没有一个团队到位,可以随时对反馈采取行动。通常,任何新的反馈都会默认地受到商业案例和项目批准流程的约束,然后进行优先级排序以进行人员配备。即使我们可以暂停其中一个活动项目并将团队重新部署到目录,该团队也可能不熟悉目录,因此无法立即投入工作。
相比之下,在产品模式中,我们将有一个或多个长期团队专门负责目录、订单管理等,并随时准备对新的反馈采取行动。它只需要团队的产品负责人及其业务对应方做出决定,将部分团队容量转移到新的信息上。这种快速调整就绪团队的能力是提高响应能力的第一个组成部分。
减少端到端周期时间
周期时间是衡量响应能力的常用指标。整体周期时间包括重新定向时间和执行时间。现在让我们来考察后一个组成部分。
大多数企业 DevOps 倡议根本没有改变“变更”和“运行”组织之间的分离。通常,这两个组织都会采用一些新的工具,一些部署和基础设施自动化,也许还会加入一些“云”来锦上添花。他们甚至可能实现一些好处,例如更频繁、自动化和可靠的部署。
然而,由于开发到集中式运维的交接仍然存在,交付变更的端到端周期时间并没有太大变化。产品模式团队在部署和运行他们构建的内容时,不会遇到这种交接。因此,他们可以充分发挥 DevOps 采用的潜力。将应用程序级运维与开发人员合署办公,也有助于促进更好的端到端迭代,以及开发人员和站点可靠性工程师之间更好的理解。
请注意,产品模式团队通常会继续依赖其他专门的运维团队,这些团队提供自助式构建和部署基础设施,管理数据中心,或负责非应用程序级别的安全。即使这些团队不与业务能力保持一致,它们也可能以产品模式运行。
真正迭代的能力
首席运营官经常抱怨技术组织的成本。然而,他们错过了节省资金的最大机会之一,因为其根本原因不在技术领域。大型项目是一次性构思和资助的,没有有效的机制来验证实际效益。这些项目经常在交付效益方面达不到预期。如果组织习惯于跟踪其效益实现率(实际效益/预期效益),他们会在大多数情况下感到震惊。真正迭代的开发过程能够以低成本失败并节省资金。
虽然迭代开发的概念已经存在了一段时间,但在实践中,迭代在大多数情况下只进行到冲刺展示。大多数 Scrum 团队都受限于基于范围的冲刺承诺,并且预期能够按计划交付范围,而不是解决问题。为了迭代地解决问题,团队需要能够对早期版本解决方案的反馈(使用分析、用户调查、利益相关者证词)做出响应。产品模式团队由于稳定且寿命长,可以选择以真正迭代的方式解决问题。
项目团队难以轻易摆脱范围交付,原因有两个。首先,他们通常只负责“构建”解决方案,而不是运行它。因此,他们会在一两个版本中构建一个解决方案版本,将其交付给“运行”组织中的团队,然后继续下一个项目。其次,项目资金的运作方式是,资金的可用时间远短于所解决的根本问题的寿命。
示例:退休计算器
例如,在一家金融服务公司,一个项目获得了批准,用于开发一个退休计算器,该计算器可以促使潜在客户购买退休产品或改善现有计划中的缴款。该项目团队只获得构建计算器的资金,而不是解决根本问题,即提高退休产品的采用率。另一个团队会将计算器嵌入公司网站,第三个团队会建立必要的数字营销活动,以将流量引导到计算器。至少有三个不同的经理(主管)会密切跟踪工作的完成情况,而业务利益相关者则在指定构建内容后或最多参与一天的启动/头脑风暴后,保持距离。如果交付的解决方案在市场上没有达到预期,它将不得不等待另一轮资金和人员配备,才能找到改进解决方案的方法。
适应产品模式
产品模式组织如何应对上述情况?首先,我们不会考虑组建一个新团队来开发计算器。相反,它将由一个现有的、稳定的、寿命长的团队负责,该团队最接近问题领域(即产品模式团队)。在这种情况下,我们可能有哪些产品模式团队?鉴于该业务线销售大量退休产品,我们是否可以为每种退休产品配备一个产品模式团队?不幸的是,即使从客户的角度来看,为每种退休产品配备一个团队也不现实,因为业务流程和逻辑存在共性,以及现有系统的形状。另一方面,为所有退休产品配备一个产品模式团队将过于庞大和难以管理。
相反,我们将拥有多个与业务能力保持一致的产品模式团队。以下是一种根据退休产品划分长期客户旅程的方法:为公司提供入职服务、为员工注册、为退休储蓄、提取等。请注意,每个分区都是以客户为中心的,并且是一个重要的部分,数据和业务逻辑分布在多个系统中。整个客户旅程过于庞大,无法由单个团队拥有。因此,每个分区(业务能力)都存在一个产品模式团队。这与之前在线零售平台的例子有些类似,其中整体客户旅程被划分为目录、订单管理、支付和履行。
现在,任何关于退休计算器的开发工作,无论是试图改善注册还是储蓄,都将属于注册或储蓄团队的职责范围。该团队由于其通常解决的问题的性质,通常会拥有数字营销技能,并能够访问团队内的营销系统和资产。该团队现在将负责交付并证明归因于计算器的转化率提高。作为一个寿命长的团队,它将有足够的时间迭代地开发和测试解决方案的有效性,同时在空闲时间处理其他路线图项目。
就每增加百分比的转化率的成本和时间而言,产品模式设置很可能与项目模式设置相比更有利。验证任何给定组织的可靠方法是尝试使用产品模式解决几个问题,并评估结果。
知识保留
软件的真相是,无论多少文档、交接和知识转移,都无法弥补团队 100% 的人员流动。然而,这正是项目模式带来的结果。技术能力并不存在于成熟度模型、流程模板、文档、代码或基础设施中。它存在于团队中,并在团队中不断发展。
知识在稳定、寿命长的团队中积累和保留得更好,这些团队在同一个领域工作多年。这与每隔几个月就组建和解散的项目团队形成对比。难以维护的代码至少部分是由于团队没有得到维护造成的。
虽然文档很有用且必要,但在更喜欢“可工作的软件胜过全面文档”的组织中,它无法替代产品模式团队中发生的知识保留。
产品模式团队允许团队成员比典型的项目持续时间更长时间地专注于某个领域(与业务保持一致的能力)。这有助于积累知识,提高对问题和权衡的理解,并提高与业务 SME 和利益相关者互动质量。
当团队成员离开时,产品模式团队会失去知识吗?如果他们基于对整体范围的集体所有权进行工作,则不会。当团队成员分别拥有不同的功能或子领域时,知识保留就会有风险。
架构完整性
项目模式中涉及的激励措施会给团队带来压力,迫使他们为了(通常被认为是)短期功能交付而忽视中期架构完整性。由于团队不会承担这种权衡的后果,因此他们不会从长期所有权出现时出现的反馈循环中获益。众所周知,项目团队会通过不了解企业架构指南或在狭隘地追求及时交付项目时无视这些指南,而无意中导致架构债务。从中期来看,这种现象会影响系统的稳定性,并降低交付速度。以下是一些例子
- 他们最终可能会对一个即将被淘汰的系统进行低成本集成,而不是对即将推出的后继系统进行高成本集成。这会影响淘汰路线图,并增加维护具有多个执行类似功能的系统的应用程序环境的成本。
- 他们最终可能会对下游系统执行直接数据库集成,而不是在公开其功能后通过 API 集成。反过来,这会影响任何需要对下游系统进行数据库模式更改的演变。
另一方面,产品模式团队不会让其他团队不适当地与他们拥有的系统集成,因为他们更清楚地了解后果。这就是拥有“构建+运行”团队拥有系统而不是项目模式下运行团队拥有系统的优势。
代码和系统的所有权
团队级别的代码和系统所有权极大地提高了团队以构思-构建-运行模式运作的能力。所有权允许团队更快、更可控地演化系统。但是集体所有权的理想状态呢?在团队内部追求集体所有权是件好事,因为个人所有权的替代方案是有问题的。然而,在团队之间,明确的拥有权划分可以实现负责任的自主权。
一些最先进的技术公司使用内部开源模型。任何团队中的任何人都可以通过向保管人(类似于开源项目中的核心提交者团队)团队发送拉取请求,来提议对几乎任何代码区域进行更改。
虽然这种模型可以与团队级别的所有权共存,但它往往会产生一种默认预期,即依赖团队会自行服务他们需要的更改。这是开源项目中的常见预期(“发现了一个错误?太好了。请提交一个修复程序。”),但在大多数主流企业数字/工程/IT 部门中是不现实的。一方面,很少有人拥有有效更改不同系统的领域知识。此外,它要求所有代码都以可自助服务级别的文档、构建(即简单签出和构建)和测试准备状态进行维护,这对大多数组织来说是一个很高的门槛。这是内部开源计划在大多数尝试过它的主流企业中未能起飞的原因之一。对于这些组织来说,务实的做法是将默认预期不是自助服务,而是协商依赖。任何更改都必须默认由拥有团队同意、优先排序和交付。
团队动力和动态
团队需要时间才能有效地作为一个单元协同工作。塔克曼的团队发展理论断言,团队在进入执行阶段之前,会经历一系列次优阶段(形成、冲突、规范)。项目模式的人员配备存在解散团队的风险,而这些团队恰好进入规范或执行阶段。产品模式团队由于稳定且寿命长,可以从长期的执行阶段中获益。
研究表明,自主权、精通、目标和归属感是关键的内在激励因素。产品模式团队往往比典型的范围交付项目团队拥有更大的自主权和目标。因此,引入产品模式团队通常会受到员工的欢迎,即使管理层需要一段时间才能适应新的常态。
流动和迭代的经济效益
在产品开发中,我们最大的浪费不是非生产力的工程师,而是闲置在流程队列中的工作产品。
-- 唐纳德·G·莱纳森
到目前为止的论点可能听起来与传统的 IT 智慧相悖。但自智能手机进入市场以来,商业环境发生了巨大变化。虽然将 IT/工程视为成本中心从来都不是明智之举,但现在是不可辩护的。将 IT 管理的主要重点放在成本效益上,从来都没有比现在更不利。仅仅在缓慢的后端 IT 之上创建一个高速的“数字”前端组织是不够的——双模/双速 IT 是基于一个错误的前提,其实施者已经开始承认这一点。
传统的 IT 智慧在几个方面已经过时。其中一个方面是将 IT 团队组织起来以实现规模经济,从而最大限度地利用 IT 专家。在某种程度上,基于项目的运营模式反映了这种规范,一方面是使用临时变更团队,另一方面是使用共享服务进行设计、测试、部署等。另一方面,流程和迭代的经济效益对于响应能力的目标来说更为重要。
规模经济是指随着处理规模的扩大,单位处理成本降低。另一方面,流程经济是指随着处理流程的改进,单位处理时间(一批次大小为一的端到端循环时间 - 单件流)降低。由大量共享服务支持的仅构建项目团队有助于实现规模经济,而构思-构建-运行产品模式团队有助于实现流程经济。
类似地,迭代经济是指随着迭代能力的提高,实现商业效益所需的努力减少。仅构建项目团队由于存在太多交接,难以有效迭代。此外,它们的寿命太短,无法进行持续的基于真实反馈的迭代。产品模式团队在设计上不会遇到这些缺点。
产品模式运作的挑战
人员利用率
一个常见的担忧是:“当产品模式团队没有工作时会发生什么?” 如果团队负责一个足够大的领域,例如目录或履行,这种情况永远不会发生。此外,团队规模会定期(例如每年一次)进行审查,以适应不断变化的相对优先级。一些地方采用核心加灵活的模式,即由核心员工团队和灵活的承包商补充。但是,如果某个业务能力领域没有一个健壮或足够重要的路线图,它将(连同核心团队)被合并到相邻的能力中,直到下次审查。
有时,潜在的问题是:“如果我们(PMO 或等效组织)没有优先考虑某个团队工作领域中的任何事情会怎样?” 答案是,产品模式团队应该是一个赋能的、半自治的单元,因此不完全依赖于外部的优先级。只有跨领域项目才会在外部优先考虑。对于路线图工作,团队级别的产品负责人有权与业务利益相关者协商优先级。一个经验法则是,路线图工作应占三分之二,项目工作不超过三分之一。因此,在产品模式下,投资组合管理发生了根本性变化。
跨职能团队中不同角色的利用率如何?当没有足够的工作让所有不同角色都忙碌时会发生什么? 嗯,人们会承担与他们技能相关的额外工作,例如,业务分析师可能会进行探索性测试,质量保证人员可能会帮助改进文档等等。在开始时,他们可能需要向其他人学习以获得最初的技能水平,但很快他们就会从专家转变为通用专家。
在谈到利用率时,重要的是要注意,优化利用率不利于缩短端到端循环时间。你不会通过提高高速公路的利用率(即增加车辆数量)来改善交通流量。过度关注利用率是“IT 作为成本中心”思维方式的遗留产物。对于数字业务来说,这种思维方式已经过时了。
孤立性
稳定、长寿的团队是否会造成封闭的态度和普遍的停滞? 这是一个风险,但通常,技术团队中总有一些人员流动,这会带来一些新思想。此外,许多组织赞助实践社区——与特定能力(例如客户体验、A/B 测试等)相关的非正式内部网络——将来自不同团队的人员聚集在一起。
新的孤岛
在项目模式下,我们遇到了诸如产品管理、架构、设计、开发、测试、运营和支持之类的孤岛。在产品模式下,我们是否会最终形成新的、与业务能力相关的孤岛,例如目录、订单管理、支付和履行? 也许会,但它们远不如活动导向的孤岛那么糟糕。产品模式团队是结果导向的,最坏的结果可能是形成仍然朝着业务目标努力的孤岛。与业务能力相关的孤岛不如与产品开发价值流阶段相关的孤岛那么糟糕。
也就是说,我们可以通过沿着业务相关的能力边界(由服务体验定义,例如“问题到解决”或业务价值流,例如“订单到现金”)设置产品模式团队来降低形成新孤岛的风险。如果这对于单个团队来说太大了,那么我们将将其细分为多个团队(部落中的小队,以 Spotify 推广的命名方案为例),但尝试将它们集中在一起,并任命服务体验负责人或业务价值流负责人与细分级别的产品负责人合作。
作为一项对策,对于跨越多个产品模式团队的项目,建议任命跨孤岛、优先级协商、依赖管理的解决方案负责人,他们与产品负责人和业务利益相关者合作。另一个好的做法是,在人们工作一段时间后(例如 18 到 24 个月)提供更换团队的选择。
最终,产品模式中的打破孤岛是为了确保一致性以及自主性。旧的模式通过牺牲自主性来实现一致性。相反,我们使用一致性图等技术来兼顾两全其美。
其他注意事项
到目前为止,我们已经从优势和挑战的角度审视了产品模式。本节将讨论一些其他常见的考虑因素。
分层团队
前面描述的在线零售示例建议使用产品模式团队,例如目录、订单管理、结账和履行。退休产品示例建议使用产品模式团队,例如入职、注册、储蓄和提取。这引出了一个问题,即这些团队是否对企业应用程序堆栈负有端到端的责任,即从面向市场的前端系统一直到支持后台功能的后端系统(下图中的第 3 层和第 4 层)。答案是“并非总是如此”,原因如下。
图 1:在线零售中分层产品模式团队的简化示例。
尽管端到端责任有助于实现结果导向,但在系统结构的情况下,这通常是不现实的。例如,在线零售平台通常至少有一个网络应用程序和一个移动应用程序作为客户店面,一个呼叫中心应用程序作为支持前端,以及一个商店管理应用程序作为商店经理的另一个前端。通常,每个前端系统在其对底层能力(例如目录、订单管理、结账和履行)的依赖关系方面都有自己的足迹。通常,对于端到端目录(或任何其他能力)团队来说,没有明确的前端系统边界。例如,如果商店管理应用程序仅依赖于单个第 3 层能力(例如目录),则可能可以避免第 4 层商店管理应用程序团队。所示的图片假设商店管理依赖于不仅仅是目录的更多能力。因此,我们采用图中所示的第 3 层和第 4 层中的单独产品模式团队。更高层级是较低层级的消费者。
一个新的趋势是将前端系统分解为微前端,这些微前端与第 3 层能力保持一致。这使得跨越第 3 层和第 4 层的端到端团队更容易实现。但大多数已经迁移到或正在迁移到微服务的企业尚未计划立即迁移到微前端。
有时,支持多个第 2B 能力的遗留系统的存在可能会导致第 3 层团队也依赖于具有相应技能的第 2B 团队。理论上,可以将第 2B 人员嵌入到相应的第 3 层团队中。然而,在实践中,这可能会受到第 2B 能力不足或共享配置管理、测试环境等实际挑战的限制。
第 1 层和第 2A 层是持续交付、DevOps 和精益产品开发的推动者。它们更适用于跨业务领域。例如,管道基础设施团队负责维护 Jenkins/GoCD/TeamCity... 基础设施。他们不负责处理更高层级团队的构建中断。因此,更高层级可能对较低层级存在一个或多个依赖关系。无论层级如何,每个团队都是产品模式的,因为它们是稳定的、长寿的、跨职能的、结果导向的、构思-构建-运行团队。较低层级团队将更高层级团队视为其(内部)客户,以解决问题(而不是交付范围)的方式进行合作。
小队和部落
通常,像目录这样的单个领域对于单个团队来说可能太大,将其分解为多个产品模式团队是可以的。在这种情况下,目录部落有多个小队,每个小队都有自己的结果、路线图和托管系统。这种结构还允许在部落内部(部落内部)共享在每个小队中可能难以嵌入的角色。请注意,小队应该比典型的项目团队寿命长得多,尽管可能会故意要求小队成员在部落内轮换,例如每 18 到 24 个月轮换一次,以获得更广泛的知识并避免成为单点故障。
但产品在哪里?
重申一下开头提到的观点,不必构建产品才能以产品模式运作。也就是说,如果我们超越了产品的传统定义,即在市场上销售的东西,那么就可以将目录之类的东西视为产品。一旦像目录这样的能力被包含在一个由团队拥有的系统集中,并通过内部应用程序或文档齐全的 API 公开,它就会成为一个可重用且自助式的、类似产品的功能,为内部客户提供服务。同样适用于较低层级产品模式团队。
结论
总之,为了提高响应能力和更高的效益实现率,“产品模式”比项目更有效的工作方式。
对于主流企业数字/产品/工程/IT 部门来说,这可能感觉像是彻底的变革,在某种程度上确实如此。然而,它之所以感觉像是彻底的变革,是因为我们已经习惯了“项目”的方式。亚马逊 CTO Werner Vogels 在描述了他们在 2006 年采用的一种类似方法
在亚马逊使用的细粒度服务方法中,服务不仅代表软件结构,还代表组织结构。这些服务具有强大的所有权模型,与小型团队规模相结合,旨在使创新变得非常容易。从某种意义上说,你可以将这些服务视为大型公司内部的小型初创公司。这些服务都需要高度关注其客户是谁,无论他们是外部客户还是内部客户。
-- Werner Vogels
为了迁移到产品模式,最好采用迭代和快速失败的方法。从一两个试点项目开始,学习和适应。尽管对于那些习惯于批准具有详细路线图的大型变更计划的人来说,这可能感觉不合理,但避免在验证实际(而非预期)效益之前过度投资是精益敏捷思维方式的本质。
致谢
衷心感谢所有审阅者,包括 Martin Fowler、Evan Bottcher、Duncan Stephens、Brandon Byars 和 Kevin Yeung。特别感谢 Martin 在编辑和出版方面的帮助和指导。
常见问题
如何在产品模式中解决安全和合规性问题?
就其本身而言,产品模式不需要与项目相比采用截然不同的方法来解决这些问题。也就是说,产品模式不鼓励将这些问题完全分离到专门的共享服务中。通过内部咨询方法,安全和合规性专家使小队和部落能够在这些领域获得一定程度的能力,同时继续提供全面的审查/审计/控制功能。尽管产品模式没有直接要求,但响应能力的要求促使人们转向自动化审计。请参阅此幻灯片以获取详细信息。
为了符合双模/双速 IT,我们不能以产品模式运行数字组织,而以项目模式运行 IT 组织吗?
双模/双速处方基于错误的前提,即你可以以敏捷的方式构建软件,也可以以可靠的方式构建软件,而不能两者兼得。它忽略了敏捷工程技术通过可靠性来实现速度的要点。
为什么在平台时代谈论“产品胜过项目”?
同样,本文不是关于构建产品。它是关于组织和团队以产品模式而不是项目模式工作。通过这种工作方式,他们经常创建平台(内部或外部),在这种情况下,对企业来说是有意义的。例如,分层团队的说明中,第三层开发了一个内部业务 API 平台,用于在第四层进行跨渠道消费。
我们不应该以客户为中心进行组织,而不是以产品/项目为中心进行组织吗?
通过建立团队来解决问题,而不仅仅是交付范围,产品模式比项目能够实现更高的客户/市场/业务中心化。
产品模式如何与外包团队协作?
在产品模式下,没有项目需要外包给供应商。相反,供应商可能会被要求提供一个稳定的、长期的、从构思到构建再到运行的团队,其中一些关键角色由内部人才担任。
这与功能团队相比如何?
功能团队通常不是从构思到构建再到运行的团队。它们只是构建团队。它们一个接一个地构建功能,在构建过程中与其他团队的交接/依赖关系不多。这些功能可能不在业务领域相同的子区域。知识保存存在风险,因为尽管团队本身可能是长期的,但它们与业务领域区域的关联性并不强。
产品模式如何与康威定律相符?
在一定程度上,组织的沟通结构会影响系统设计,我们可能会开始看到架构边界沿着分层团队图示中描绘的线条发展/硬化,即使这些边界以前不存在。因此,在产品模式下运行可能会促进从单体企业架构向外迁移。
产品模式团队在开发完产品/应用程序后,主要进行维护,他们会做什么?
“一次构建,之后维护”是老式的做法。它会导致产品达不到预期,即投资浪费。产品模式最适合不断发展的产品/应用程序/功能/平台,在这些平台中,开发和维护并行进行,直到产品被标记为生命周期结束。也就是说,如果我们在“功能”粒度上问同样的问题,那么答案是他们会处理其他问题(通过新/增强功能/体验来解决)。
产品模式是否可以在系统所有权受大型单体系统限制的情况下工作?
单体系统可能需要由多个小队甚至部落共同拥有(用于构建和运行)。有时,可以分配临时所有权(例如,一年),如果整体工作流程表明某个小队或部落需要比其他小队或部落更多地更改单体系统。在此期间,拥有团队将服务传入的依赖项。在某些情况下,共享“运行”所有权可能存在问题,我们可能需要将一些“运行”功能分配给独立的专用运维团队,直到单体系统分解成更小的系统。
如何在产品模式下解决技术债务?如果赋权的产品负责人始终选择优先考虑功能怎么办?
产品负责人应接受技术负责人和企业架构师的建议,优先考虑技术债务工作。他们可以选择暂时推迟技术债务工作,以支持功能,但最终,他们(以及团队)负责以稳定的方式解决问题。如果技术债务得不到解决,问题必然会以某种形式重新出现。在平衡方面存在困难历史的组织可以使用决策记录为该过程带来一些严谨性。
产品模式是否需要不同的治理风格?
从项目到产品模式的转变,也意味着从范围交付团队到问题解决团队的转变。相应地,我们对价值而不是可预测性进行治理。在产品模式下,增加价值的人员与跟踪价值的人员的比例上升。强调流程而非利用率的拉式交付技术更适合产品模式。
统一的汇报层级是否意味着产品模式团队最终向业务汇报?
不一定。将部落级产品负责人视为软件产品负责人,他们与一个或多个业务产品负责人/经理(拥有损益表或向拥有损益表的人汇报)合作。软件产品负责人最终向 CTO、CPO、CDO 或 CIO 汇报。
转向产品模式中不断发展的软件开发,是否会降低软件开发成本的资本化能力?
这是一个常见的误解,答案恰恰相反。早期和持续关注业务价值,可以使更多努力被资本化,而不是传统的线性方法。例如,请参阅这篇文章。
团队是否仍然需要填写时间表?
虽然产品模式是关于为稳定的、长期的团队而不是项目提供资金,但我们可能仍然希望跟踪为解决特定问题而付出的努力。因此,时间跟踪可能仍然是必要的,但时间表不是唯一的方法。例如,可以使用敏捷项目管理工具,通过将其设置为报告故事转换时间来完成。有关详细信息,请参阅本书第 9.4 节,敏捷 IT 组织设计。
进行更改的确切步骤是什么?
这超出了本文和常见问题的范围,但在高层次上,它从获得技术和业务领域的高层管理人员的认可开始。了解到尽管有一些最初的计划和来自专家的指导,但真正的变化是以边学边做的方式进行的,这一点也很有帮助。
从构思到构建再到运行的团队是否偏离了 Google 的专用 SRE 团队模型?
是,也不是。从构思到构建再到运行的团队可以与提供按需 SRE 咨询的第二层 A 类 SRE 基础设施团队共存。Björn Rabenstein 和 Matthias Rampke 在他们的著作《寻求 SRE》中描述了他们在 SoundCloud 的经验。结论是,在规模小于 Google/Netflix 的情况下,为专用 SRE 团队配备人员以有效应对应用程序环境中各种特定于领域的警报,可能会造成成本过高。
在采用产品模式之前,我们是否需要关注 IT 效率,以避免对齐陷阱?
IT 效率是必须的,但它也是一个移动的目标。如果截至 2018 年,您仍然有幸能够按顺序进行,那么请务必这样做。另一种方法是全力以赴进行 IT 效率方面的工作,并使用产品模式进行深度优先(垂直切片)。
重大修订
2018 年 2 月 20 日:添加了第二层 B,更新了常见问题解答
2017 年 12 月 6 日:添加了常见问题解答
2017 年 11 月 27 日:第三部分:产品模式的挑战
2017 年 11 月 20 日:第二部分:产品模式的优势
2017 年 11 月 16 日:发布“什么是产品模式”作为第一部分