从推动到拉动:研发效能提升的第一性原理

news2025/4/9 12:08:02
导语 |随着企业业务的快速发展,产品迭代速度越来越成为企业发展制胜的关键因素。在业务迅速扩张之下,企业研发团队的规模也在不断壮大。如何有效管理研发团队,又该如何提升企业研发效能,让企业在市场竞争中立于不败之地成为了一堂“必修课”。今天,我们特邀了 Agilean 首席顾问、腾讯云 TVP 吴穹老师,他将为我们带来软件研发效能提升的经验分享。

作者简介

吴穹,腾讯云 TVP,Agilean 首席顾问,敏捷创新管理专家。北京大学软件工程博士,拥有超过20年行业经验,长期为平安、招行、建信金科等公司提供敏捷咨询服务。1998年创建 Rational 中国,后被 IBM 收购。曾任 IBM Rational 全球产品经理,IJI 大中华区总经理。善于从组织、部门、团队等不同层级着手,助力大型组织在实战中重塑敏捷、催化创新。

一、不可见的拥堵阻碍了研发效能提升

近几年,各大企业的研发团队规模呈现出了高速增长的趋势。然而,随着团队规模的扩大,却更常出现诸如交付慢等一系列问题。为什么人多了,事情反而慢了呢?

在我看来,当前众多大型组织中软件开发交付慢背后的本质问题是拥堵。

我们可以通过一张图来解释软件开发的拥堵状态。在地图导航中,如果一条路线交通状况良好,有着快速的流动和少量等待,那么这条路线的拥堵程度就相对较低;相反,如果线路等待时间长、流动性差,那么拥堵程度就相对较高。对应到软件研发领域,需求就类似路上跑的车子。需求流动快,就通畅;反之,流动慢,就是拥堵。

许多在大型组织中,需求的端到端流动效益通常只有 1% 到 5%。这表明很多需求在研发过程中大部分时间都待在原地不动。这好比你开车上路已经一小时了,但事实上车子真正在移动的时间只有 5 分钟。同时,这种拥堵状态也难以自我改善,就像道路堵塞若不加以干预则会越来越拥挤。许多组织都在拥堵状态中,员工常常感到自己非常忙碌,不断地被高并发和各种事情占用,但回过头来却发现自己其实什么都没做。如果你发现自己很忙碌,且无法专注于某项工作,很可能正处于拥堵状态。

在软件开发过程中,存在许多不确定性和意外情况,流动效率 100% 的情况不现实。业界认为开发到测试阶段比较理想的流动效率水平是 40%。

此外,“端到端时效”也是衡量开发效率的一个关键指标。以我们 Agilean 知微这个小型团队为例,从需求讨论到设计、编码、测试、上线的整个流程,P85 时效约为 70 天。而从需求确认到上线,Agilean 知微团队的 P85 时效约为 40 天。对于大型企业来说,需求从确认到上线的时效能做到 70 天就已经相当不错了。

在这个行业中,我们已经经历了两到三次研发效能“运动”。在我看来,合理的研效提升实践能够提高效率,但不当的方法则可能会适得其反。相对价值而言,衡量速度是更容易的。如果整个组织为了提高效率而不顾价值,可能会导致公司在错误的方向上一路狂奔。因此,行业需要对团队效能建立合理的预期,明确交付价值,而不是盲目追求效率。

二、软件研发拥堵的成因

造成软件开发拥堵的因素有很多,但限期排期机制和滥用工作流是两个最为主要的原因。

这样的场景在软件开发领域非常常见:业务让你评估一个需求,你告诉他需要 20 天完成;第二天又来新的需求,然后你再次评估并告知预期。

业务往往会认为需求评估是零成本的,“只是让你估个时间而已”,带着这样的想法,不断往研发推需求。但实际上需求评估是有成本的,需要考虑需求、关联系统分析和排期等因素。研发常常会在这种推动式流程下,下意识过度承诺,到最后连自己也分不清到底承诺了多少需求。本来一个需求确实只需要 20 天就能完成,但是当团队同时要处理多个需求,原本承诺的 20 天也就无法达成了。

推动式的流程会不断拖累研发效率,就像是贴在汽车后保险杠上的标语一样,“越催越慢,再催熄火”。开发团队在很忙的情况下,还要经常被打扰:“这个东西怎么样?什么时候做完?再评估一下,那个进展怎么样?” 导致交付速度越来越慢。

另一方面,是工作流的滥用。在工作流的建模思维影响之下,组织总是企图精确地描述整个软件研发活动。如果想忠于现状会过分复杂,如果试图简化,又无法落地,结果陷于两难。流程无法真实反映工作过程,更不用提管理好工作了。此外,在推动思维的影响下,企业里面常常会要求每个环节步骤精确、自动地指定下一步负责人,但是现实情况无法落地。最后只好开会指定一个专门的负责人,人工地进行任务分发,结果可想而知,这个人就成为了瓶颈,所有事情都卡在他这里了。若要改善这种情况,必须从流程上进行改进。

三、如何疏通拥堵

