腾讯张乐:“反内卷”潮流已至,研发效能是软件企业必由之路

news2024/11/23 10:51:04

目录

Why|“狂飙”踩下刹车,“湖水岩石效应”加速显现

What|效能 ≠ 效率,效能 = 效率 + 有效性

How|研发效能“黄金三角”

e.g.|软件研发效能实践中的“坑”与“解”

1. 忽视重视工程师的声音

2. “迷信”局部优化,忽视全局优化和拉通的重要性

3. “伪”工程实践

AIGC + 研发效能畅想


 

 近日, InfoQ 联合极狐GitLab 组局探讨「研发总是追不上业务需求,除了买工具,还能做什么」腾讯研发效能资深技术专家张乐老师作为嘉宾,分享了关于研发效能的核心要素和实践过程中的“坑”与“解”等精彩内容。本文整理自张乐老师的分享,Enjoy~

“内卷”是这两年的热词,指持续投入资源,但不产生价值的内部竞争。在软件研发领域,风向已经发生变化,我们正在经历一场从“内卷”到“反内卷”的变革,提升研发效能注定是软件企业的必由之路。

Why|“狂飙”踩下刹车,“湖水岩石效应”加速显现

过去一二十年,数字化红利推动一波波增长,互联网、软件行业高歌猛进、快速扩张,用“狂飙”来形容也不为过。

为了更好或更早占领市场,很多企业通过大量堆砌人力、资源和时间,俗称“快、糙、猛”的研发模式,让业务先跑赢,而后置了发展模式是否健康、科学、可持续等问题。

现阶段经济下行,企业经营压力大,不健康的发展方式注定无法长久。因此,众多企业纷纷寻求降本增效。

这个过程类似“湖水岩石效应”:当湖中有很多水,水位很高时,湖中的石块都被水所覆盖,此时即使有很大的暗礁,人们也看不到。但是当水量减少,水面降低时,一些暗礁就暴露出来了。

很多企业已经碰见了这样的“暗礁”,例如相比前两年,人员数量已经翻倍,但交付的业务量和需求量并没有同比增加,甚至下降,因为系统架构越来越复杂,微服务数量越来越多等。这在一定程度上说明,在过去一段时间里,快速增长掩盖了一些真实的问题,即研发效能并没有在上升,可能持平甚至下降。

在这种趋势下,企业已经不能一味地靠堆砌资源来获得工作成果,切实提高工作效率和有效性才是良药,因此,“研发效能”变成了软件企业的核心竞争力。

What|效能 ≠ 效率,效能 = 效率 + 有效性

研发效能究竟是什么?前几年,行业里还缺乏对其的明确定义,比较接近的概念有谷歌的 EP(Engineering Productivity,工程生产力),还有 EE(Engineering Excellence,工程卓越生产力),但是总是没有一个中文词能够达成一个很好的共识。

我在参与翻译 DORA 的 DevOps 年度报告时,遇到了“Software Delivery Optimization Performance”中“Performance”如何翻译的问题。经过与同行的长久探讨,我们发现在业务场景中,它是“绩效”,在软件交付改进与优化的场景,译为“效能”更为妥当。“研发效能”逐渐进入大众视野。 

2021 年 10 月,国内首届卓越工程生产力大会(Excellent Engineering Conference)上,我和数十位研发效能和工程生产力专家发布了“研发效能宣言”,该宣言从业务、流程、技术、数据以及组织视角对研发提升给出了价值观的指导。这既是对敏捷宣言的致敬,也是对我们的信念和价值观的呼吁和声明,代表了我们的立场,以及我们认为对研发效能而言什么才是最重要的。

图片

图片来源:书籍《软件研发效能提升实践》,作者张乐、茹炳晟等

我当时画了一张图,最上面是业务目标,下面有两个要素,左边是“理想的功能和质量”,右边是“理想的工作量”,即我们希望用什么样的代价实现什么样的功能和质量。

