DevOps 与研发效能专家张乐:研发效能的升维思考与降维执行

news2024/9/22 19:46:00

在 4 月 20 日举行的《中国企业软件研发管理白皮书》发布会上,DevOps 与研发效能资深技术专家张乐老师做了一场名为《研发效能的升维思考和降维执行》的主题演讲,阐述了如何系统化思考研发效能的关键要素、互动结构及实施路径,并将其与落地执行有机结合起来。以下为张乐老师的演讲内容摘录。

首先我要支持一下《中国企业软件研发管理白皮书》,在我看来这是特别好的一个载体。因为我们之前看到很多与研发管理相关的内容都是从国外引入的,比如 DevOps 现状调查报告等。这次非常开心能够看到我们本土输出的研发管理的实践经验,为广大研发效能管理者和从业人员提供参考,这是一次有益的尝试。

回到正题,今天我分享的话题是「研发效能的升维思考和降维执行」,希望能给大家带来一些启发。

1、研发效能到底怎么提升?

当我们谈论研发效能时,所指代的内容、谈论的焦点可能并不完全相同。所以在讲研发效能怎么提升之前,我们首先要回答的是:大家谈论的研发效能到底是什么?我把这个问题抛给了最近很火的 ChatGPT,同时也在行业里调研了一些软件工程师。

大家的回答里罗列了很多有助于研发效能提升的要素,比如目标、流程、方法、技能、知识、工具,还有团队沟通等。这些内容为我们找到效能提升的突破口提供了一些线索,但相对局部和片面,并无法直接回答「组织研发效能如何提升」这个综合性的问题。

所以,我们今天讲研发效能的升维思考,首先是要清楚地知道总体目标是什么,与达到目标相关的要素有哪些,以及这些要素之间的关联关系是什么。只有这样,才能看到问题的本质,有效提升效能。

如下图所示,我从管理、工程和技术三个关键维度出发,对影响研发效能的关键要素进行了一些梳理:

第一个是管理维度,强调通过流程、文化和人来帮助组织提效。从效率层面看,首先要关注的一个点与需求相关。行业里有句话叫「GIGO(Garbage in garbage out)」,如果你的输入是低质量的,那么你的输出也是低质量的。这就要求我们在研发源头一定要避免开发不靠谱的需求,而实例化需求的实践能够帮助我们。

从质量层面看,测试/安全左移、质量门禁、各种应用变更管理等都可以对质量的提升产生促进作用。那这些要素怎么才能对工程师的体验产生很好的影响呢?一个行之有效的方法就是标准化和简化研发流程。比如说有没有一些在 Code Review 阶段就能发现的问题?有没有在自动扫描阶段就能发现的问题?通过流水线能否自动检出 Bug?而不是所有的变更都要走重量级的审批流程。

第二个是工程维度,也就是通过自动化、一致性的方式来执行研发活动。

从效率层面看,代码分支怎么管?是主干开发还是分支开发,还是 Git Flow?这些不同的分支模型,都会对研发效率产生很大影响。除此之外,还有自动化构建/测试、环境治理、部署发布等,也都会对团队的交付周期和交付效率产生影响。

在质量层面,代码评审、单元测试都是工程维度经常需要考虑的实践。跟大家分享一个数据,近期腾讯发布了《2022年腾讯研发大数据报告》,里面提到代码评审的参与率是 74.6%,代码评审的千行评论数为 15.3 个。也就是说参与代码评审的每 1000 行代码,就有 15 个评论。这说明代码评审这件事是在实实在在地做,而不是表面功夫。

那么从工程维度看,怎么优化我们研发工程师的开发体验呢?就是通过自动化流程,减少手工重复的工作,让大家聚焦在业务代码的开发上。

第三个是技术维度,侧重于应用和基础设施架构的设计和实现,以及新技术的应用。

比如云原生,还有现在非常火的 ChatGPT。很多同学已经开始尝试让 ChatGPT 帮助我们细化需求,生成概要设计,或者在局部做代码补全、代码重构,以及自动生成一些测试。可以说,智能化开发、智能化测试、智能化运维逐渐走进我们的视野了。

