软件研发人效提升之道,法,术,器,势

news2024/11/20 9:48:32

在华为的寒气传递之前,笔者已经在思考和实战如何提高研发人效。目的目标很明确: 提高软件研发人效,所谓的软件人效,简单粗暴的定义就是以最低单位人均成本,快速,高质量,高频率,安全地交付软件产品,且软件产品能够最终在生产环境里面被用上,从而能够为客户和用户创造价值。

有三点需要重点澄清:生产环境,价值和设计思维。

一个是软件产品只有最终能够在生产环境里面使用,才能才能算产生价值,换句话说,软件产品设计再好,功能在强大,界面再美观,测试再充分,没有在最终的生产环境被用户使用,就不能产生最终的价值;

所谓的价值,包括主观客观和价值价值;对于主观价值,比较好理解,飞机能够把乘客从一个城市运送到另外一个城市,这个是航空公司提供的客观价值;主观价值就是用户和客户的感受,比如给女朋友送一束花,其主观价值远远大于客观价值,能够让女朋友开心和幸福感!

这就要求我们在设计和交付软件产品的过程中,不但要交付功能,同时也要提升用户的使用体验,通过设计思维方法论来指导软件产品的研发,往往事半功倍,大大提升了软件产品交付的成功率。具体大家可以阅读Michael G. Luchs撰写的《从产品创新与管理全领域看不同情境下的设计思维应用》,非常完美的把设计思维应用道了产品设计当中。

在这里插入图片描述
图1 设计思维过程

所以我们将最终围绕价值来进行交付,借用 ITIL 4 的产品和服务价值体系框架模型,软件服务或者产品就是在把用户&客户的需求或者市场机会,通过服务价值链的各项活动转换成为最终用户&客户需要的价值。
在这里插入图片描述
图2 产品和服务价值体系框架模型

软件研发的人效就是要围绕价值,通过在适合自身团队的指导原则以及最佳实践加持下,进行不断地持续改进人效以提升服务价值链中各项活动的交付效率,没有最好只有更好,每一次提升的结束都是下一次的开始,以终为始! 当然在改进和提升人效的过程中,务必不忘初心,需要有治理来确保我们不会偏离我们预定的计划方向同时能够按照质量要求来按时按质的交付客户需要的价值[产品或服务]。那么对于提升软件研发人效到底有什么道,法,术,器,势呢?

道法术器势志出自老子《道德经》:道以明向,法以立本,术以立策,器以成事,势以立人。“以道御术”是道德经的主旨,即以道义来承载智术,悟道比修炼法术更高一筹。术要符合法,法要基于道,道法术三者兼备才能做出最好的策略,其分别对应了战略,原则,方针,思路,技术实战和工具平台。

在这里插入图片描述

软件研发人效提升之“道”

道以明向。“道”指的就是战略方向。比如产品应用到项目,项目中抽取标准化产品,加大和快速推进产品研发投入和进度,产品项目相互融合,最终在3~5年内成为行业前三的标杆企业。
在这里插入图片描述

软件研发领域保证做正确的事情远远重要于正确地做事。即使是千里马,如果南辕北辙,最终很难到达目的,即使到达目的,所花的时间和养马的草料也成倍增加。永远不要以战术上勤奋是掩盖战略上的懒惰。只有方向上对了,才能事半功倍,大大提升提升人效和研发的价值。

软件研发人效提升之“法”

法以立本,是实现价值观的最根本的宣言,方法、法理、原则、思路、方针等。法是在自然规则的运行中寻找和总结出来的一种方法,法是对道的诠释和总结。
在这里插入图片描述
类似于敏捷宣言,研发人效的提升也有其应该遵循的宣言和法理。上面5条宣言是国内能效专家总结出来的提高人效的5条法理。

从业务视角来看,业务价值高于职能目标,商业组织存在的目的之一就是通过业务给客户创建价值。业务就客户的需要,需求和痛点,职能目标很重要,但最终目的是围绕交付业务价值,正如上面的图2所示意,交付价值才是每轮的终点,周而复始。

