瓶颈 #04:成本效益

飙升的云计算和托管服务成本超过了客户增长

2023 年 8 月 17 日


Photo of Sofia Tania

塔尼亚是 Thoughtworks 的工程师和工程主管,数字扩展组的技术扩展主题专家,也是 Thoughtworks 技术咨询委员会的成员,该委员会负责准备技术雷达。作为一名技术通才,她喜欢深入研究和宏观视角——始终致力于让客户取得成功。塔尼亚领导团队从事数据产品和平台、后端 API 和基础设施平台的开发,服务于各个行业各种规模的公司。她还帮助组织制定其技术战略。

Photo of Stefania Stefansdottir

斯特凡妮娅是 Thoughtworks 的技术主管、软件架构师和顾问。她曾在多个领域工作,主要专注于交付现代数字平台、数据产品和平台,以及咨询复杂的组织和技术问题。


每个初创公司的旅程都是独一无二的,通往成功的道路从来都不是线性的,但成本是每个企业在任何时间点的叙述,尤其是在经济衰退期间。在初创公司中,围绕成本的对话在从实验获得牵引力阶段转向高速增长优化阶段时会发生变化。在前两个阶段,初创公司需要精益求精,快速行动才能实现产品与市场匹配,但在后期阶段,运营效率的重要性最终会越来越大。

将公司的思维方式转变为实现和保持成本效益非常困难。对于那些热衷于构建新事物的初创公司工程师来说,成本优化通常不是一个令人兴奋的话题。出于这些原因,成本效益通常会在初创公司旅程中的某个时刻成为瓶颈,就像技术债务的累积一样。

你是如何陷入瓶颈的?

在初创公司的早期实验阶段,当资金有限时,无论是创始人自筹资金还是种子投资支持,初创公司通常会专注于在用完资金之前获得市场牵引力。团队会选择能够快速将产品推向市场的解决方案,以便公司能够产生收入,让用户满意,并超越竞争对手。

在这些阶段,成本低效是可以接受的权衡。工程师可能会选择使用快速定制代码,而不是处理与 SaaS 提供商签订合同的麻烦。他们可能会降低不再需要的基础设施组件清理的优先级,或者不标记资源,因为组织只有 20 个人,每个人都知道所有事情。快速进入市场至关重要——毕竟,如果产品与市场匹配仍然难以捉摸,初创公司可能明天就不复存在了。

在看到产品取得了一些成功并进入快速增长阶段后,之前的这些决定可能会反过来伤害公司。随着流量激增,云计算成本飙升至超出预期水平。经理们知道公司的云计算成本很高,但他们可能难以确定原因并指导团队摆脱困境。

此时,成本开始成为业务的瓶颈。首席财务官注意到了这一点,工程团队也受到了很多审查。同时,为了准备下一轮融资,公司需要展示合理的销售成本 (COGS)。

早期的决定都没有错。在产品与市场匹配未知的情况下,创建完美可扩展且成本效益高的产品并不是正确的优先事项。此时,当成本开始成为问题时,问题是如何开始降低成本改变公司文化以维持改进的运营成本效益。这些变化将确保初创公司的持续增长。

接近扩展瓶颈的迹象

缺乏成本可见性和归因

当公司使用多个服务提供商(云计算、SaaS、开发工具等)时,这些服务的用量和成本数据存在于不同的系统中。要了解服务、产品或团队的总技术成本,需要从各种来源提取这些数据,并将成本与他们的产品或功能集关联起来。

这些成本报告(例如云计算账单报告)可能令人不知所措。整合它们并使其易于理解需要相当大的努力。如果没有适当的云基础设施标记约定,就无法将成本正确地归因于服务或团队级别的特定聚合。但是,除非启用这种级别的会计清晰度,否则团队将被迫在没有完全了解其决定的成本影响的情况下进行操作。

成本不是工程解决方案的考虑因素

工程师在做出工程决策时会考虑各种因素——功能性和非功能性需求(性能、可扩展性和安全性等)。然而,成本并不总是被考虑在内。如上所述,部分原因是开发团队通常缺乏对成本的可见性。在某些情况下,虽然他们对技术领域中自己部分的成本有合理的可见性,但成本可能不被视为关键考虑因素,或者被视为其他团队的责任。

