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

相关文章

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

springboot集成Deepseek4j的项目实践

《springboot集成Deepseek4j的项目实践》本文主要介绍了springboot集成Deepseek4j的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录Deepseek4j快速开始Maven 依js赖基础配置基础使用示例1. 流式返回示例2. 进阶

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

Spring Boot中定时任务Cron表达式的终极指南最佳实践记录

《SpringBoot中定时任务Cron表达式的终极指南最佳实践记录》本文详细介绍了SpringBoot中定时任务的实现方法,特别是Cron表达式的使用技巧和高级用法,从基础语法到复杂场景,从快速启... 目录一、Cron表达式基础1.1 Cron表达式结构1.2 核心语法规则二、Spring Boot中定

Ubuntu中Nginx虚拟主机设置的项目实践

《Ubuntu中Nginx虚拟主机设置的项目实践》通过配置虚拟主机,可以在同一台服务器上运行多个独立的网站,本文主要介绍了Ubuntu中Nginx虚拟主机设置的项目实践,具有一定的参考价值,感兴趣的可... 目录简介安装 Nginx创建虚拟主机1. 创建网站目录2. 创建默认索引文件3. 配置 Nginx4

Nginx实现高并发的项目实践

《Nginx实现高并发的项目实践》本文主要介绍了Nginx实现高并发的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录使用最新稳定版本的Nginx合理配置工作进程(workers)配置工作进程连接数(worker_co

Spring Retry 实现乐观锁重试实践记录

《SpringRetry实现乐观锁重试实践记录》本文介绍了在秒杀商品SKU表中使用乐观锁和MybatisPlus配置乐观锁的方法,并分析了测试环境和生产环境的隔离级别对乐观锁的影响,通过简单验证,... 目录一、场景分析 二、简单验证 2.1、可重复读 2.2、读已提交 三、最佳实践 3.1、配置重试模板