“理想很丰满,现实很骨感”,我们会发现理想和现实之间经常存在差距,要么是效率上的差距,要么是有效性上的差距。

图片

所以,研发效能 ≠ 研发效率,研发效能既要关注效率,也要关注有效性,或者说既要关注做正确的事情,也要关注正确的做事情,并追求效率

如一句话来表述研发效能,即研发效能就是更高效(即效率)、更高质量、更可靠、可持续地交付更优的业务价值(即有效性)的能力。对于大型企业而言,还要关注规模化问题,考虑如何管理复杂性。

💡 欢迎点击文末「阅读原文」获取 5 本《中国企业研发高效能白皮书》( CI/CD、ChatOps、企业级软件架构、Code Review、从价值流管理到研发效能管理)完整版合集,开启高效能研发之旅。

How|研发效能“黄金三角”

如何落地研发效能?在调研了国内外多家公司后,我发现他们无外乎都在关注研发效能的三个维度:效能平台、效能实践和效能度量。因此,我把这三部分整理成模型,称为研发效能「黄金三角」。

图片

图片来源:书籍《软件研发效能提升实践》,作者张乐、茹炳晟等

研发效能黄金三角彼此独立,又相互关联:

  • 效能实践中的优秀实践可以固化、沉淀到效能平台;反过来,效能平台支撑效能实践的落地;

  • 效能平台产生的大量研发数据形成效能度量中的效能洞察;反过来,效能度量持续观测效能平台产生的数据,进行下钻和深入分析;

  • 效能度量中的洞察和分析结果可以用于针对性优化效能实践;反过来,效能实践可以给效能度量更多的输入,帮助其完善度量指标集和分析方法。

通常企业研发效能不高的原因,是没有做好「黄金三角」,例如:

  1. 效能实践上,忽视了软件工程最根本方法,包括管理维度如需求分析等,工程维度如单元测试、Code Review、代码分支模型等。很多人更愿意去看框架或者编程语言内容,但对于架构怎么设计,高内聚、低耦合怎么做等问题研究不足。我认为这些基本功非常重要,而且是效能提升的关键点。

  2. 效能平台上,没有用好工具。我们常说的“道法术器”中的“器”指的就是工具,没有工具,很多事做不了;没有用好工具,例如把敏捷工具用成文档记录工具,把持续集成工具用成批量触发器等,没有结合场景有效应用工具,也将收效甚微。

  3. 效能度量上,缺乏以数据驱动进行持续改进。我们应该正确区分过程指标、结果指标;恰当运营推广让指标真正发挥价值,而不是变成一个“内卷”工具;基于数据客观的基础上,进行场景指标洞察和效能分析,直指研发痛点和根本问题和根本原因。

e.g.|软件研发效能实践中的“坑”与“解”

研发效能在实际落地过程中,确实有很多“坑”,举几个常见问题和大家分享:

1. 忽视重视工程师的声音

我们经常看到,一些企业研发效能的优化方向是面向管理者的,如制定各种流程规范、强化项目和研发过程管理、出具各式各样的度量报表、使用各种绩效管理手段等,当然这些也很有价值,但有时忽视了为研发过程中最庞大的群体——工程师提供服务,用一套繁杂的规范去“框住”所有人,往往适得其反。

研发效能的提升要拥抱开发者体验,给工程师提供更明确的目标、更优秀的研发工具、更精简的协作流程,但千万不要过度控制,而要倾听工程师的声音,尊重和发挥个体智慧,这样才能获得更大的创造力和创新力。

2. “迷信”局部优化,忽视全局优化和拉通的重要性

研发效能并不缺乏单点能力,各个领域都有很多不错的垂直能力工具,但是把各个单点能力横向继承与拉通,从一站式全流程的维度设计和规划的研发效能平台还比较少。