从流程视角来看,全局优化高于局部优化。整个软件产品生命周期包括但不仅仅包括收集需求,业务分析,架构设计,开发,测试,运维,运营,其是一个高度合作高度分工细化的过程,需要各个组织和部门一起合作。局部最优是基础,同时也需要在一个整体全面的高度进行全流程的优化。正如精益生产里面提到的,在一条条交付业务价值的流水线上,可能是某一部分的停滞或者效率低下阻止或者拖慢了整个价值链的流动速度甚至停止流动,如果是某个停止流动,这个时候这个流水线上的工作人员都要停止手上的工作,一起来解决。如果是某个环节或者某几个环节效率低下,则需要进行系统性的思考,进行全局优化。

从技术视角来看,工程卓越高于工具平台; 工具平台是基础,正如古人云,工欲善其事必先利其器;从人效的角度来看,通过应用一系列适合组织团队现状的工具平台,能够大大提高工作效率和防止手工活动的出错。与此同时,工具是一种手段,解决的痛点需回归到提高软件质量,加快软件研发进度,通过内建质量和流程,让追求质量和能效的思想深刻印入研发人员的骨髓。让追求工程卓越的思想和行动落实在日常软件研发工作当中。

从数据视角来看,数据思维高于经验沉淀。对于同一件事件,经验因人的认知不同而不同;经验是对过去的总结,数据才能预测未来趋势。过去失败或者成功的经验,能够应用于应用和指导现在的工作;正如管理大师德鲁克所说,如果你不能测量它,你就不能管理它 [If you cannot measure it, you cannot manage it]。通过测量收集数据,预测未来,降低风险,提高软件开发的效率和质量。比如,通过监控观测应用程序,如果一旦有错误日志,立刻通知运维人员,从而在用户或者客户发现问题前,快速自动的处理。再比如,在敏捷项目开发过程,通过积累每个冲刺迭代时间盒内交付平均的用户故事点数,从而来进行工作的分配,避免大家的工作负荷均衡。

从组织视角来看,工程师文化要高于绩效管理。绩效管理对于提高组织效率和规范组织行为不可或缺,是一种从上而下的管理方式;软件开发工程师是软件交付的第一生产力。

软件研发人效提升之“术”

结合公司研发的基线和实际情况,引入适合自己公司研发的方法和实践。比如引入DevOps或者DevSecOps,引入敏捷开发方法;对于大规模团队甚至可以引入SAFe的开发方法。 但是是不是传统的瀑布开发模式就不能用了呢?答案是否定的。如果项目的周期很短,而且客户要的又很急,项目范围和需求也很明确,这个时候,按照以前的方法进行项目计划和管理也是一种可行之术。但是如果是进行产品研发,而且对产品未来的方向也不是特别的确定和明朗,这个时候应用Scrum的方法进行产品的研发和开发,也未必不是一种很好的方法。通过制定产品研发的重要里程碑并根据二八原则,先把产品和市场通过Design Thinking之后,对功能特性进行重要性和优先级排序,把重要的,价值大的,优先级高的,易于实现的先期排入到产品计划当中,从而实现快速迭代,快速交付到市场,从而快速进行反馈和修正,力求以最少的成本,获取并获得最快的市场反馈, 下面是网上找的一个解释Scrum入门的图。提高产品研发的成功率和成本,这未尝又不是提高研发人效的之术呢?
在这里插入图片描述
除了敏捷方法的Scrum之外,其他的研发的术可以根据公司的实际情况进行引入,裁剪和采用。

  • TDD[测试驱动开发]
  • BDD[行为驱动开发]
  • Unit Test
  • DevOps/DevSecOps
  • SAFe
  • ITIL
  • Lean
  • TOGAF
  • Scrum Of Scrum
  • 其他

软件研发人效提升之“器”