这个问题的迹象可能是设计文档/RFC/ADR 中缺乏对成本的考虑,或者工程经理是否能够展示其产品的成本将如何随着规模而变化。

自建的非差异化功能

公司有时会维护自定义工具,这些工具在功能上与第三方工具(无论是开源的还是商业的)有很大的重叠。这可能是因为自定义工具早于这些第三方解决方案——例如,在 Kubernetes 出现之前,自定义容器编排工具。它也可能源于早期实现成熟外部工具提供的部分功能的捷径。随着时间的推移,对早期捷径进行增量构建的个别决定导致团队越过可能导致使用外部工具的临界点。

从长远来看,这种自建系统的总拥有成本可能会变得过高。自建系统通常非常容易启动,但很难掌握。

多个工具中的重叠功能/工具爆炸

拥有多个具有相同目的的工具——或者至少是目的重叠的工具,例如多个 CI/CD 管道工具或 API 可观察性工具,自然会造成成本低效。这通常发生在没有铺好的道路的情况下,每个团队都在自主选择其技术栈,而不是选择公司已经获得许可或首选的工具。

托管服务的合同结构效率低下

为非差异化功能(如短信/电子邮件、可观察性、支付或授权)选择托管服务可以极大地支持初创公司快速将产品推向市场并控制运营复杂性的追求。

托管服务提供商通常会为其服务提供引人注目的——便宜或免费的——入门计划。然而,这些定价模式可能会比预期更快地变得昂贵。除了便宜的入门计划外,最初协商的定价模式可能不适合初创公司的当前或预计使用情况。对于拥有少量客户和工程师的小型组织来说,有效的东西在增长到 5 倍或 10 倍时可能会变得过于昂贵。随着公司实现扩展里程碑,托管服务每用户(无论是员工还是客户)的成本不断上升的趋势是效率不断下降的迹象。

无法实现规模经济

在任何架构中,成本都与请求数量、交易数量、使用产品的用户数量或它们的组合相关。随着产品获得市场牵引力和成熟,公司希望获得规模经济,随着用户群和流量的增长,降低为每个用户或请求提供服务的平均成本(单位成本)。如果公司难以实现规模经济,其单位成本反而会上升。

图 1:未实现规模经济:单位成本上升

注意:在本示例图中,隐含着随着时间的推移,有更多单位(请求、交易、用户)。

如何摆脱瓶颈?

当我们优化规模化企业时,我们的团队通常会遇到这种情况,即公司通过监控上述迹象或显而易见(计划预算完全超支)来注意到瓶颈。这会引发一项提高成本效益的举措。我们的团队喜欢围绕两个阶段来组织这项举措,即减少阶段和维持阶段。

减少阶段侧重于短期收益——“止血”。为此,我们需要创建一个多学科的成本优化团队。可能有一些关于优化可能性的想法,但有必要深入挖掘以真正了解。在初步机会分析之后,团队定义了方法,根据影响和努力进行优先排序,然后进行优化。

在减少阶段取得短期收益之后,正确执行的维持阶段对于保持优化的成本水平至关重要,这样初创公司将来就不会再遇到这个问题。为了支持这一点,公司的运营模式和实践会进行调整,以提高对成本的责任和所有权,以便产品和平台团队拥有必要的工具和信息来继续优化。

为了说明减少和维持阶段的方法,我们将描述最近的一次成本优化工作。

案例研究:Databricks 成本优化

我们的一位客户联系我们,因为他们的成本增长超过了预期。他们已经确定 Databricks 成本是他们最大的成本驱动因素之一,并要求我们帮助优化其数据基础设施的成本。紧迫性很高——不断上升的成本开始侵蚀他们的其他预算类别,并且还在不断增长。

经过初步分析,我们迅速组建了成本优化团队,并赋予他们将成本降低约 25%(相对于选定的基线)的目标。

“减少”阶段

以 Databricks 为重点领域,我们列举了所有可能影响和管理成本的方法。从高层次上讲,Databricks 成本包括支付给云提供商的虚拟机成本(用于底层计算能力)以及支付给 Databricks 的成本(Databricks 单位成本/DBU)。

每个成本类别都有自己的杠杆——例如,DBU 成本会根据集群类型(临时作业集群更便宜)、购买承诺(Databricks 承诺单位/DBCUs)或优化在其上运行的工作负载的运行时间而发生变化。