这样的话,工程师很容易在某个具体单点里做局部优化。在研发效能提升初期,局部优化的效果还是可见的,如将编译时间从 10 分钟缩短到 2 分钟,将部署成功率从 95% 提升到 98% 等,但局部优化效果会随着时间流逝递减,并且从整个研发过程来看,其效果可能是微乎其微,导致看似热火朝天的研发工作,可能只是虚假繁忙。

进入深水区后,能够带来效率大幅度提升的往往是全局优化。所以不要忘记首先考虑全局优化,而不是局部优化;从整体看问题,而不是局部看问题。

3. “伪”工程实践

我们看到很多工程实践是为了做而做,而不是从本质上认可工程实践价值,比较典型的例子就是代码评审和单元测试。

很多企业在推行代码评审和单元测试,但过程中往往走偏:代码评审变成一个流程,实际评审质量无人问津,评审人的评审不算工作量,也无需承担任何责任等,效果可想而知。

我们缺的不是工程实践,而是工程实践的深度,不要用“伪”工程实践滥竽充数。

和大家分享一个数据,腾讯今年发布的《2022年腾讯研发大数据报告》中统计到,2022年,腾讯总计完成 262 万次代码评审,相比 2021 年增长 21.8%,代码评审参与率达到 74.6%,即 3/4 人参与代码评审。当然,参与率高不代表做得好,因此我们新增了一些指标来看产生了多少有价值的沟通:代码评审千行评论数为 15.3 个,也就是说参与代码评审的每 1000 行代码,就有 15 个评论。这说明代码评审这件事,我们是在实实在在地做,而不是表面功夫。

另外在工具上我们也做了很多优化,可以看到在 Code Review 页面上花的时间多久,加载时长如何,是否方便做评审等,真正服务于工程师。

💡 欢迎点击文末「阅读原文」获取 5 本《中国企业研发高效能白皮书》( CI/CD、ChatOps、企业级软件架构、Code Review、从价值流管理到研发效能管理)完整版合集,开启高效能研发之旅。

AIGC + 研发效能畅想

AIGC 浪潮翻涌,将给各行各业带来颠覆。在研发效能领域,已经有一部分生产级 AIGC 能力,在当前的软件开发专业分工和流程基础之上,去增强每一个环节,即 X + AI。

例如基于注释生成代码,基于代码生成注释,解读代码,被测代码生成测试代码;通过大模型做需求分析、竞品调研、完善格式化需求文档、辅助编写用户故事、生成验收条件等,已经相对落地,可以直接使用。

效果如何呢?我们看到在一些局部领域里,X + AI 能获得 20~50% 甚至更高的效能提升。但如果想有颠覆性突破,例如把当前软件开发的模式或范式进行根本性重构,这种方式可能难以实现。

我畅想在未来,人可能更重视一头一尾:

  • 一头:人成为一个需求的提出者和一个任务的分发者,中间过程由大模型重构掉设计、开发、验证性的工作;

  • 一尾:人去做结果的判断。大模型的本质是基于概率,和我们追求确定性的结果之间,还要找到一个平衡点。

“反内卷”潮流已经悄然而至,中国企业正在高效能研发的路径上快速前进,研发效能将成为企业核心竞争力,你准备好了吗?

💡 为了解读市场中具有代表性的高效能研发解决方案,极狐 GitLab 联合 InfoQ 研究中心,以中国企业研发高效能为研究对象,发布了 5 本《中国企业研发高效能白皮书》( CI/CD、ChatOps、企业级软件架构、Code Review、从价值流管理到研发效能管理),期待可以帮助中国企业研发团队获得高效能方法论、工具、最佳实践的新认知。

欢迎点击此处获取 5 本《中国企业研发高效能白皮书》完整版合集,开启高效能研发之旅。

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

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

相关文章

【Spring】SpringBoot的10个参数验证技巧