但问题是,这些要素不能单独存在,因此我们需要一个抓手,将这些要素体系化,才能真正落地到实际中。

02 研发效能的黄金三角模型

在 2021 年,我提出了「研发效能黄金三角」的框架,将效能实践、效能平台和效能度量统一起来。经过这两年的持续探索和实践沉淀,我把这个模型升级成了 2.0 版本,在框架里增加了更多细节描述,比如效能实践地图、效能平台的五个层次、效能度量的五项精进等,目的是让我们对于研发效能提升的理解具有全局性和系统性。

总的来说,落地研发效能提升工作,并不是只关注效能实践、效能平台、效能度量这三件事就可以了,这还是一种静态思维。我希望我们去思考要素和要素之间的互动、关联关系,并让这些要素形成一个彼此强化、持续优化的增强回路。这个增强回路能够把研发效能里的优秀实践沉淀到工具平台上,通过一站式的平台来承载这些研发实践,帮助我们做规模化的扩展;而效能平台又会产生大量数据,支撑我们做效能的度量与分析,形成持续改进的闭环。

03 研发效能的实践地图

黄金三角看上去还是比较抽象,所以我在里面写了一些落地的条目:比如在效能实践里,我们需要关注产品导向的交付范式,关注敏捷精益协作、持续交付的工程实践、云原生的持续交付等。我将这些内容总结归纳成了「研发效能的降维执行——效能实践地图」,如下图所示:

里面的要点有很多,我着重讲一下产品导向的交付范式。如下图,我将产品导向与项目导向的交付模式从多个维度进行了对比:

首先,从思维模式来看。世界上很多举世瞩目的工程都有项目管理理论的支撑,比如甘特图,它是由亨利·劳伦斯·甘特在 1917 年所创,随后被用于修建当时世界上最大的混凝土结构——胡佛大坝。值得注意的是,甘特图在当时的使用场景是高确定性的基础设施工程,重复性工作多,不确定性工作较少。

在类似的场景下,用这种管理范式足够了。但是,我们不能指望两次工业革命之前的范式到今天的数字化时代依然奏效。现如今,大环境是快速的、迭代的,其显著特征是易变性、不确定性、模糊性、复杂性,那么研发范式也需要做相应的调整才行。所以现在的研发项目管理,除了项目导向外,也要考虑产品导向。

什么是产品导向的思维模式呢?就是要承认不确定性,用迭代的思路去解决不确定环境的问题,持续交付业务价值。

去年我翻译了一本书 Project to product,书名直译是《从项目到产品》,但最终我认为,《价值流动》这个书名更能体现书中要表达的内容,因为这本书强调我们要考虑价值在企业里跨越多个部门的流动,要从端到端的视角去看企业全局的价值交付过程,而不是某个组织、某个部门的局部过程。

为什么很多企业有技术债?一定程度上是项目模式导致的。一个项目是有终点的,到截止时间之后,没有人再愿意投入资源。那时工作会指派给一个人,让他在做新项目的同时再去维护老项目,这就导致大量没有人愿意维护的技术债务变得越来越多。但如果从产品导向来解决这个问题,会容易一些。

其次,从成功标准来看,项目导向是以成本中心的运营模式,以按时、按预算完成项目既定的交付内容来作为成功标准。但是产品导向,是把业务成功作为真正的成功标准,它更聚焦于增量的价值交付。

项目导向是把人安排在工作上,一个人在一年里可能换了七八个项目,但他很难在每一个项目里都有积累、跟团队磨合得很好,也很难产生很高的效能。而产品导向,就是要长期稳定的团队来负责长期稳定的产品,从而产生长期稳定的价值。另外,这两种模式在组织与团队、驱动模式和可见性等方面都有着完全不同的处理方式。

说到可见性,我们不得不提到「西瓜现象」——常被用于描述项目管理中未暴露的问题。西瓜表面是绿色的,里面的瓤是红色,就好像我们在项目管理过程中,向上汇报时认为进度一切正常,最后上线前才发现上不了。这是为什么?因为本质的问题没有被暴露。因此,产品导向就是要解决这个问题,把可见性暴露出来,通过迭代持续的优化,让过程变得更透明。

除了产品导向的交付范式外,持续交付也是我们在「效能实践地图」中要格外关注的。