由于我们的任务是“昨天节省成本”,因此我们开始寻找快速获胜的方法。我们根据这些杠杆对成本的潜在影响及其努力程度对其进行了优先排序。由于数据管道中的转换逻辑由各自的产品团队拥有,而我们的工作组对它们没有很好的了解,因此基础设施级别的更改(例如集群大小调整、在适当的情况下使用临时集群以及尝试使用Photon 运行时)与转换逻辑的优化相比,努力估计更低。

我们首先着手解决一些容易见效的问题,与相应的产品团队合作。在推进过程中,我们每两周监控一次行动的成本影响,以查看我们的成本影响预测是否成立,或者是否需要调整优先级。

节省的成本逐渐累积。几个月后,我们超过了每月节省成本约 25% 的目标,以选定的基准为参考。

“维持”阶段

然而,我们不希望在我们把注意力转向其他尚未优化的领域时,我们在优化过的领域中节省的成本会逐渐回升。我们采取的战术措施降低了成本,但要维持较低的支出需要持续关注,因为存在一个真正的风险——每个工程师都是 Databricks 工作空间管理员,能够创建他们选择的任何配置的集群,并且团队没有监控他们的工作空间成本。他们也没有对这些成本负责。

为了解决这个问题,我们着手做两件事:收紧访问控制,提高成本意识和问责制。

为了收紧访问控制,我们将管理访问权限限制在需要的人员。我们还使用 Databricks 集群策略来限制工程师可以选择的集群配置选项——我们希望在允许工程师更改他们的集群和将他们的选择限制在合理的选项集中之间取得平衡。这使我们能够最大限度地减少过度配置并控制成本。

为了提高成本意识和问责制,我们配置了预算警报,如果某个月的成本超过了该工作空间的预定阈值,则会向相应工作空间的所有者发送警报。

这两个阶段对于实现和维持我们的目标至关重要。我们在减少阶段实现的节省在几个月内保持稳定,除了完全新的工作负载。

减少阶段

在工程师急于在他们自己的团队中单独优化成本之前,最好组建一个跨职能团队来执行分析并领导成本优化工作的执行。通常,初创公司的成本效率将落入平台工程团队的责任范围,因为他们将是第一个注意到问题的人——但这将需要来自许多领域的参与。我们建议组建一个 **成本优化团队**,由具有基础设施技能的技术人员和了解后端和数据系统的技术人员组成。他们需要协调受影响团队之间的工作并创建报告,因此技术项目经理将很有价值。

了解主要成本驱动因素

重要的是从确定主要成本驱动因素开始。首先,成本优化团队应收集相关的发票——这些发票可能来自云提供商和 SaaS 提供商。使用分析工具对成本进行分类非常有用,无论是电子表格、BI 工具还是 Jupyter 笔记本。通过跨不同维度进行聚合来分析成本可以产生独特的见解,这有助于识别和优先考虑工作,以实现最大的影响。例如

**应用程序/系统**:某些应用程序/系统可能比其他应用程序/系统贡献更多成本。标签有助于将成本与不同的系统相关联,并有助于识别哪些团队可能参与工作。

**计算 vs 存储 vs 网络**:一般来说:计算成本往往高于存储成本;网络传输成本有时可能是意外的高成本项目。这有助于确定托管策略或架构更改是否可能有所帮助。

**预生产 vs 生产(环境)**:预生产环境的成本应该远低于生产环境的成本。但是,预生产环境往往具有更宽松的访问控制,因此它们比预期成本更高并不罕见。这可能表明非生产环境中积累了太多数据,甚至缺乏对临时或 PoC 基础设施的清理。

**运营 vs 分析**:虽然没有关于公司运营系统成本与分析系统成本相比应该如何的经验法则,但工程领导层应该了解公司运营与分析环境的规模和价值,可以将其与实际支出进行比较,以确定适当的比率。

**服务/能力提供商**:在项目管理、产品路线图、可观察性、事件管理和开发工具方面,工程领导者经常对使用的工具订阅和许可证数量以及它们的成本感到惊讶。这有助于识别整合的机会,这可能还会带来更好的谈判优势和更低的成本。

对驱动因素和相关成本的清单的结果应为成本优化团队提供一个更好的了解,即哪种类型的成本最高以及公司的架构如何影响它们。当考虑历史数据(例如过去 3-6 个月的成本)以将成本变化与特定产品或技术决策相关联时,此练习在识别根本原因方面更加有效。