在研发流程层面,我们需要建立拉动式流程。建立拉动式流程,关注需求优选,缓解拥堵。一个有序、可信的协同机制是拉动式流程落地的关键,版本火车就是一个经过验证可落地的可靠实践。

在工具层面,我们认为应该将价值流和工作流结合起来。传统组织内,往往只有工作流,而工作流更适用于确定性很高的任务类型。软件开发工作过程本身,很多环节并不那么明确,比如一个需求是否需要单元测试取决于其复杂程度。在有些模糊的问题上,很难精确描述。如果工具里面拿着标准的工作流来管理不确定的研发流程,不仅管不好,甚至会带来阻塞。

价值流可以视为工作流的某种程度的抽象。更适合管理具体流转过程不确定的工作任务,比如需求、研发。

我们认为「价值流+工作流的双流模型」才是出路。未来的交付流程核心可能是很多条价值流,这些价值流可能会衍生出多条工作流。类似一个鱼骨结构,价值流是鱼的主骨刺,表示任务的当前状态。至于具体的操作,则体现在许多旁枝的工作流上面。在这种结构下,以高效完成任务为目标,不同团队可以使用他们更为适应的工作流,但不影响任务流转状态的真实性。

我们最近也在思考整个 BizDevOps 的平台规划全景图。对于小型团队而言,可能只需要一个工具就能够解决问题。但是在大型组织中,各个领域都在建设自己的工具体系,存在各种不同的工具选择。在这样的背景下,实现工作流层级的标准化有极高的成本。我们认为构建统一的价值流层,在工作流层允许多样化,实行价值流和工作流的分层管理,应该是大型组织 BizDevOps 建设的一个较好选择。

工作流层由于其工具选择的灵活性,不同企业间的差异会非常大。价值流层的工具作为工作流的抽象,标准化是十分困难的,应当具备足够的定制化能力。同时,为了适配不断变化的工作流,价值流层也应具备足够的灵活性。

Agilean 知微的建模思路是通过零代码的配置方式来帮助企业应对这种管理复杂性。Agilean 知微目前已经成功集成了腾讯云 CODING 体系,这意味着企业管理组织所需的灵活性和复杂性,以及标准执行过程的高效,这两方面的需求都可以得到满足。

四、研发效能管理最佳实践案例

以国内某个金融组织为例,通过梳理组织阵型、拆分交付过程、构建研发价值流,借助 Agilean 知微进行组织线上化,并对需求进行端到端全流程在线管理,将所有的流转数据都沉淀下来,在效能大屏形成结构化的数据统计图,为不同层级的管理者提供了差异化的观察视角,并且支持演进。当然,这一过程中,也需要辅助以相应的敏捷实践和活动。

经过一年的努力,上述企业的研发交付时效提升了 30%,需求吞吐量提升了 35%。

总而言之,从推动到拉动是提高研发效能的第一原则。我们需要从上游向下游推动需求的流程,转变为下游向上游拉动需求的流程,以缓解拥堵,加快交付。在这个过程中,可以使用“需求前置时间”和“流动效率”这两个关键指标来评估拥堵的改善情况。在此之外,还可以引入版本火车机制建立有序、可信的协同机制,并使用看板透明研发现状、管理需求流动,进一步减少研发过程的等待和拥堵。

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

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

相关文章

基础写作干货分享:微信公众号8个基本写作步骤

公众号怎么写?不知道如何下手?如何写一篇出众的公众号文章?怎么写公众号内容会出爆文?当我们涉及到基础微信公众号写作时不知道怎么写SEO教程自学网教你如何下手,八个基本写作步骤学会立马搞定困难。 确定目标受众&…

提高软件测试质量 需重点关注5个方面

在软件研发管理过程中,我们往往重视开发的进度,而对软件测试关注度不高,有些项目组甚至没有软件测试人员。这样往往容易导致测试工作出现很多问题,如测试目标不明确,不断修改测试方向;测试结果不理想&#…

Android11.0 导航栏添加图标截屏

需求: 导航栏添加截屏和电源键图标,控制截屏和用于设备重启关机功能。设置中添加延时截屏和控制截屏图标显示开关。 1. 导航栏添加图标 1.1 添加布局文件和图标icon 在layout目录下添加nav_power.xml和screenshot.xml文件 frameworks/base/packages…

远程桌面-出现身份验证错误

1. 打开本地组策略编辑器,可以按winr组合键输入gpedit.msc命令打开。 2. 选择“计算机配置”--“管理模板”--“系统”--“凭据分配”,在“凭据分配”设置中选择“加密数据库修正”。 3. 在“加密数据库修正”对话框中选择“已启动”,保护级别…

Redis解决Session共享问题

文章目录 一、集群Session共享问题二、Redis存储验证码和对象三、解决状态登录刷新问题 一、集群Session共享问题 session共享问题:多台Tomcat并不共享session存储空间,当请求切换到不同tomcat服务器时导致数据丢失的问题 tomcat可以进行多台tomcat进行…

主数据管理:识别主数据

1.识别主数据的两个方法 1.1主数据特征识别法 主要评估企业全部数据中的各类主数据是否符合主数据的每个特征,如发现任何不符合主数据特征的数据,则将其剔除出主数据管理的范畴。 高价值性:主数据具备极高的业务价值。主数据描述企业最核心的…

