Spotify高质量工程生产力实践

news2025/1/7 6:46:54

对于大规模团队来说,开发体验将直接影响到产品质量和迭代速度。本文介绍了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 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1068365.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot 如何使用 JWT 实现身份认证和授权

Spring Boot 使用 JWT 实现身份认证和授权 JSON Web Token(JWT)是一种用于在网络应用之间安全传递信息的开放标准。它使用了一种紧凑且独立于语言的方式在各方之间传递信息,通常用于在客户端和服务器之间验证用户身份和授权访问资源。本文将…

ValueError: high is out of bounds for int32 报错

问题描述: 笔者在Windows 64位平台跑一个在Ubuntu上运行正常的程序时,出现了以下报错: 具体为: seed np.random.randint(0, 2 ** 32) # make a seed with numpy generatorFile "mtrand.pyx", line 763, in numpy.ra…

vue3使用知识点总结

一、vue3 项目搭建 npm 6.x npm init vitelatest myvue3 --template vuevue 3.2.26使用 element plus ui 框架 npm i -S element plus//全部引入 import ElementPlus from element-plus; import element-plus/dist/index.css; const Vue createApp(App); Vue.use(ElementPl…

Java基于SpringBoot的在线考试系统

文章目录 第一章第二章.主要技术第三章第四章 系统设计4.1功能结构4.2 数据库设计4.2.1 数据库E/R图4.2.2 数据库表 第五章 系统功能实现5.1系统登录注册5.2管理员功能模块 六 源码咨询 第一章 在线考试的需求和管理上的不断提升,在线考试管理的潜力将无限扩大&…

什么是业务流程图(TFD),数据字典(DD),数据流程图(DFD)

什么是业务流程图(TFD),数据字典(DD),数据流程图(DFD)? 答: TFD是一种描述系统内各单位、人员之间的业务关系、作业顺序和管理流向的图表,利用它可以帮助分析…

[CISCN2019 华北赛区 Day1 Web5]CyberPunk 二次报错注入

buu上 做点 首先就是打开环境 开始信息收集 发现源代码中存在?file 提示我们多半是包含 我原本去试了试 ../../etc/passwd 失败了 直接伪协议上吧 php://filter/readconvert.base64-encode/resourceindex.phpconfirm.phpsearch.phpchange.phpdelete.php 我们通过伪协议全…

Adobe Premiere Pro:掌控视频剪辑的魔法之手,让你的创作腾飞!

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是尘缘,一个在CSDN分享笔记的博主。📚📚 👉点击这里,就可以查看我的主页啦!👇&#x…

OnlyOffice修改上传文件大小限制

安装OnlyOffice 安装OnlyOffice,请移步:参考链接 进入docker容器 docker exec -it 容器名ID bash 编辑配置文件 #如果不能编辑,需安装vim apt-get update apt-get install vim #如果不能安装vim,可以在容器外部编辑配置文件后上传至容…

jackson的@JsonIgnore注解和@JsonFormat注解混用导致不生效问题

昨天新建了一个表,就从别的地方复制了一个实体类,然后给一个时间属性加了了JsonIgnore注解,发现前端还是能拿到这个被忽略的属性。 最后排查发现,这两个注解不能混用,两个注解同时加上的效果等同于不加。同时加上&…

阅读论文:Label-Free Liver Tumor Segmentation

论文标题:Label-Free Liver Tumor Segmentation 翻译:无标记的肝肿瘤分割 摘要 论文的目的:肿瘤合成,通过使用合成数据来改进医学图像分析和AI在肝脏肿瘤检测方面的性能 我们的主要贡献是合成了一种肿瘤生成器,它提…

当GPT遇到程序分析:在GPTScan中实现智能合约逻辑漏洞检测

源自:安全学术圈 “人工智能技术与咨询” 发布 研究背景 漏洞案例 研究方法 实验 数据集 讨论 贡献总结 声明:公众号转载的文章及图片出于非商业性的教育和科研目的供大家参考和探讨,并不意味着支持其观点或证实其内容的真实性。版权归原作者所有&a…

适老产品反“坑老”,美的智能化家电是否能坐稳银发经济顺风车?

随着我国老龄化程度不断加深,银发经济崛起早已成为不争的共识。早在2013年,《中国老年人家电需求研究报告》就曾预测,仅在城镇空巢老年人家庭,每年产生的老年家电需求规模就超过600亿元,加上非空巢老人的需求&#xff…

OpenHarmony后代组件双向同步,跨层级传递:@Provide装饰器和@Consume装饰器

Provide和Consume,应用于与后代组件的双向数据同步,应用于状态数据在多个层级之间传递的场景。不同于上文提到的父子组件之间通过命名参数机制传递,Provide和Consume摆脱参数传递机制的束缚,实现跨层级传递。 其中Provide装饰的变…

为Xshell生成密钥,实现免密登录远程Linux服务器

1、为Xshell生成密钥 依次打开Xshell-->工具-->新建用户密钥生成向导。 打开如下图所示的生产密钥参数窗口。 按默认参数,直接单击“下一步”按钮,直到如下图所示的用户密钥信息对话框。 在该界面,可以设置密钥名称,并设置…

干洗店管理软件,洗衣洗鞋小程序开发搭建;

干洗店管理软件,洗衣洗鞋小程序开发搭建;可以帮助干洗店/洗鞋店店主们省心高效的管理店铺,一次付款长期使用.功能基本涵盖收衣、取衣录入、财务管理、基础数据维护、查询、统计,会员管理等方面; 一、干洗店…

【算法小课堂】二分查找算法

简单思路: 当我们要从一个序列中查找一个元素的时候,最快想到的方法就是顺序查找法(即:从前到后依次查找)。但这种方法过于无脑,就是暴力的把每个元素都排查一遍。元素个数少的时候还行,一旦元…

敲代码之余的表情包

欢迎来到上班休息区,请交出你的程序员专属表情包!你可以从以下几个方面进行创作(仅供参考)此为内容创作模板,在发布之前请将不必要的内容删除 方向一:分享你最喜欢的表情包 提示:请至少分享5个…

SQLServer 重置自动增长列增值

--查询标识值 DBCC CHECKIDENT(TypeConf, NORESEED)--重置标识值 DBCC CHECKIDENT(TypeConf, RESEED, 8)

【Vue】vscode格式刷插件Prettier以及配置项~~保姆级教程

文章目录 前言一、下载插件二、在项目内创建配置文件1.在根目录创建,src同级2.写入配置3.每个字段含义 总结 前言 vscode格式刷,有太多插件了,但是每个的使用,换行都不一样。 这里我推荐一个很多人都推荐了的Prettier 一、下载插…

中小企业车间生产管理方案

车间生产管理,员工该如何做?工厂效率上不去,应该怎么提高? 与其靠人力,不如靠“外力”,通过流程化的生产管理系统,将每个流程都置于规范的管理下,优化制造业务流程,整合…