这里写目录标题 前言1.使用验证注解2 使用自定义验证注解3 在服务器端验证4 提供有意义的错误信息5 将 i18n 用于错误消息messages.properties6 使用分组验证7 对复杂逻辑使用跨域验证8 对验证错误使用异常处理9 测试你的验证逻辑10 考虑客户端验证总结 前言 参数验证很重要&am…

跨空间域数据管理分布式共识算法:现状、挑战和展望

跨空间域数据管理分布式共识算法:现状、挑战和展望 李伟明1,李彤1,2, 张大方1,戴隆超1,2, 柴云鹏1,2 1 中国人民大学信息学院,北京 100872 2 数据工程与知识工程教育部重点实验室,北京 100872 摘要:随着数字…

生信学院|09月08日《SOLIDWORKS扣合特征应用》

课程主题:SOLIDWORKS扣合特征应用课程时间:2023年09月08日 14:00-14:30主讲人:陈冬冬 生信科技 售后服务工程师1、什么是扣合特征2、唇缘与凹槽3、装配体凸4、台通风孔5、弹簧扣与弹簧扣卡槽请安装腾讯会议客户端或APP,微信扫描海…

管理类联考——数学——汇总篇——知识点突破——数据分析——计数原理——排列组合——分堆分配

⛲️ 一、考点讲解 1.方法介绍 在排列组合中,经常遇到元素分堆或分组问题,尤其难点是出现等数量的分堆,很多考生容易犯错误。 2.方法应用 平均分成的组,不管他们的顺序如何,都是一种情况,所以分组后一定要…

HTML5-3-表格

文章目录 属性边框属性标题跨行和跨列单元格边距 HTML 表格由 <table> 标签来定义。 tr&#xff1a;tr 是 table row 的缩写&#xff0c;表示表格的一行。td&#xff1a;td 是 table data 的缩写&#xff0c;表示表格的数据单元格。th&#xff1a;th 是 table header的缩…

Python中if __name__ == ‘__main__‘:的作用和原理

if name ‘main’:的作用 一个python文件通常有两种使用方法&#xff0c; 第一是作为脚本直接执行&#xff0c;第二是 import 到其他的 python 脚本中被调用&#xff08;模块重用&#xff09;执行。 举例说明如下&#xff1a; 在本文件中&#xff0c;name 是main 在被impor…

Vue3---uni-app--高德地图引用BUG

先给报错信息&#xff1a;module libs/map//libs/map_min.js is not defined, require args is /libs/map_min.js 查看我引用方法&#xff1a; 本人查阅资料发现 是 require 使用的是 commonJS方式引用说这个适配Vue2可我项目是Vue3应该使用ES6语法糖 然后我有跑了项目发现BU…

【Unity编辑器扩展】 | 编辑器扩展入门基础

前言 【Unity编辑器扩展】 | 编辑器扩展入门基础一、基本概念二、核心知识点 简述三、相关API 总结 前言 当谈到游戏开发工具&#xff0c;Unity编辑器是一个备受赞誉的平台。它为开发者提供了一个强大且灵活的环境&#xff0c;使他们能够创建令人惊叹的游戏和交互式体验。然而…

1.若依框架介绍与环境搭建

文章目录 若依框架介绍官网地址相关技术栈 环境搭建1.git介绍下载与安装学习资料 2.maven介绍与下载环境变量配置资料学习 3.node4.java5.idea6.vscode7.mysql可视化工具HeidiSql 8.redis参考资料遇到问题 若依框架介绍 官网地址 若依框架官网地址&#xff1a;http://www.ruo…

stm32 学习笔记:GPIO输出

一、GPIO简介 引脚电平 0-3.3V,部分可容忍5V&#xff0c;对输出而言最大只能输出3.3V, 只要可以用高低电平来控制的地方&#xff0c;都可以用GPIO来完成&#xff0c;如果控制的功率比较大的设备&#xff0c;只需加入驱动电路即可 GPIO 通用输入输出口&#xff0c;可配置为 8种 …