04 云原生的持续交付实践

在云原生时代,我们不禁追问:云原生的持续交付跟普通的持续交付到底有何种区别?要考虑这个问题,我们先要搞清楚云原生到底有什么不同,我认为主要有三个点:

  • 可以通过代码去管理基础设施( IaC,Infrastructure as Code);
  • 微服务和容器化,能够帮助我们更简化、更解耦地开发和部署应用;
  • 更完善的发布控制,比如各种灰度策略等。

那么,接下来的问题是,云原生的持续交付该怎么做?概括来说,云原生的持续交付就是在云原生的技术底座之上,用 CI/CD 串联上下游工具链和底层的工具平台,最后做到全流程的自动化。

05 效能平台的多视角设计

大家很关注工具,但如果只是把多个工具集成在一起,那只是做了第一步,更高阶的方式是贴合具体研发场景实现多视角的设计。

要做好工具平台的建设,就要从三个视角出发,分别是产品视角、项目/空间视角、应用视角。这三层是一个相互嵌套的关系,越往外层越是产品和业务导向的;越靠内层越是工程和技术导向的。参见下图:

先看最容易理解的项目视角/空间视角。我们现在进入到任何一个 DevOps 平台,都会要进入到一个项目/空间中。负责某个产品或某个部分工作的团队在这里工作,他们分解需求、写代码、做测试,完成部署发布。这里的关键点是,各个领域的工具怎么才能有机整合在一起,高效支撑工程师的工作。这就需要跨领域互联互通的能力,让开发、测试、运维之间的研发活动能够衔接得更丝滑。

不过,只有空间或者项目视角是不够的。在一个大的项目里,可能有 1000 个人,500 个服务,几万条流水线。这种信息爆炸会让团队成员不容易聚焦在自己关注的工作上。

如果以应用为中心来组织 DevOps 流程,就可以让工程师聚焦在自己负责的应用上,管控整体流程。这跟云原生的大思路是一致的,在云原生之前,开发看的是代码,运维看的是机器。但是在云原生时代,开发和运维看的都是应用。

那么怎么从应用视角去提升效率呢?既然云原生时代以应用为中心,那我们可以采取应用模板的方法。

比如企业里有 300 个应用,那么可以通过同一个应用模板把 300 个应用创建出来。这样做的第一个好处,就是通过应用模板去沉淀云原生时代的最佳实践和规范,一键化地创建应用,实现研发管理规范性的提升。第二个好处就是效率的提升,极大简化开发过程和运维过程。

不过还存在一个问题:业务人员更关心业务需求什么时候被受理、有没有被开发、能否上线,并不关注细节代码。所以有什么样的办法能把这些工作也管理起来呢?思路就是在产品视角里完成:从产品角度透视需求流转及相关研发活动,确保产品全生命周期得到良好的管理。

这三个视角相互解耦,不同角色可以专注于各自的职责和目标,高效完成自己的工作。它们又相互连接,构成一个有机整体。不同视角中的底层数据是同一份,研发信息也能够互联互通。通过这个有机的整体:

  • 在应用视角,我们以应用为中心,实现云原生的持续交付,对工程师日常工作,尤其是工程类的工作流程进行优化。
  • 在项目/空间视角,我们以需求(特性)的流动为主线,拉通了交付团队内各角色的高效敏捷协作,也实现了跨应用的研发协同。
  • 在产品视角,我们以产品生命周期管理为目标,实现了复杂业务或产品的跨空间协作。

最终,通过一站式研发效能平台的多场景、多视角设计,可以支撑研发全链路的高效、高质量、可持续的交付。

总的来说,在项目或者空间视角里,我们看到的是每一个产品需求、每个研发团队的研发过程;在业务视角里,我们看到的是云原生的持续交付;在产品视角里管理业务需求,我们能够看到业务需求的流动。三者既分离又相互整合,从而形成一个生态共同体,帮助我们持续优化研发过程,这就是多视角的研发效能平台建设。

06 效能度量的五项精进