工欲善其事必先利其器,在软件研发的过程中,如果有利器在手,可以大大的提高研发的效率。比如通过DevOps/DevSecOps平台或者工程平台,提供一个持续集成持续部署的环境和平台,让开发人员专注于业务代码开发;在或者引入一些自动化代码扫描工具,比如SonarQube,能够自动化发现代码中的一些问题,从而帮助开发人员节省代码审核的时间和代码审核时一些问题的遗留。 此外在日常的开发过程中,要借助工具进行复用和标准化,比如根据数据库表自动生成代码的脚手架,通过Nexus进行构建物的版本管理和制品管理等,下面是在整个软件开发生命周期中通过一个维度展示的工具。

在这里插入图片描述
上面仅仅是列举了一小部分工具和思路,在实际研发工程中,可以工具公司团队自身的观察和特色,采用,开发定制自己的工具或者平台,当然前提是应用了工具平台之后能够大大提升研发效率。让研究适用工具的成本远远小于其带来的研发效率受益的提升即可。

需要额外指出的是,当前各行各业对信息的保护要求也来越高,国家和政府也越来越重视,所以DevSecOps近几年入星星之火之势,在国内也慢慢推广起来,比如周纪海博士的新书《DevSecOps实战》 就是国内第一本分享DevSecOps的书籍。整体来说DevSecOps的工具支持分为下面四大类:

  • 软件版权分析(Software Composition Analysis )
    商业版:BlackDuck,Veracode

  • 静态应用安全测试工具 (Static Application Security Test, SAST)
    商业版: Forfify, AppScan, CheckMarx
    开源版:FindSecBugs, Brakeman, PMD

  • 动态应用安全测试工具 (Dynamic Application Security Test, DAST)
    商业版: WebInSpect, Burp, AppSpider,NetSparker
    开源版: Zap, ZapProxy

  • 交互式应用安全测试工具 (Interactive Application Security Test, IAST)
    商业版: Contrast, Seeker

软件研发人效提升之“势”

势以立人,技术思想在不断的变化当中,这样就要求我们的团队能够不断的自我学习和反思。总结好的经验进行推广,总结不好经验进行避免以后犯同样的错误并想办法进行改进,同时也要求在适当的时候进行组织的变革,根据咨询的法则,任何问题归根结底都是人的问题,所以对团队进行教育培训并在适当的时候进行组织变革,消除提升研发人效得阻力,有时候会有意想不到的提升研发人效的效果。

改变人的思想远远比改变人的行为困难许多。组织,管理层和员工是执行提高人效实践的主体。每个人都有自己的舒适区和基于自己对以往世界观形成的思维定势,原则,实战,标准的靴子的落地需要引导管理层和员工走出自己的思维定势,教育培训是比不可少的环节之一。自己内部同事培训,在大多数情况有用和有效;考虑到内部同事之间相处时间过长,或者之间有各种利益的冲突,此时外部第三方培训在有的时候也是一种非常有裨益的充分补充。

教育培训之后,进行适当正确地组织变革也是一个充分必要条件。在大多数情况,根据人性管理理论,某些关键岗位管理者是进行人效提升实施的阻力。道理很简单,新人效提升计划和最佳实践如果实施取得很多成就和成果,其实是对以前分管领导的直接打脸;如果以前分管领导心胸开阔,积极拥抱变化,虚心接受,踏实实施,皆大欢喜;否则,现有保守领导巴不得实施不成功,看笑话,甚至落井下石。在咨询界有一个不成文的咨询法则,永远不要改变超过10%,如果超过10%就悄悄的实施。目前进行组织变革的方法和实战有很多,其中ADKAR[Awareness 认知, Desire 渴望,Knowledge 知识,Ability 能力,Reinforcement 巩固 ]是一种值得推荐的方法。

  • Awareness 认知:
    行为者是否知道计划进行的变革,以及变革的必要性和重要性。
  • Desire 渴望:
    行为者是否有变革的意愿,对变革有什么期待,支持还是反对。
  • Knowledge 知识:
    行为者是否掌握了开展此项变革所必需的知识。
  • Ability 能力 :
    行为者是否有足够的能力领导、实施并完成此次变革。
  • Reinforcement 巩固 :
    行为者是否有措施来固化变革后形成的状态、习惯和成果。
    在这里插入图片描述

