Spotify高质量工程生产力实践

2023-10-08 11:04

本文主要是介绍Spotify高质量工程生产力实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

alt

编程可能是一场噩梦。

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

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

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

质量工程的作用就在于保证软件价值链实现即快又好(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天[2]

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

为此,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门户上可用的逐步引导的教程。

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

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

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

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

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

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

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现在已经开源,并提供对100多个系统的集成,Zalando、Unity和Expedia等公司都在使用。

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

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

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


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

参考资料

[1]

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

[2]

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

[3]

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

- END -

本文由 mdnice 多平台发布

这篇关于Spotify高质量工程生产力实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/164830

相关文章

SpringBoot项目中Maven剔除无用Jar引用的最佳实践

《SpringBoot项目中Maven剔除无用Jar引用的最佳实践》在SpringBoot项目开发中,Maven是最常用的构建工具之一,通过Maven,我们可以轻松地管理项目所需的依赖,而,... 目录1、引言2、Maven 依赖管理的基础概念2.1 什么是 Maven 依赖2.2 Maven 的依赖传递机

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

Linux中Curl参数详解实践应用

《Linux中Curl参数详解实践应用》在现代网络开发和运维工作中,curl命令是一个不可或缺的工具,它是一个利用URL语法在命令行下工作的文件传输工具,支持多种协议,如HTTP、HTTPS、FTP等... 目录引言一、基础请求参数1. -X 或 --request2. -d 或 --data3. -H 或

Docker集成CI/CD的项目实践

《Docker集成CI/CD的项目实践》本文主要介绍了Docker集成CI/CD的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、引言1.1 什么是 CI/CD?1.2 docker 在 CI/CD 中的作用二、Docke

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

免费也能高质量!2024年免费录屏软件深度对比评测

我公司因为客户覆盖面广的原因经常会开远程会议,有时候说的内容比较广需要引用多份的数据,我记录起来有一定难度,所以一般都用录屏工具来记录会议内容。这次我们来一起探索有什么免费录屏工具可以提高我们的工作效率吧。 1.福晰录屏大师 链接直达:https://www.foxitsoftware.cn/REC/  录屏软件录屏功能就是本职,这款录屏工具在录屏模式上提供了多种选项,可以选择屏幕录制、窗口