确定主要成本驱动因素的成本节约杠杆

在确定成本、趋势和驱动因素之后,下一个问题是——我们可以使用哪些杠杆来降低成本?下面介绍了一些更常见的方法。当然,下面的列表远非详尽,正确的杠杆通常取决于具体情况。

**调整规模**:调整规模是指更改工作负载的资源配置,使其更接近其利用率。

工程师通常会进行估计,以查看他们需要什么资源配置才能完成工作负载。随着工作负载的不断发展,很少会进行初始练习的后续工作,以查看初始假设是否正确或仍然适用,这可能会导致资源未充分利用。

为了调整 VM 或容器化工作负载的规模,我们将 CPU、内存、磁盘等的利用率与已配置的利用率进行比较。在更高的抽象级别,Azure Synapse 和 DynamoDB 等托管服务有自己的已配置基础设施单位和自己的监控工具,这些工具可以突出显示任何资源未充分利用的情况。一些工具甚至可以推荐给定工作负载的最佳资源配置。

有一些方法可以通过更改资源配置来节省成本,而无需严格减少资源分配。云提供商有多种实例类型,通常,不止一种实例类型可以满足任何特定的资源需求,但价格不同。例如,在 AWS 中,新版本通常更便宜,t3.small 比 t2.small 便宜约 10%。或者对于 Azure,即使纸面上的规格看起来更高,E 系列也比 D 系列便宜——我们帮助客户通过切换到 E 系列节省了 30% 的 VM 成本。

最后一点建议:在调整特定工作负载的规模时,成本优化团队应注意任何预购承诺。一些预购承诺(如预留实例)与特定实例类型或系列相关联,因此,虽然更改特定工作负载的实例类型可以节省该特定工作负载的成本,但可能会导致预留实例承诺的一部分未被使用或浪费。

**使用短暂基础设施**:通常,计算资源的运行时间比实际需要的时间更长。例如,由在特定时区工作的科学家使用的交互式数据分析集群可能全天候运行,即使它们在科学家工作时间之外没有使用。同样,我们已经看到开发环境全天候运行,而使用它们的工程师只在工作时间内使用它们。

许多托管服务提供自动终止或无服务器计算选项,确保您只为实际使用的计算时间付费——所有这些都是需要牢记的有用杠杆。对于其他更基础设施级别的资源(如 VM 和磁盘),您可以根据您的设置条件(例如 X 分钟的空闲时间)自动关闭或清理资源。

工程团队可能会考虑迁移到 FaaS 作为进一步采用短暂计算的一种方式。这需要仔细考虑,因为它是一项需要进行重大架构更改和成熟的开发人员体验平台的重大工作。我们已经看到一些公司在进入 FaaS 时引入了许多不必要的复杂性(极端情况:lambda 弹球)。

**整合现货实例**:现货实例的单位成本可能比按需实例低至 70%。当然,缺点是云提供商可以随时收回现货实例,这会导致运行在它们上的工作负载中断。因此,云提供商通常建议将现货实例用于更容易从中断中恢复的工作负载,例如无状态 Web 服务、CI/CD 工作负载和临时分析集群。

即使对于上述工作负载类型,从中断中恢复也需要时间。如果特定工作负载对时间敏感,现货实例可能不是最佳选择。相反,现货实例可能非常适合预生产环境,在这些环境中,时间敏感性不太严格。

**利用基于承诺的定价**:当初创公司达到规模并对使用模式有明确的了解时,我们建议团队将基于承诺的定价纳入其合同。按需价格通常高于通过预购承诺获得的价格。但是,即使对于规模扩大,按需定价对于使用模式尚未稳定的更具实验性的产品和服务仍然有用。

基于承诺的定价有多种类型。与按需价格相比,它们都有折扣,但具有不同的特征。对于云基础设施,预留实例通常是与特定实例类型或系列相关的使用承诺。储蓄计划是与每小时使用特定资源(例如计算)单位相关的使用承诺。两者都提供从 1 年到 3 年不等的承诺期限。大多数托管服务也有自己的基于承诺的定价版本。

**架构设计**:随着微服务的流行,公司正在创建更细粒度的架构方法。我们经常遇到在中期数字原生公司中遇到 60 个服务的情况。