总结

古为今用,老子《道德经》虽已经历经千年,但是其先哲的智慧亦犹如天上的星光闪耀的星星,指引并指导我们的生产和生活,当然也包括指导提升软件研发人员的人效。通过从战略到方法到工具到文化,从各个层面结合公司实际的研发情况,从上到下,从下到上探索并找到适合自己团队的一条软件研发人效提升之路。软件改变生活,希望软件研发人效的提升能够减少研发浪费,平衡工作和生活,减少因战略上懒惰而引发的无意义的加班,让软件研发的人员的生活更美好, 让软件产品或者应用更被客户喜欢.

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

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

相关文章

C++笔记之bitset使用

C++笔记之bitset使用 文章目录 C++笔记之bitset使用0.进制介绍1.cppreference2.常规使用3.用法总结3.1.bitset是什么3.2.使用方法3.3.相关使用函数3.4.转换函数0.进制介绍 1.cppreference

C语言高级教程-C语言数组(五):二维(多维)数组初始化和基于数组的综合实例->帽子选购问题

C语言高级教程-C语言数组(五):二维(多维)数组初始化和基于数组的综合实例->帽子选购问题一、本文的编译环境二、二维数组的初始化三、三维数组的初始化四、使用for循环求三维数组元素值的和4.1、for循环求数组元素值…

行业周期分析的主要内容,怎么分析行业生命周期

如何分析经济周期? 很多人认为经济周期分析很难,很复杂。但是作为一个投资者,必须了解一定的经济周期分析原理。所以今天康少就用一张图来简单讲解下经济周期的分析。 一、经济周期判断1、经济趋向繁荣:普通股收益将大幅提高&am…

第07篇:巧用Spring类型转换, ConverterFormatter知识点学习。

公众号: 西魏陶渊明 CSDN: https://springlearn.blog.csdn.net 天下代码一大抄, 抄来抄去有提高, 看你会抄不会抄! 文章目录一、前言1.1 类型转换1.2 格式化输出二、Converter 类型转换2.1 Converter2.1.1 接口定义2.1.2 接口功能2.2 ConverterFactory2.2.1 接口定义…

java8特性,lambda表达式,简写的演变及应用

🍬博主介绍 👨‍🎓 博主主页:chad_chang的主页 ✨主攻领域:【大数据】【java】【python】【面试分析】 文章目录lambda表达式1.1.简介1.1.1.什么是Lambda?1.1.2.为什么使用Lambda1.1.3.Lambda对接口的要求1…

【Linux】特别篇--SMBus 协议

【Linux】特别篇--SMBus 协议一、SMBus 简介二、SMBus 与 I2C 区别三、SMBus协议分析3.1 符号含义3.2 SMBus Quick Command3.3 SMBus Receive Byte3.4 SMBus Send Byte3.5 SMBus Read Byte3.6 SMBus Read Word3.7 SMBus Write Byte3.8 SMBus Write Word3.9 SMBus Block Read3.1…

672页21万字智慧高速数据中心大数据平台建设方案

目 录 第1章 设计总述 6 1.1 项目概述 6 1.1.1 项目名称 6 1.1.2 建设单位概况 6 1.1.3 公司具备的优势 6 1.2 对项目的理解分析 7 1.2.1 项目现状分析 7 1.2.2 建设目标分析 10 1.2.3 建设内容分析 13 1.2.4 项目建设重难点分析 19 1.2.5 项目风险分析 22 1.2.6 各中心职能需求…

python控制台颜色输出设置

python控制台颜色输出设置 控制台输出内容的颜色有前景色与背景色 控制台的展示效果有限,并不能像前端一样炫酷,只能做一些简单的设置 原理 python终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无…

【C++笔试强训】第十天

