yuff100

V1

2022/12/03阅读:49主题:极简黑

Spotify高质量工程生产力实践

对于大规模团队来说,开发体验将直接影响到产品质量和迭代速度。本文介绍了Spotify工程团队通过打造统一的开发平台,赋能开发团队,实现高质量工程生产力的经验。原文: Quality Engineering Productivity at Spotify[1]

编程可能是一场噩梦。

并不是说编写代码本身痛苦,而是说整体体验。

组织的关注点是迅速发现什么东西对用户更重要,但这必然引入更多的技术、更多的问题[2]

软件工程师在解决配置、部署或其他集成问题时浪费了大量时间,而解决这些问题实际上并没有交付新的价值。

质量工程的作用就在于保证软件价值链实现即快又好(Quality at Speed)

本文将分享Spotify如何在痛苦的环境中实现高质量的工程生产率。

为什么需要实现高质量工程生产力

Spotify的工程师必须快速试验、学习并推出新功能。

速度是由拥有所有必要技能的跨职能团队实现的,这些团队可以高度自主的发布功能。

这是他们对即快又好(Quality at Speed) 的定义:

"迅速将创意转化为产品,并尝试改善用户体验,进入新的市场,并保持作为流媒体内容提供商的竞争力。"

虽然专注于速度在一开始有效,但每个团队都因工程实践的不同以及技术的分散积累了技术债务。

图1: 生产率的速度和标准悖论,来自Backstage。
图1: 生产率的速度和标准悖论,来自Backstage。

高质量工程生产力意味着即快又好(Quality at Speed) 的保持迭代,平衡速度与标准的要求。

平台开发者体验(Platform Developer Experience) 团队是负责保证工程师能够实现大规模快速迭代的主要力量。

质量工程加速开发人员体验

成功的开发体验(Developer Experience)工程生产力(Engineering Productivity) 驱动。

Spotify将他们的体验称为"传言驱动开发(rumor-driven development)",当时让软件工作的唯一方法是询问附近的人并遵循传言。

新开发人员的入职时间长达60天[3]

这与有效的开发体验相去甚远,并影响了团队规模。

为此,Spotify通过以下方式专注于提高高质量的工程生产力:

  • 衡量投入产出比;
  • 不断将产出与结果联系起来;
  • 为了更多的产出和更多的结果而不断改进。

"为了理解如何帮助Spotify团队快速完成实验,我们需要了解他们是如何工作的。" ——How We Improved Developer Productivity for Our DevOps Teams,Spotify工程团队。

平台开发者体验团队为每个用例提供可重复的组件化产品,从而优化开发周期。

接下来看看这个团队提供了什么来消除开发的干扰。

Spotify的高质量工程生产力组件

跨职能团队需要14天来运行新创建的应用程序,这太慢了。

基础设施团队致力于创建快速稳定的软件工件抽象,工程师可以根据需要利用这些工件。

他们构建了以下产品:

  • Backstage,为软件工程师提供一站式服务;
  • Golden Paths,提供标准引导教程;
  • Tingle CI/CD,构建、部署和发布平台;
  • 测试认证计划,提供测试评估。

这些组件将服务配置的时间从14天缩短到不到5分钟。

例如,开发人员可以在一天内得到一个像Spotify这样的网站框架,包含URL、存储库、CI/CD。

Golden Paths作为Backstage的一站式商店

减少决策数量可以支持可伸缩和快速流程。

Golden Path是构建某些固定的、被支持的东西的路径(例如,构建后端服务、建立网站、创建数据流水线)。

Golden Path提供了在Backstage[4]门户上可用的逐步引导的教程。

图2:在Spotify的Backstage可用的应用程序引导。
图2:在Spotify的Backstage可用的应用程序引导。

软件工程师可以通过"Golden Path",遵循基于最佳实践的分步向导,构建出标准应用程序。

多年来,Golden Path教程随着客户端开发、数据工程、数据科学、机器学习、音频处理、web等的发展而发展。

曾几何时,Spotify的工程师无法想象会有"Golden Path"的生活,而现在他们无法想象没有"Golden Path"的生活。

基于Tingle进行系统构建、部署和发布管理

