日前,在WOT全球创新技术大会上,火山引擎DataTester技术负责人韩云飞做了关于字节跳动A/B测试平台的分享。DataTester是字节跳动内部应用多年的A/B实验平台,平台自建立至今,承载了内部500余个业务线的A/B实验任务,累计已开展超过150万次实验,现在字节跳动每天会新增实验2000余个,同时在DataTester上运行的实验有3万余个。

字节跳动内部有着非常浓厚的数据文化和实验文化,抖音、今日头条的名字都经由A/B测试确定,而A/B测试也是整个研发链路上的必经一环。本文将以字节研发流程中的两个个案例,介绍A/B测试在研发全流程中的角色。

1.产品系统重构

今日头条是一款信息类互联网产品,它会基于数据挖掘的推荐引擎向用户推荐文章。今日头条早期的信息流服务是使用Python的一项单体服务,但随着字节业务发展的迅速,今日头条的流量也迎来了爆发式增长,产品在性能工程上的复杂度也在急剧升高。

为了优化产品,使之更加适应大流量下的响应,今日头条的信息流业务设计了一次大规模服务化重构:语言选型从Python切换到了Golang,从单体服务架构演变成了分层的微服务架构。

剖析字节案例,火山引擎A/B测试DataTester如何“嵌入”技术研发流程

但这个重构设计,是围绕产品性能方面的技术指标展开的,但对于用户体验的影响和业务目标的影响,却无法通过短期观察得到结论。为了避免复杂的新系统上线后,降低头条用户的产品使用体验,因此在重构方案设计完毕后,今日头条业务花费了6个月以上的时间,开展了新方案和旧方案对比的A/B测试,总共进行过几十次A/B实验,多点开启灰度测试,并不断分析结果、迭代方案,确认改进点对业务数据指标的影响。

在半年多之后,这个复杂的新系统终于结束了A/B测试,并推全上线。上线后的新系统对今日头条大部分全局指标几乎无影响,甚至一些关键指标取得了显示正向的结果。

2.产品Bug修复                            

这个案例是字节直播产品的场景。该产品在设计了新的精排模型,原本期望是想召回模型学习到更多信息,提前做一些召回符合用户兴趣的内容,提升部分产品关键指标。但在实际操作中,由于模型配置出现了Bug,上线失败。

剖析字节案例,火山引擎A/B测试DataTester如何“嵌入”技术研发流程

因此,该直播产品的团队针对这个Bug进行了修复,但只能采用使精排模型变得更复杂的方案。新的功能虽然已经成功跑通,但由于模型更加复杂,对于用户产品体验负向影响的风险会随之升高。

为了验证新开发的功能对用户体验的影响,该团队使用DataTester开启了A/B测试,他们将用户分为新用户组、老用户组分别开启实验,通过数据观察发现,新的功能对于新用户的而言没有什么实质性影响,新用户的使用时长、留存等指标依然是在一个特定区间波动;但在老用户组的实验数据中,他们发现老用户在内容人均阅读时长上,有了0.3%的显著提高。虽然0.3%是一个看起来不大的数字,但对于字节产品的用户体量而言,这种幅度的提升,在用户内容消费时长上的实质提升很大。

上述两个案例是DataTester在字节跳动应用的缩影,实际上,在字节整个的研发流程中,开发、上线、BugFix、优化、重构,A/B测试都会作为基础设施中的一环,来服务于整个研发流程。除此之外,A/B实验也广泛应用于字节跳动业务的方方面面,从产品命名到交互设计,从改变字体、弹窗效果、界面大小,到推荐算法、广告优化、用户增长...... 可以说,DataTester已经融入在字节的每一个业务和每一项决策中。

剖析字节案例,火山引擎A/B测试DataTester如何“嵌入”技术研发流程

DataTester 当前已通过火山引擎向外部企业开放服务,能基于先进的底层算法,提供科学分流能力和智能的统计引擎,支持多种复杂的A/B实验类型。目前,火山引擎 DataTester 已经服务了美的、得到、凯叔讲故事等在内的上百家标杆客户,将成熟的“数据驱动增长”经验赋能给各行业。