在华为的寒气传递之前,笔者已经在思考和实战如何提高研发人效。目的目标很明确: 提高软件研发人效,所谓的软件人效,简单粗暴的定义就是以最低单位人均成本,快速,高质量,高频率,安全地交付软件产品,且软件产品能够最终在生产环境里面被用上,从而能够为客户和用户创造价值。
有三点需要重点澄清:生产环境,价值和设计思维。
一个是软件产品只有最终能够在生产环境里面使用,才能才能算产生价值,换句话说,软件产品设计再好,功能在强大,界面再美观,测试再充分,没有在最终的生产环境被用户使用,就不能产生最终的价值;
所谓的价值,包括主观客观和价值价值;对于主观价值,比较好理解,飞机能够把乘客从一个城市运送到另外一个城市,这个是航空公司提供的客观价值;主观价值就是用户和客户的感受,比如给女朋友送一束花,其主观价值远远大于客观价值,能够让女朋友开心和幸福感!
这就要求我们在设计和交付软件产品的过程中,不但要交付功能,同时也要提升用户的使用体验,通过设计思维方法论来指导软件产品的研发,往往事半功倍,大大提升了软件产品交付的成功率。具体大家可以阅读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 巩固 :
行为者是否有措施来固化变革后形成的状态、习惯和成果。
总结
古为今用,老子《道德经》虽已经历经千年,但是其先哲的智慧亦犹如天上的星光闪耀的星星,指引并指导我们的生产和生活,当然也包括指导提升软件研发人员的人效。通过从战略到方法到工具到文化,从各个层面结合公司实际的研发情况,从上到下,从下到上探索并找到适合自己团队的一条软件研发人效提升之路。软件改变生活,希望软件研发人效的提升能够减少研发浪费,平衡工作和生活,减少因战略上懒惰而引发的无意义的加班,让软件研发的人员的生活更美好, 让软件产品或者应用更被客户喜欢.