最后我们谈一下度量。我之前整理过一个模型,叫「研发效能度量的五项精进」。

  1. 度量基础设施建设:包括价值流网络、工件网络、工具网络;
  2. 度量指标体系:要让结果指标牵引整体,让过程指标赋能一线;
  3. 洞察分析模型:包括分析思路、模型建立、分析方法和分析场景;
  4. 度量产品建设:从数据、信息,到知识、智慧,要让转化过程自动化;
  5. 数据驱动的实验思维:目的是让研发效能可量化、可分析、可提升。

尤其要注意的是,对单一维度过度解读是很危险的事情,所以我们需要通过指标组合,比如「北极星指标+群星指标+围栏指标」,来得到一个比较完整的流量指标体系,从而牵引着效能的提升。

07 总结和展望

对于研发效能的提升,首先是要升维思考,我强调研发效能不是解决局部的效率问题,也不是单点的工具或资源问题,而要从全局化、系统化的角度去寻求解决方案。同时,我们还要降维执行,要下钻到一线去解决具体的问题,并结合新技术与时俱进。

最近,我们已经看到大模型的技术在行业里面的探索应用,相信未来我们有机会从各个维度去重塑研发生产力,让研发过程获得十倍甚至更高的效能提升。

就让我们一起拥抱创新,持续探索,共同构建未来。

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

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

相关文章

程序员应该具备哪些良好的编程习惯?

本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注"慕课网"! 培养一个好的编程习惯,能让你整个职业生涯收益。 例如,做好注释,方便自己也方便别人读懂代码&#x…

hot100:数组——56、64

56. 合并区间 首先考虑只有两个区间的情况: 但是这6种情况可以合并成3种情况,就是上面的3种。首先先判断第一个区间的起始位置是否小于等于第二个区间的起始位置。如果不成立,则交换两个区间。 再考虑n个区间的情况,先将他们根…

QML中【预计符号】和【Unknown Component M300】的红色警告解决方法

问题描述: QML的项目中带中文,每次打开项目都在问题栏显示【预计符号】的红色警告,还有一种是【Unknown Component M300】的警告,代码能正常编译和运行。像我这样对代码追求优雅的强迫症患者看着很不爽,查了很多网上的…

深度强化学习——蒙特卡洛算法(6)

注:本章的内容作为补充插曲,大家可以选看,不过还是建议把最后一个使用蒙特卡洛近似求期望稍微看一下 蒙特卡洛是一大堆随机算法,通过随机样本来估算真实值 使用随机样本来近似Π 1、在[a,b]做随机均匀抽样,抽出n个样…

软件工程开发文档写作教程(02)—开发文档的分类

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl本文参考资料:电子工业出版社《软件文档写作教程》 马平,黄冬梅编著 开发文档分类概述 软件项目实施过程中依据功能和作用的不同可以把文档分为以下几…

通过Python的filestools库给图片添加全图水印

文章目录 前言一、filestools库简介二、安装filestools三、查看filestools版本四、图片添加全图水印1.引入库2.添加水印3.效果 五、参数调整对比1.水印颜色1.1通过名称设置颜色1.2通过RGB值设置颜色1.3通过十六进制设置颜色 2.水印字体的大小3.水印的透明度4.水印直接的间隔5.水…

图像工程课堂记录

文章目录 图像工程0. 介绍0.1 数字图像处理0.2 数字图像分析0.3 数字图像理解 1. 概述1.1 图像的概念1.2 图像的特点1.3 数字图像的概念1.3.1 模拟图像1.3.2 数字图像1.3.3 像素 1.4 数字图像的分类1.5 数字图像的应用领域1.6 图像工程1.7 数字图像技术研究内容1.7.1 图像获取1…

如何构建超现实元宇宙空间

元宇宙是运用数字技术构建的,由现实世界映射或超越现实世界,可与现实世界交互的住自世界,具备新型社会体系的数字生活空间。元宇宙通过扩展现实技术提供沉浸式体验,基于数字孪生技术生成现实世界的镜像,是区块链技术搭…

【数学建模】状态转移模型的理解与应用

文章目录 初识状态转移模型:人狼羊菜渡河问题状态转移模型的结论状态转移模型的应用:n人过桥问题 直接讲理论不太容易懂,所以我们通过一个例子来具体讲解一下这个模型 初识状态转移模型:人狼羊菜渡河问题 人狼羊菜问题应该是很经…

