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默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

破茧 JDBC:MyBatis 在 Spring Boot 中的轻量实践指南

《破茧JDBC:MyBatis在SpringBoot中的轻量实践指南》MyBatis是持久层框架,简化JDBC开发,通过接口+XML/注解实现数据访问,动态代理生成实现类,支持增删改查及参数... 目录一、什么是 MyBATis二、 MyBatis 入门2.1、创建项目2.2、配置数据库连接字符串2.3、入

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

在Java中使用OpenCV实践

《在Java中使用OpenCV实践》用户分享了在Java项目中集成OpenCV4.10.0的实践经验,涵盖库简介、Windows安装、依赖配置及灰度图测试,强调其在图像处理领域的多功能性,并计划后续探... 目录前言一 、OpenCV1.简介2.下载与安装3.目录说明二、在Java项目中使用三 、测试1.测

MyBatis-Plus 自动赋值实体字段最佳实践指南

《MyBatis-Plus自动赋值实体字段最佳实践指南》MyBatis-Plus通过@TableField注解与填充策略,实现时间戳、用户信息、逻辑删除等字段的自动填充,减少手动赋值,提升开发效率与... 目录1. MyBATis-Plus 自动赋值概述1.1 适用场景1.2 自动填充的原理1.3 填充策略

Olingo分析和实践之EDM 辅助序列化器详解(最佳实践)

《Olingo分析和实践之EDM辅助序列化器详解(最佳实践)》EDM辅助序列化器是ApacheOlingoOData框架中无需完整EDM模型的智能序列化工具,通过运行时类型推断实现灵活数据转换,适用... 目录概念与定义什么是 EDM 辅助序列化器?核心概念设计目标核心特点1. EDM 信息可选2. 智能类

Olingo分析和实践之OData框架核心组件初始化(关键步骤)

《Olingo分析和实践之OData框架核心组件初始化(关键步骤)》ODataSpringBootService通过初始化OData实例和服务元数据,构建框架核心能力与数据模型结构,实现序列化、URI... 目录概述第一步:OData实例创建1.1 OData.newInstance() 详细分析1.1.1

Olingo分析和实践之ODataImpl详细分析(重要方法详解)

《Olingo分析和实践之ODataImpl详细分析(重要方法详解)》ODataImpl.java是ApacheOlingoOData框架的核心工厂类,负责创建序列化器、反序列化器和处理器等组件,... 目录概述主要职责类结构与继承关系核心功能分析1. 序列化器管理2. 反序列化器管理3. 处理器管理重要方

虚拟机Centos7安装MySQL数据库实践

《虚拟机Centos7安装MySQL数据库实践》用户分享在虚拟机安装MySQL的全过程及常见问题解决方案,包括处理GPG密钥、修改密码策略、配置远程访问权限及防火墙设置,最终通过关闭防火墙和停止Net... 目录安装mysql数据库下载wget命令下载MySQL安装包安装MySQL安装MySQL服务安装完成

SpringBoot整合(ES)ElasticSearch7.8实践

《SpringBoot整合(ES)ElasticSearch7.8实践》本文详细介绍了SpringBoot整合ElasticSearch7.8的教程,涵盖依赖添加、客户端初始化、索引创建与获取、批量插... 目录SpringBoot整合ElasticSearch7.8添加依赖初始化创建SpringBoot项