Google Play 商店如何应对特征工程面临的挑战

作者 / Google Play 资深软件工程师 Harini Chandrasekharan

Google Play 商店自十年前 (即 2012 年) 推出以来便是 Android 的核心,它将全球范围内的数十亿用户与同样数量庞大且日益增长的应用和游戏集合联系起来。

让我们聚焦幕后,了解一下如何为全球规模最大的 Android 市场设计服务基础设施。在以消费者为主导的当下,开箱即用的工程解决方案已经无法满足 Google 标准设计的需求。因此,Google 的每个系统都经过了精心设计,并在迭代改进中不断增强以满足 Google Play 商店对可用性、质量和延迟的独特需求。

什么是特征工程?

格式、内容、内容排版、页面布局和信息结构等特征都是面向用户的。格式是指来自推荐系统、广告商、商家和多个其他来源的应用内容在界面上的呈现方式。在格式方面,我们的目标是通过加入适当的内容和界面,打造定制化的体验,以便推荐最为相关的应用和游戏,进而满足用户在 Google Play 商店中的需求。

在面向消费者的特征这一领域中,用户的意见和选择、开发者生态系统和需求的变化速度通常快于基础设施的跟进速度。在这种情况下,工程师面临的最大挑战便是如何在可扩展性和性能等限制下,灵活地设计出永不过时且可满足消费者需求的基础设施。让我们深入了解一下这个动态变化的领域中存在的一些工程挑战。

如何衡量您的定制是达到预期效果的?

在像 Google Play 商店这样的数据驱动型组织中,重要的内容可以通过建立指标来衡量。而在衡量并追踪这些指标是否达到预期效果时,下面的几个维度可能会派上用场:

  • 产品/业务指标 : 此类指标专门用于发布前的产品或服务。进行 A/B 实验以衡量这类指标在全新处理方法方面的变化,可以建立信心,在决策制定过程涉及多项权衡时尤其如此。

  • 性能 : 衡量延迟、错误率和可用性成为几乎所有服务的重点是有原因的。了解这些基准指标至关重要,因为这样做有助于密切跟踪用户体验和他们对产品的看法。

  • 系统运行健康状况 : 这些内部系统指标可以追踪资源利用率和设备群稳定性。

特征工程基础设施面临的挑战

设计出的后端系统既要能满足 Google Play 商店的要求,又要能满足打造流畅的响应式用户互动所需的性能标准,这一点至关重要。从工程角度来看,基础设施需要持续改进以满足企业的需求。Google Play 商店也并无二致——在过去的十年中,Google Play 商店的基础设施已经历多次更新,目的不仅是为了满足当今用户对新特征的需要,同时也是为了实现现代化、消除技术负债,最重要的是减少延迟。

频繁迭代

挑战 : 特征往往需要随着时间的推移进行多次迭代,因此规划出可以满足所有未来需求的工程基础设施并非易事。

在实验驱动的文化背景下,即使是可以大规模地快速构建特征的最佳方式也往往会导致技术负债。技术负债以多种形式存在——过去没有取得成效的特征遗留下来,导致了难以清除的层次,影响了性能,使代码容易出错并难以测试。

独立进化

挑战 : 在拥有 100 多名工程师的大型组织中,多项特征通常会并行构建且彼此独立。

若不大幅降低构建速度,通常无法实现基础设施复用和创新共享。产品研发速度极快的领域通常存在大量的不确定性,并且为了提高系统的灵活性,工程师会在其中加入不同的杠杆和旋钮。但杠杆过多会导致大型系统过于复杂。杠杆过少的话,迭代成本就会很高。在这两者之间找到平衡是特征工程师需要在此领域具备的核心能力之一。

实验时间

挑战 : 我们通常要为构建完善的工程解决方案所花费的时间付出机会成本。

在为面向用户的特征设计解决方案时,实验时间是需要注意的最重要指标之一。既能实现快速迭代,又能满足延迟和其他性能 SLO 要求的灵活设计将会成为理想选择。

实际上,在预估面向用户的特定更改可能产生的影响时,通常涉及大量猜测。虽然在某些情况下,我们可以放心地使用过往数据和知识进行估计,但这些数据和知识对于全新且大胆的想法来说远远不够。

特征工程指导原则

让我们了解一下 Google Play 商店如何应对这些挑战,以将最新创意变成现实。

数据驱动型实验和发布: 了解成功指标

优化上市时间是指向用户发布特征,并使用 A/B 实验衡量该特征对应用安装量和其他商店业务指标的影响,这一点非常重要。基于数据的快速迭代有助于将最终特征调整为理想的终极状态。Google 拥有多项自主研发的技术,可用于在全球范围内开展 A/B 实验,并与指标呈现工具无缝集成以顺畅且轻松地进行此类实验。如此一来,开发者便可有更多时间编写代码,同时减少分析所耗费的时间。

借助完善的 MVP 进行设计和实验: 重点关注质量

决定要构建的特征及其是否符合 Google 质量标准,以及了解工程成本和特征可以满足的用户需求,这些都是在进行设计之前需要解答的重要问题。因此,特征工程工作顺利完成往往需要与产品经理紧密合作。在合理的工程时间内构建出符合用户旅程的完美 MVP 是产品成功的关键。

频繁更新基础设施: 清理技术负债

通常情况下,频繁迭代和快速 MVP 开发文化会带来一系列弊端,最大的弊端便是技术负债。在优化加速开发的过程中,“偷工减料” 会导致代码过时 (由于指标的不可控性) 或实验标记被废弃。不解决这些问题通常会带来额外的测试、维护工作,并影响未来的开发速度。此外,从长远角度来看,使用最新、最完善的框架来消除最后几毫秒的延迟或简化开发会带来巨大收益。从传统角度而言,通过重构或完全重写的方法来频繁更新基础设施可能意味着代码设计不佳,但这也通常是特征工程师必须做出的更重要权衡之一,因为如果用户自一开始便不与该特征互动,那么任何繁复的基础设施都毫无意义!