理解FPGA的基础知识——同步电路设计

同步电路设计将系统状态的变化与时钟信号同步,并通过这种理想化的方式降低电路设计难度。同步电路设计是 FPGA 设计的基础。 触发器 触发器(Flip Flop,FF)是一种只能存储1个二进制位(bit,比特)…

​如何实现一个工业级哈希表​

1、避免散列表碰撞攻击 在极端情况下,攻击者通过精心构造的数据,使得所有的数据都散列到同一个槽里,如果使用链表冲突解决方法,散列表就会退化为链表,查询时间复杂度就从 O(1) 退化为 O(n)。 可能因为查询操作消耗大量…

Qt 制作小程序登录系统(超详细)

在这里我使用的是 Qt4, 在 windows 平台上来实现的。 文章目录 前言一、基本部件的创建二、主界面的绘制:1. 设置各部件文本:2. 界面布局: 三、 信号处理机制四、Qt4 显示汉字:1. 出现乱码现象2. 解决方法 五、设置标题栏的小图标总结 前言 …

C++入门(中篇)

🔥🔥本章重内容 C入门 1. 函数重载C是怎么支持函数名重载的呢? 2.引用2.1引用特性2.2常引用2.3使用场景1. 做参数2. 做返回值 2.4引用和指针的区别 3.内联函数 1. 函数重载 函数重载:是函数的一种特殊情况,C允许在同…

安卓手机(微信小程序)抓蓝牙通信数据包

前言 因为公司需要......所以我就弄了一下,参考了很多别人的文章。 成果:它可以抓取微信小程序、安卓APP的蓝牙数据通信包。 开始 我是小米手机,所以我以我自己手机为例 通信过程操作 第一步 打开开发者选项,打开蓝牙调试日志和蓝牙数据包日志开关(如果两者只有其中…

电动汽车路径规划问题(Electric Vehicle-Routing Problem, EVRP)

今天给大家带来的是电动汽车路径规划问题(Electric Vehicle-Routing Problem, EVRP)的介绍,按照惯例先上目录,其中第三部分的主要内容出自文献“The Electric Vehicle-Routing Problem with Time Windows and Recharging Stations”。 目录 问题简介 …

Ceph入门都精通-设备类型都是hdd ssd设置错误

手动设置class [rootceph02 ~]# ceph osd crush rm-device-class osd.0 osd.1 osd.2 done removing class of osd(s): 0,1,2 [rootceph02 ~]# ceph osd crush set-device-class ssd osd.0 osd.1 osd.2 osd.3 Error EBUSY: osd.3 has already bound to class hdd, can not res…

【LeetCode】416. 分割等和子集

416. 分割等和子集(中等) 方法一: 0-1背包问题的普通解法 思路 首先,对题目做一个等价转换: 「是否可以从数组中选择一些正整数,使这些数的和等于整个数组元素和的一半」。 这样就可以看作一个 0-1背包问题…

【CAN总线】CAN驱动程序分析

文章目录 一.CAN介绍二.CAN的特点二.CAN的错误检测三.OSI七层模型 一.CAN介绍 CAN具有很高的可靠性,广泛应用于:汽车电子,工业自动化,船舶,医疗设备,工业设备等方面。 当只有2个设备,简单通信,可以看成US…

【GoodERP专题】第一章 GoodERP应用专题之good_expense 费用报销 的使用

文章目录 一、模块设计二、模块1.主数据2.费用申请单3.借款单【付款】4.费用报销单【挂账/付款】5.出差申请单6.出差借款单【付款】7.差旅费报销单【挂账/付款】 总结 一、模块设计 费用报销模块是基于GoodERP框架设计的,该模块是为了解决企业内外费用相关报销任务处…

设计模式:结构型模式 - 装饰者模式

文章目录 1.概述2.结构3.案例4.使用场景5.JDK源码解析6.代理和装饰者的区别 1.概述 我们先来看一个快餐店的例子。 快餐店有炒面、炒饭这些快餐,可以额外附加鸡蛋、火腿、培根这些配菜,当然加配菜需要额外加钱,每个配菜的价钱通常不太一样&…