但是,没有考虑消费者而设计的 API 会向消费者发送大型有效负载,即使他们只需要该数据的一小部分。此外,一些服务,而不是能够独立执行某些任务,而是形成一个分布式单体,需要多次调用其他服务才能完成其任务。如这些场景所示,不适当的域边界或过于复杂的架构可能会表现为高网络成本。

重构您的架构或微服务设计以改进系统之间的域边界将是一个大型项目,但将在许多方面产生巨大的长期影响,而不仅仅是降低成本。对于尚未准备开始此类旅程的组织,而是正在寻找一种战术方法来应对这些架构问题带来的成本影响,可以采用战略性缓存来最大限度地减少聊天。

**执行数据归档和保留策略**:任何存储系统中的热层都是纯存储中最昂贵的层。对于不太常用的数据,请考虑将它们放入冷层、冷层或归档层以降低成本。

重要的是首先审查访问模式。我们的一支团队遇到一个项目,该项目将大量数据存储在冷层中,但仍然面临着不断上升的存储成本。项目团队没有意识到他们放入冷层的数据经常被访问,导致成本增加。

**整合重复的工具**:在列举服务提供商方面的成本驱动因素时,成本优化团队可能会意识到公司正在为同一类别(例如可观察性)中的多个工具付费,甚至想知道是否有任何团队真正使用特定工具。消除未使用的资源/工具并整合类别中的重复工具无疑是另一种节省成本的杠杆。

根据整合后的使用量,可以通过获得更好的定价层级,甚至利用增加的谈判优势来获得额外的节省。

按努力和影响优先排序

任何潜在的节省成本的机会都有两个重要特征:其潜在影响(潜在节省的规模)以及实现它们所需的努力程度。

如果公司需要快速节省成本,从成本为 50,000 美元的类别中节省 10% 自然比从成本为 5,000 美元的类别中节省 10% 更好。

然而,不同的成本节约机会需要不同程度的努力才能实现。一些机会需要更改代码或架构,这比配置更改(例如调整大小或利用基于承诺的定价)需要更多努力。为了更好地了解所需的努力,成本优化团队需要从相关团队获得输入。

图 2:客户优先级排序练习的示例输出(对不同公司进行的相同练习可能会产生不同的结果)

在本练习结束时,成本优化团队应该有一份机会清单,包括潜在的成本节约、实现这些机会所需的努力以及与实施前置时间相关的延迟成本(低/高)。对于更复杂的机会,需要指定适当的财务分析,如后文所述。然后,成本优化团队将与支持该计划的领导者一起审查,优先考虑要采取的行动,并提出执行所需的任何资源请求。

成本优化团队应该理想地与受影响的产品和平台团队合作执行,在向他们提供足够关于所需行动和理由(潜在影响和优先级)的背景信息后。但是,如果需要,成本优化团队可以提供能力或指导。随着执行的进行,团队应该根据从已实现的节省与预计节省以及业务优先级中获得的经验教训重新确定优先级。

维持阶段

当成本降低活动已经产生了节省时,庆祝并宣告结束可能会很诱人。然而,根据我们的经验,如果团队不采取措施在组织中维持降低的成本水平,成本总是存在固有的回升风险。一个将成本意识和优化嵌入到公司运营模式中的维持阶段将有助于降低成本。

将成本管理的责任分散

对于减少阶段,我们建议组建一个成本优化团队,与相关团队合作执行优先的成本节约机会。为了维持优化的成本水平,成本管理的责任需要从成本优化团队转移到各自的团队。

我们合作过的大多数初创公司都采用了产品团队模型(包括平台工程产品团队),这意味着他们中的许多团队都清楚地了解自己拥有的系统。产品团队拥有运行其产品所需的自定义软件,以及其功能所需的任何独特的第三方系统。平台团队拥有与其提供的功能相关的系统。这可能是 CI/CD 或可观察性等技术能力,也可能是一种可重用的业务能力,例如支付。

然而,即使在组织良好的初创公司中,一些系统也会随着时间的推移而成为孤儿,有时是悄无声息地,通过组织重组和自然减员。

为了验证团队对其所有权边界有多清晰,初创公司可以审查他们拥有的系统和现有的所有权分配。在许多组织中,此信息将作为一项持久资产维护,例如服务目录,应与团队一起审查以验证其有效性。