一旦项目在工程师的笔记本电脑上运行,接下来就面临怎样将应用部署到生产环境[5]的集成问题。

Tingle是一个CI/CD系统,可以自动构建推送到GitHub的代码,并通过Backstage向开发人员提供反馈。

所有这些都不需要理解如何配置构建流水线。

图3: CI/CD平台必须简化整个流程,来自AWS。
图3: CI/CD平台必须简化整个流程,来自AWS。

如果通过了所有测试,Tingle将利用常规GitHub工作流,自动完成构建、测试、打包的工作,并将变更部署到生产环境中。

Spotify用Tingle替换了超过200台独立Jenkins服务器,每周运行超过数万个构建。

但仍缺乏部署的信心。

测试认证计划,更有信心交付

Spotify的工程师们依靠游戏化来让代码接受适当的测试。

每个主要的工程领域都有一个测试认证计划:

  • 提供质量控制合规性检查;
  • 提供关于构建时间、代码覆盖率和可靠性的测试报告;
  • 当代码包含不可靠的测试(即flaky测试)时,向团队发出告警;
  • 根据认证级别在服务旁边提供徽章。
图4: 测试认证计划和质量闸门,来自Spotify工程团队。
图4: 测试认证计划和质量闸门,来自Spotify工程团队。

测试认证计划促进了支持加速软件交付周期的测试套件的创建。

从2018年开始,团队遇到的阻塞问题以及其他类型的反应性工作大幅减少。

在这么大的自主权下,这一切是如何运作的?

自治团队的高质量工程生产力

Golden Paths、Tingle和测试认证计划有助于将技术栈标准化。

但Spotify让团队自由选择适合自己团队运作方式的工具和方法。

因此,质量工程平台需要通过成熟的模块化来保证让开发团队持续采用。

图5: Spotify的质量工程平台服务。
图5: Spotify的质量工程平台服务。

每个团队都可以自主决定是否使用所有平台服务,而这一切取决于平台提供的附加价值。

这就形成了一个生态系统,在这个生态系统中,只有即快又好(Quality at Speed) 的组件仍在使用。

即快又好的高质量工程生产力

Spotify朝着即快又好(Quality at Speed) 的方向加速前进,建立了高质量工程生产力(Quality Engineering Productivity)

对于在职以及新入职工程师来说,构建一个项目只需要不到5分钟的时间,从而支持组织规模的壮大。

集成了系统测量和告警的认证程序不断提高工程生产力。

Spotify学会了把事情简单化:

  • 每个组件保留一条Golden Path,避免子模块;
  • 记录当前路径(即使当前很痛苦),然后进行优化;
  • 培养用户对平台工具的持续使用和反馈;

Backstage[6]现在已经开源,并提供对100多个系统的集成,Zalando、Unity和Expedia等公司都在使用。

当前的改进方向是基于Golden State使Golden Path自动与项目一致,并保持良好的文档级别。

Golden Path是Spotify最受欢迎和使用最多的技术文档,是一个真正的质量工程成就。

准备好构建你的高质量工程生产力了吗?


你好,我是俞凡,在Motorola做过研发,现在在Mavenir做技术工作,对通信、网络、后端架构、云原生、DevOps、CICD、区块链、AI等技术始终保持着浓厚的兴趣,平时喜欢阅读、思考,相信持续学习、终身成长,欢迎一起交流学习。
微信公众号:DeepNoMind

参考资料

[1]

Quality Engineering Productivity at Spotify: https://medium.com/qe-unit/quality-engineering-productivity-at-spotify-d263858135ab

[2]

More Technology, More Problems: https://qeunit.com/blog/more-technology-more-problems

[3]

How Backstage Made Our Developers More Effective — And How It Can Help Yours, Too: https://engineering.atspotify.com/2021/09/how-backstage-made-our-developers-more-effective-and-how-it-can-help-yours-too

[4]

Backstage: https://backstage.io

[5]

Quality Engineering Focusing On The Pipeline: https://qeunit.com/blog/quality-engineering-focusing-on-the-pipeline

[6]

Backstage: https://github.com/backstage/backstage

- END -

分类:

后端

标签:

后端

作者介绍

yuff100
V1

俞凡,公众号DeepNoMind