全面了解JavaScirpt 的垃圾(garbage collection)回收机制

全面了解JavaScirpt 的垃圾(garbage collection)回收机制 一、垃圾回收机制—GC javascript具有自动垃圾回收机制(GC:Garbage Collecation),也就是说,执行环境会负责管理代码执行过程中使用的内存。 原理:垃圾收集器会定期(周期性…

超宽带(UWB)无线通信的技术特点

近年来,超宽带(UWB)无线通信成为短距离、高速无线网络最热门的物理层技术之一。 UWB的产生与发展 超宽带(UWB)有着悠久的发展历史,但在1989年之前,超宽带这一术语并不常用,在信号的带宽和频谱结构方面也没有明确的规定。1989年&am…

Django_haystack全文搜索

haystack是全文搜索的框架,支持whoosh、solr、Xapian、Elasticsearc四种全文检索引擎,点击查看官方网站。 whoosh是用纯Python编写的全文搜索引擎,虽然性能比不上sphinx、xapian、Elasticsearc等,但是无二进制包,程序…

C语言为什么是世界上最难的语言?看完你就明白了

在当前的信息技术领域,C语言在许多大型科技公司中扮演着重要角色,如谷歌、苹果和微软。这些公司不仅开发软件,还专门设计硬件,例如AMD、英传达和英特尔等公司。它们都使用C加速库来提高软件性能。 C语言之所以难以掌握&#xff0…

一个简单不报错的summernote 图片上传案例

一个简单不报错的summernote 图片上传案例 一个比较完整的summernote上传图片的案例,没有后台(上传图片网上案例太多),只有前端js.修正了网上提供的,但是有bug的代码。 这个例子,js保证不报错。亲测可用 …

windows mysql服务自动启动 错误模块名称:ntdll.dll

在windows11家庭版系统安装mysql后,偶尔有mysql服务自动启动失败的问题,大体的原因就是MySQL的启动服务不能在Windows规定的启动时间内完成准备,于是就会停止其启动程序。windows事件日志如下: 方法一 : 检查确定文件…

计算机网络完结篇(从键入网址到响应页面-->HTTP常见面试题-->TCP三次握手及挥手-->TCP超时重传等特性-->Ip地址)

1. 基础篇 从键入网址到响应页面 1. 解析URL 生成HTTP请求信息 解析URL之后,浏览器确定了Web服务器和文件名,然后就是根据信息来生成HTTP请求信息。 2. 真实地址查询 DNS DNS服务器: 在第一步解析URL获取到对应的HTTP请求信息之后&#xf…

React 之 CSS编写方式

一、概述 整个前端已经是组件化的天下,而CSS的设计就不是为组件化而生的,所以在目前组件化的框架中都在需要一种合适的CSS解决方案 在组件化中选择合适的CSS解决方案应该符合以下条件: 可以编写局部css:css具备自己的具备作用域&a…

实现一个vscode插件:打开多个vscode项目时根据.nvmrc文件自动切换nvm

开发背景与最终功能 需要维护一些老项目,同时开发新项目时,切换nvm很烦人 最终实现vscode插件:每个vscode实例打开一个项目,切换vscode实例时能自动切换版本(需要项目根目录有一个.nvmrc文件) 插件下载 …

nextjs13中cssModule设置子标签的样式

前言 最近在学习nextjs中发现,如果在cssModule文件中直接设置子标签的样式比较麻烦,最后在网上看到一种方式可以解决,方式如下。 ps: 此方式不一定最优,因为在我看来此代码耦合性太高了,看着不太舒适,因为…

保姆级指南|APP原型设计怎么做?手把手教学超详细!

在数字化产品研发过程中,原型设计扮演着至关重要的角色。不夸张的说,产品原型很大程度决定了最终产品的成功与否。随着主流产品载体的更迭和发展,原型设计也在不断的演进。也产生了网页原型设计,桌面端app原型设计,移动…

PyTorch模型创建与nn.Module

文章和代码已经归档至【Github仓库:https://github.com/timerring/dive-into-AI 】或者公众号【AIShareLab】回复 pytorch教程 也可获取。 文章目录 模型创建与nn.Modulenn.Module 总结 模型创建与nn.Module 创建网络模型通常有2个要素: 构建子模块拼接…

Redis 优惠卷秒杀(二) 异步秒杀、基于Stream的消息队列处理

目录 基于Stream的消息队列 Redis优化秒杀 登录头 改进秒杀业务,调高并发性能 Redis消息队列实现异步秒杀 ​编辑基于List结构模拟消息队列 基于PuSub的消息队列 ​编辑 基于Stream的消息队列 Redis消息队列 基于Stream的消息队列 Redis优化秒杀 登录头 改…

skywalking安装

目录 skywalking部署示意图 server安装 裸机安装 docker单节点安装 docker集群安装 k8s安装 helm安装(官方) k8s yaml安装 动态配置安装 client agent安装 skywalking部署示意图 skywalking ui - web界面管理程序oap server - skywalking服务程序nacos - skywalking集…