没有此类服务目录的组织可以从对技术环境进行快照开始(例如,使用C4 模型列出或可视化系统),并与团队合作将每个组件标记为其各自的所有者。从长远来看,最好将其转变为一个活生生的工件,例如服务目录(即使是轻量级的——文档而不是完整的门户网站)。

理想情况下,通过该过程,任何已识别的孤儿系统都将被分配给所有者。实际上,根据业务关键性、成本影响或其他维度进行优先级排序是合理的。

然后,团队领导者(工程经理、技术主管、产品主管)需要对他们团队拥有的系统的成本负责。这最初可能是一种期望,即他们以合理的节奏审查成本——这可以融入他们现有的仪式(每月同步、季度审查等)。最终,成本指标应嵌入到这些团队的 KPI 中。

将成本放在首位可以增强组织能力,并帮助传递这样一种信息,即每个人都应该考虑其决策的成本影响,并且管理人员对此负责,就像我们考虑安全性和质量一样。

然而,就像安全性和质量一样,公司需要意识到成本考虑的二阶效应。团队不应该过度节俭;他们可以咨询相关的公司领导者以帮助他们做出关于成本的决策。通常,在初创公司中,如果这意味着更快的上市时间,尤其是在实验性功能方面,团队承担会产生额外成本的技术债务是有意义的。诀窍在于要有纪律,能够发现成本何时呈上升趋势并进行纠正。

虽然将责任下放到团队层面至关重要,但一些成本管理行动,例如协商批量购买承诺和优化整体技术组合,只能通过考虑更广泛的组织背景来最佳地完成。因此,成本责任也需要在团队层面,在产品组层面承担。

使成本可见

为了支持所需的联邦责任级别,运行系统的成本需要报告并归因于拥有组织级别(团队、产品组)。实现此目标的方式取决于服务类型。例如,云基础设施或服务可以通过标签层次结构归因于其所有者,而运行在共享 Kubernetes 集群上的工作负载可以通过标签、命名空间或服务名称归因回来(Kubernetes 特定的成本监控工具允许根据标签、命名空间和服务名称将共享 Kubernetes 集群的成本分解到团队)。

虽然很难将每个服务或基础设施组件完美地归因于产品或团队,但保持报告的可发现性、可理解性和可操作性至关重要,使工程师能够了解其技术决策的成本影响,并使领导者能够了解是否需要进行任何纠正。

这些报告的详细程度很重要。当受众更接近团队级别时,提供更细粒度的數據并更频繁地更新报告会有所帮助。团队在日常开发工作中做出影响成本的决策,因此每两周或每月提供一次报告,与季度报告相比,可以更快地让他们了解改变方向的指示。

对于团队级别以上的领导者,重点是检测更大的趋势并了解是否需要对合同结构或技术策略进行任何更改。报告可能会跨不同维度汇总成本,例如在了解主要成本驱动因素中涵盖的维度,但报告通常不需要像团队级别报告那样频繁更新。

让团队更容易做正确的事

成本管理中经常被忽视的一部分是让人们更容易做到预期的事情,即对他们负责的技术环境的一部分的成本负责。与其创建一个强硬的治理流程,不如寻求实现期望的行为和结果。如果最简单的方法是最具成本效益的,技术人员自然会遵循最佳实践。

为了创造一个容易实现预期结果的环境,我们可以使用推动。理查德·塞勒在他的书《助推》中详细讨论了这个话题。他使用的一个例子是无限自助计算的良好类比:“无托盘自助餐厅。自助餐厅经理一直对减少食物浪费很感兴趣。看到人们很容易在托盘上装满额外的食物,而这些食物通常会吃不完,以及额外的餐巾纸,这些餐巾纸通常不会使用,纽约阿尔弗雷德大学的好奇的经理和学生在两天内测试了无托盘政策。当没有提供托盘时,食物和饮料的浪费减少了 30% 到 50%!”

Backstage 开发者门户网站是一个很好的工具示例,它可以推动人们做正确的事情。使用模板可以推动工程师走上黄金之路(Spotify 的铺好的道路版本)。它还具有关于文档的记分卡,以推动工程师添加属性,使其更有用和可读。

以下是一些将推动应用于提高成本效率的示例

期望的行为

推动

团队在做出工程决策时会考虑成本