🎇C笔试强训 博客主页:一起去看日落吗分享博主的C刷题日常,大家一起学习博主的能力有限,出现错误希望大家不吝赐教分享给大家一句我很喜欢的话:夜色难免微凉,前方必有曙光 🌞。 💦 &…

操作系统的地址、数据存储和大小端问题

文章目录基本概念什么是位,什么是字节?地址总线内存地址物理地址虚拟地址寻址空间存储单元CPU位数CPU寻址大端存储和小端存储原理为什么会有大小端模式的区分基本概念 什么是位,什么是字节? 位表示的是二进制位,一般…

C语言中用sizeof和strlen观察数组的变化2

目录 一.前言 二.用sizeof观察字符串数组的变化 代码 运行结果 结果解释 图解 三.用sizeof观察字符数组的变化 代码 注意 运行结果 图解 注意 证明 一.前言 数组名大部分情况下是首元素的地址,只有两种情况除外: sizeof(数组名&…

哈希桶的基本操作 || HashMap和HashSet介绍(手撕源码)

目录 前言: 哈希表介绍 哈希冲突 闭散列 开散列(哈希桶) 模拟实现哈希桶中插入和获取方法 代码实现 HashMap介绍 手撕源码 HashSet介绍 手撕源码 小结: 前言: 🎈一棵搜索树的最快查找数据的时间复杂度是O(…

Java------String类和正则表达式

String在设计时被定义成了final类(最终类),所以不能定义String类的子类,String用来表示字符串常量,是引用数据类型,一旦String类对象的字符序列被定义,那么这个字符序列的值是不能再变化的。 创…

今年十八,喜欢SQL注入

#1024程序员节|用代码,改变世界# 前言 🍀作者简介:被吉师散养、喜欢前端、学过后端、练过CTF、玩过DOS、不喜欢java的不知名学生。 🍁个人主页:被吉师散养的职业混子 🫒每日emo:怀揣…

牛客竞赛每日俩题 - Day5

DP贪心 年终奖_牛客题霸_牛客网 思路: 定义f(i,j)表示从左上角走到坐标(i,j)处能获得的最大奖励。 搜索所有从左上角走到右下角的路径,找到最优路径。 f(i,j)分三种情况: 第一列:f(i, 0) f(i-1, 0) board(i, 0) 如果…

Java:企业应该用Java构建供应链软件吗?

很多公司使用Java编程语言,Java是最流行的编程语言之一,它帮助开发人员简化复杂企业解决方案的应用程序开发过程。 供应链是零售和制造业的重要组成部分,6%的零售业公司使用Java,另一方面,4%的制造公司使用编程语言&am…

基于莱维飞行扰动策略的麻雀搜索算法-附代码

基于莱维飞行扰动策略的麻雀搜索算法 文章目录基于莱维飞行扰动策略的麻雀搜索算法1.麻雀优化算法2. 改进麻雀算法2.1 莱维飞行搜索机制2.2 莱维飞行扰动策略2.3 初始化混沌搜索机制3.实验结果4.参考文献5.Matlab代码6.Python代码摘要:为了解决麻雀搜索算法存在迭代…

(02)Cartographer源码无死角解析-(04) 熟悉bag文件,配置.launch与.lua文件,初步调参

本人讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解(02)Cartographer源码无死角解析-接如下: (02)Cartographer源码无死角解析- (00)目录_最新无死角讲解:https://blog.csdn.net/weixin_43013761/article/details/127350885 文…

算法 | 详解斐波那契数列问题

14天阅读挑战赛 本篇是学习了《趣学算法(第2版)》 第一章之后总结的。 上一篇讲到了等比数列求和问题,求Sn122223...263?S_n 1 2 2^2 2^3 ... 2^{63} ?Sn​122223...263?,该函数属于爆…

1024,我们节日

文章目录1024的前奏1024应该锻炼身体1024 ?为何是1024其他的1024代码有Bug,世界却温暖特殊的一类人群(一)特殊的一类人群(二)写在最后1024的前奏 写博文的时间是23号,距离1024这个标志性的节日…