【程序员必知必会3】你还不懂ClickHouse和Hive的区别?!

ClickHouse和Hive究竟哪些区别 ClickHouse和Hive都是用于大数据处理和分析的分布式存储和计算系统&#xff0c;但它们之间存在一些区别&#xff1a; 架构&#xff1a;ClickHouse采用列式存储和向量化执行引擎&#xff0c;可以实现亚秒级别的数据查询。而Hive采用基于Hadoop的数…

Nancy2.0引入Swagger并设置其为嵌入的资源

因为项目需求&#xff0c;需要在Nancy的基础上引入Swagger&#xff0c;万能的互联网上有现成的方案&#xff0c; 方案写的很详细&#xff0c;实际按文档也成功的实现了相应的功能&#xff0c;但因为我是在基础dll里包含了该功能&#xff0c;所以我希望swagger-ui是作为嵌入的资…

实时操作系统Freertos开坑学习笔记:(七):队列

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、队列是什么&#xff1f;而在freertos中&#xff0c;队列是什么呢&#xff1f;①如果要进行中断、任务的交流&#xff0c;那我用全局变量行吗&#xff1f;②…

VMware虚拟机安装_新虚拟机创建_CentOS镜像导入_linux指令基本操作

文章目录 1 VMware下载安装1.1 下载网址1.2 安装步骤 2 创建虚拟机与CentOS镜像导入2.1 创建新虚拟机2.2 导入CentOS镜像 3 获取ip与连接Xshell3.1 查看虚拟机ip地址3.2 Xshell使用 1 VMware下载安装 1.1 下载网址 https://www.vmware.com/cn/products/workstation-pro/works…

MySQL的虚拟字段

MySQL中的虚拟字段指的是不实际存在于表中的逻辑字段,它们是在查询时由一些函数或表达式临时生成的。 参数&#xff1a;虚拟类型 在 MySQL 中,字段类型可以分为存储类型(Stored)和虚拟类型(Virtual)。存储类型是指实际存储在表中的数据类型,如 INT, VARCHAR, TEXT …

vue3 判断包含某个字符

<img v-if"node.level 1 && checkIfIncludeSubStr(node.label, 人口)"src"/assets/images/icon-convention-01.png" width"16"class"inlineBlock Vmiddle" style"margin-right: 8px;"/>const data reactive…

redis核心数据结构

redis下载地址&#xff1a;Download | Redis linux进入redis目录首先使用make命令进行c的编译&#xff0c;修改redis.conf文件&#xff1a; daemonize yes #后台启动 protected-mode no #关闭保护模式&#xff0c;开启的 # 需要注释掉bind #bind 127.0.0.1&#xff08;bind…

客户案例 | 华苑园林 移动SRM 集成ERP+电子签章,打通数字化最后一公里

公司简介 广州华苑园林股份有限公司始创于1995年&#xff0c;总部设立在广州&#xff0c;是集园林景观设计、工程施工、绿化养护、苗木生产与销售于一体的综合性、跨地区的大型园林企业。拥有城市园林绿化一级施工资质、风景园林设计专项乙级资质、环保工程专业承包叁级资质、…

优先级队列priority_queue以及仿函数的使用

目录 优先级队列priority_queuepriority_queue的模拟实现仿函数 优先级队列priority_queue 优先级队列priority_queue是一种容器适配器&#xff0c;根据严格的弱排序标准&#xff0c;它默认第一个元素总是它所包含的元素中最大的 优先级队列默认使用vector作为底层存储数据的…

《Effective软件测试》:让你的软件研发质量提升10倍的秘籍

前言&#xff1a; 软件测试是软件研发过程中不可或缺的一环&#xff0c;它关系到软件的功能、性能、安全和用户体验。然而&#xff0c;很多软件开发者和测试人员对软件测试的理解和实践还存在很多误区和不足&#xff0c;导致软件测试的效率和效果不尽人意&#xff0c;甚至造成软…