使团队级别的成本指标易于查找和理解。例如,一位客户定期向其团队发送有关成本趋势和异常值的报告。一个团队通过调查报告中的一个异常值,每月节省了大约 10 万美元。

将成本纳入设计文档模板/架构决策记录模板,甚至故事卡片中的标准考虑事项列表中。我们的一支基础设施团队在其卡片上创建了一个特殊的必填 Jira 标签,该标签指示工作的估计成本影响(以 T 恤尺寸表示 - S/M/L)。

团队一致地标记(拼写一致,无错字)并保持标签最新

在创建基础设施时,为团队提供一些选择,而不是将标签值保持为自由格式。

如果团队发生变化或产品易手,使他们能够轻松更改标签,方法是自动更改标签。

定期向团队发送提醒,要求他们审查和更新标签,甚至以定期节奏与团队进行快速审查,并从他们那里获得反馈。

添加 linter 规则,确保标签遵循命名约定。

团队不选择高成本的 VM

通过为他们提供一些合理的默认实例类型来缩小他们的选择范围。例如,在上面的 Databricks 案例研究中,我们使用 Databricks 集群策略来限制工程师可以选择实例类型。如果使用 VM 进行开发或数据科学家工作,请使用一个易于设置的默认机器。

向他们展示其更改的成本影响,例如使用显示 Terraform 代码 PR 成本影响的工具

团队使用与公司已签订合同的工具

利用团队可以轻松访问的服务或基础设施模板(铺好的道路)。

创建一个公司使用的技术堆栈的集中式目录,例如使用您自己的自定义版本的 Tech Radar

审查和管理技术组合

组织的技术组合包括其内部系统以及第三方工具、语言和框架。组合中的项目越多,组织的责任范围就越大,导致更高的成本,包括财务投资和认知负担。虽然技术组合中的每个项目最初都是出于特定原因引入的,但这些原因可能会随着时间的推移而失效或变得无关紧要。因此,以减少碎片化的方式管理技术组合有助于降低成本。

管理初创公司技术组合的第一步是清点其拥有的系统以及每个系统的功能。通过这样做,更容易识别重叠的功能并识别冗余的系统或工具。例如,组合中的多个系统可能具有自己的 CMS 实现,或者初创公司可能会发现,在不同的团队中,有多种工具用于提供 CI/CD 功能。

一旦充分了解了组合的最新状态,我们的团队经常依靠几个工具来帮助优化组合。

一个沃德利地图可以让工程领导者可视化支持业务的技术能力,它们对用户/客户的可见度以及它们所处的演化阶段(无论是实验性的,还是相当成熟但对业务定制/特定的,还是商品)。这将开启关于这些能力对业务的差异化程度以及是否需要进行任何投资转变的对话。沃德利地图帮助团队审查其产品组合,并识别出即使随着时间的推移,更低成本的“购买”选项变得更具吸引力,但仍然在内部开发和维护的能力。

我们喜欢的另一个工具是用于语言和第三方工具和平台的技术雷达。

技术雷达本身是 Thoughtworks 的行业出版物,但该模型已被多个组织(如Zalando)用于传达语言和工具的综合景观。通过向组织内的工程师传达安全的语言/工具选择、不推荐使用的工具以及处于不同实验阶段的技术,它引导工程师沿着期望的路径前进,避免碎片化,进而帮助降低成本。有多种方法可以开始使用自定义技术雷达,例如通过构建自己的雷达工具包Backstage 技术雷达插件

在考虑对技术组合或任何重大架构变更进行更改时,重要的是与您的财务合作伙伴进行财务分析,以评估潜在的投资回报率 (ROI)。财务分析中的主要考虑因素是实施变更的劳动力成本、如果被替换的工具本身的成本、由于新方法而产生的潜在效率收益或损失以及维持现状的成本。此分析必须涵盖组织的劳动力和影响范围,因为不仅仅是实施变更的团队可能会受到影响。

我们的一位客户考虑迁移到新的可观察性工具,因为当前工具的成本可变性令人担忧,并且该工具难以管理。经过仔细考虑,包括来自新供应商的报价、预期人工成本的估计以及他们选择的时间范围内成本降低的分析,客户决定保留当前工具,因为 ROI 为负。

优化费率

