为什么需要提升软件研发效能
现代的软件行业已经不再是以前“大鱼吃小鱼”的时代了,而是转变成了“快鱼吃慢鱼”的时代,各企业比拼的是需求转化成软件或服务的研发效率。软件研发效能定义
研发效能(E3CI中的E)分为三个维度,分别是偏工程视角的效率,偏业务视角的效果、以及持续达成效率和效果的卓越能力。而研发效能是需要度量获得认知(C),加上实践改进(I)从而实现的。持续:不能时断时续,小步快跑才是正道,不要憋大招;理想情况下更多的时间占比应该放在”未雨绸缪象限“,少量时间用于”救火象限“研发效能工具一定是能解决实际问题
需要从全局理清全流程,识别出等待浪费的时间,通过流程再造与优化实现全局效率的提升。效能提升成功的标准是用户的成功。研发效能提升的落地遵循”先圈地,后改进“的策略使用MVP(minimum viable product)的思想提升研发效能,即用最快、最简明的方式建立一个可用的产品原型,然后迭代来完善细节。例如,研发平台的建设,识别出待解决的问题之后,给出最简单的解决方案,并在后面的实践中不断优化和迭代。- 从痛点入手:早期阶段,采用自下而上的策略,从一个工程实践中的实际痛点入手,从解决问题的角度打造研发效能的亮点,追求”短、平、快“,遵循将问题点逐个击破的原则。
- 从全局切入:需要从全局理清楚全流程,识别出等待浪费的时间,通过流程再造与优化实现全局效率的提升。
- 用户获益:成功的标准不是研发效能平台的成功,而是客户的成功。
- 持续改进:问题在开始时,关注点是如何快速、简单地解决问题,但是当用户量和接入团队日益增大后,需要关注解决方案的普适性和通用性,采用”先圈地、后改进“的策略
- 全局优化:前期采用”自下而上“的工程实践来实现各种痛点的问题的各个击破,随着研发效能实践逐渐进入深水区,单一领域效能提升的边际效应会逐渐递减,此时基于横向拉通的全局优化变得非常关键,自上往下的推动在此时将会起到关键的作用。很多横向跨部门的流程优化和整合必须借助管理层的力量才能有效地向前推进。
- 效能平台架构的灵活性:研发效能的开发能力非常关键,它必须能够应对多样性,让业务线能够在平台上实现各自的个性化需求。
虚拟指标案例:接入工程数,系统用户数,接入研发效能平台的项目数研发效率提升案例
1)采用前端代码的自动生成,大幅提升原型构建环节的效率;手绘出GUI界面的草稿,然后通过Sketch2Code直接将草稿转换成目标平台的代码。2)采用工具或脚本生成临界参数进行API测试,进一步将该机制与CI流水线集成,在CI被执行过程中主动执行临界参数下的API测试,以求问题更早地被暴露。4)本地编译耗时长:提供增量编译和分布式编译能力。5)本地测试困难,测试环境准备复杂且耗时长:基于kubernts的pod提供一键搭建测试环境的能力。6)自动化测试用来数量大,执行回归时间过长:采用并发测试用例执行机制,使用几百,几千台测试执行机并行测试用例,实现用硬件资源换时间。7)自动化测试用例维护成本高:测试用例采用模块化和分层体系,实现低成本的自动化用例维护。8)测试数据准备困难:引入统一的测试数据服务能力。9)研发后期阶段,代码递交集中,缺陷井喷:推行测试左移策略,鼓励研发自测,遵循”谁开发,谁测试,谁上线,谁值班“的原则。10)性能缺陷在研发后期发现,修复重测成本居高不下:从性能测试转变为性能工程,让性能融入软件研发的各个环节,而不是最后的一锤子买卖。12)集群规模庞大,发布过程耗时过长:各个层级的并发部署能力,集群内节点的并发,集群间的并发等。13)项目的过程数据都是后期集中填充,失去度量意义:项目的过程数据由工具自动填充。研发效能发展方向与未来展望
1、效能与质量相辅相成
高频的工作能够带来更早的风险暴露,继而更好地保障质量,而高频的前提是高效。关注质量,生产率自然会随之提高。效能的提升能够将软件研发中的风险更快、更及时地暴露出来,同时减轻人脑负担,反过来又能提升质量本身。2、霍桑效应
起源于1924年至1933年间的一系列实验研究:实验者对新的实验处理会产生正向反应,即由于环境改变而改变行为,所以生产率的提高并非由实验操控造成的。这种现象称为”霍桑效应“。1)负面影响:霍桑效应会造成度量结果的偏差,降低下信息价值,最终影响效能提升决策。双盲实验法:让实验者和对照者都不知道自己是在做实验。环境弱化法:尽可能弱化实验结果给实验者带来的影响,尽可能弱化环境变化,工具变化,流程变化等内容,不设定KPI,避免不必要的访谈等工作。2)正面影响:与员工谈话,让员工发泄自己的不满,能使员工干劲倍增,大幅度提高生产效率。企业中通过各种座谈会,复盘会,一对一面谈等形式对员工进行心理建设,其实质是霍桑效应的一种应用,是对人性的尊重。给大家的启示:渴望尊重和欣赏,是人性的需求之一。适度的关注和赞美能够产生强烈的心理暗示,继而带来效能的提升。3、摩尔定律和反摩尔定律
- 集成电路芯片上所集成的电路数目,每隔18个月翻一番;
- 微处理器的性能每隔18个越提高一倍,而同期价格下降一半;
反摩尔定律:一个公司今天要想和18个月前卖掉同样多,同样质量的产品,它的营业额就会下降一半。越迟交付的价值其价值越低,我们的目标是快速地交付高质量的产品,那么在研发效能上也应采取相应的手段进行支撑。传统的瀑布模型是”反摩尔定律“的。4、信息熵
1948年香农提出了”信息熵“的概念,解决了信息的量化度量问题。公式中pi是指某信息出现的概率。假设书本总共20万字,”研发效能“出现1000次,那么出现的概率=1000/20万=0.5%,把所有词语出现的概率都统计出来,用上面的公式计算得出该书的信息熵。- 通过公式推导得出,符号越少,信息熵越小,故语音输出的效率不高。
- 人的沟通也有带宽(语速和信息量),丢包(没听清楚),延迟(传输介质影响),协议转换等因素,这些因素会削弱信息量和信息价值。对抗熵增最有效的方式是成为开放系统—对外保持能量、信息、资源的交换。向外部学习,与世界协作。
5、自解释编程
自解释的代码不是无注释和无文档的代码,而是伴随着高信息熵的代码体系,内容简洁合理的注释与文档同样也是优秀代码的一部分,能够给效能的提升带来帮助。6、可视化
数据可视化,以图像为载体将数据背后的故事叙述出来,使人一目了然。项目管理中的可视化方法:看板,甘特图,燃尽图,效能数据可视化。7、竖井效应
指公司内的各个职能团队各自为政,均达到了局部的高效,然而从全局看却不见得高效。8、墨菲定律
一项风险的实际发生,往往意味着未来也很可能会再次发生该风险。9、集成
指部分向整体合并的过程,例如某工程师研发的代码,将其合并到主干的过程就是集成,其中涉及编译,打包,构建,单元测试等工作。10、交付
指将软件产品移交给质量团队或用户评审的过程,评审完成的下一步就是部署至生产环境。11、持续
通过将任务化整为零,由单个节点完成一部分工作后,交由下一节点执行,但任何一个节点出现问题时就是执行快速失败,加快了周转速度,能够及早暴露问题。“万事万物都有自动变乱、变散、变废的天然倾向,要让东西保持整齐有序,你就必须不断花力气收拾;一旦停止努力,一切就会重归混乱。”即,在一个封闭系统里,无序程度(熵)只会不断增加,不会自动减少。
举个例子:你整理你的房间(秩序的脆弱性)
过程:你今天花了一下午大扫除,房间整洁有序(低熵状态)。但接下来一周你正常生活,书本、衣服、零食包装自然散布在各处。房间不会自动变整洁,只会自动变乱。一周后它必然更乱(熵增加了)。
威力体现:为了逆转这个过程(让房间重新有序),你必须再次付出体力、时间和精力。这说明维持秩序需要持续消耗能量,而破坏秩序则毫不费力——这就是熵增的“自然流向”。它解释了为什么整理永远是一场对抗自然的战斗。
建立个人的知识系统—终身学习,对抗思维僵化
对抗方法:定期阅读、深度思考、与优秀者交流、不断学习新技能。封闭的知识体系会过时、固化(思维熵增)。比如个人年度目标的设定与达成的过程,“你走的每一步都算数”,都有其意义,说不定在某一个时刻你就用上了你多年前某一个时间段学习的技能或者概念。所有的正确的学习方法均建立在准确的理解其概念上的。
核心理念:像呼吸一样,持续吸入高质量信息(负熵流),更新认知模型,保持思维的有序性和适应性。
熵增定律就像宇宙的“衰老法则”:一切都会自发走向衰败散乱,而所有秩序与生机,不过是与这条铁律短暂抗争时闪耀的火花。
生命的意义,或许就在于我们明知宇宙终将归于沉寂,却依然选择在这段时间里,燃烧能量,创造并守护自己所珍视的秩序、美好与爱。
这正是人类文明最悲壮也最辉煌的抵抗。