云和 SaaS 服务提供商会奖励客户的承诺(例如,预留实例或节省计划购买)和规模。但是,如果实际使用量与估计不符,批量购买计划可能会成为负债。长期承诺代表着更大的风险,因为公司的系统、用户和市场机会的演变和变化速度快于其合同条款。我们的一位客户与 AWS 签署了为期三年的承诺(计算节省计划),但一年后决定停用其系统的一部分,导致承诺的计划未得到充分利用。

反之亦然:如果公司总是承诺不足,它总是为资源支付更高的价格。这需要与业务进行仔细的平衡和持续的对话,以了解他们如何管理这种风险。

大多数 SaaS 产品会为公司分配一名客户经理,他们应该能够告诉他们有哪些合同结构可供他们选择以获得最佳价格。要求折扣永远不会有坏处。一些 SaaS 提供商会以无形利益作为回报提供折扣,例如成为可参考的客户或提供其产品测试版的反馈。我们建议定期与客户经理会面,因为他们会跟踪公司的使用情况,并在有更好的选择时通知他们。

将组织(或部门)的费率优化责任集中起来,比将责任分散到多个团队中更能实现高效的采购策略。组织的规模可能证明投资 FinOps 团队是合理的,以管理最能实现公司范围内规模经济的定价模型。

随着公司发展,成本效益举措的示例

第一阶段

实验

资金有限 - 公司专注于寻找产品市场契合度。

基础设施和技术环境保持精简,但成本效率不是主要关注点。

第二阶段

获得牵引力

公司专注于构建功能以抢占市场份额。

在获得市场牵引力的同时,成本效率的考虑被推迟。

公司开始分成子团队,但仍然认为自己是“一个大团队”并共享基础设施。

第三阶段

(超)增长

成本与增长成正比增加,甚至超过增长。

第一个平台团队组建起来,以减少基础设施和可观察性设置中的摩擦。

平台团队开始使用标签跟踪团队或产品的成本。

领导层监控宏观成本趋势,执行低垂果实(例如优化合同费率),但可能尚未触发更大的成本优化工作。

第四阶段

优化

领导层看到成本水平开始令人担忧的迹象。

创建了一个倡议和一个推动团队,与各个产品团队合作,控制成本。

领导者开始对成本纪律设定期望,并建立成本的联合问责制。

成本对拥有团队/产品变得可见,并提供产品/团队范围的成本仪表板。

平台团队设置提示,默认情况下引导工程师为成本跟踪和效率做正确的事情。

摘要

成本经常成为规模化业务模型的瓶颈,这是组织进入优化阶段的常见触发因素。通过在本阶段采取主动措施并正面解决成本问题,组织可以为持续增长做好准备。

我们的主要建议是

  • 通过分析按系统、计算与存储与网络以及预生产与生产等几个维度细分的成本趋势,确定成本瓶颈的主要驱动因素
  • 创建一个跨职能成本优化团队,并使用战术性减少阶段来识别、优先排序并执行常见的杠杆,以快速降低成本
  • 在最初降低成本后,将重点转移到持续阶段,以进行持久性改变,避免运营成本在未来再次成为问题
  • 让团队对他们拥有的自定义和第三方系统的成本效率负责,同时通过为他们提供系统可操作且及时的成本报告来帮助他们做到这一点
  • 检查组织的技术组合,寻找机会整合冗余或过时的系统,并更有效地使用第三方软件
  • 利用提示引导团队做出最佳选择
  • 与供应商建立定期会面节奏,以确保有竞争力的价格并接收有关工具最佳实践的见解。

从根本上说,我们所涵盖的每种策略和策略都能够提高可见度,并促进整个组织的责任感和行动。

如果没有通过将责任委派给有权的团队来持续关注问题,组织很快就会发现自己回到了起点 - 由于公司内部的财政控制不足而面临成本效率挑战。


致谢

这篇文章从我们许多同事的评论和建议中得到了极大的改进。感谢 Martin Fowler、Ajay Chankramath、Tim Cochran、Vanessa Towers、Kennedy Collins、Karthik Krishnan、Carl Nygard、Brandon Byars、Melissa Newman、Nic Cheneweth 和 Sagar Trivedi。

重大修订

2023 年 8 月 17 日:发布最终部分

2023 年 8 月 15 日:发布持续阶段的第一部分

2023 年 8 月 10 日:发布减少阶段

2023 年 8 月 1 日:发布案例研究

2023 年 7 月 31 日:发布迹象。