软件工程:关于研发效能

如何提高研发效能

只有深入研发活动的本质,才能提高效能

提高研发效能,需要深入了解研发活动的本质,从纷乱的表象和层出不同的方法中,看到隐藏的模型,找到根本原因,然后从这些原则触发,具体问题具体分析,找到合适的方法。这种做的原因是,软件研发很灵活,在实践的时候总会见到不一样的状况。越是灵活的东西,就越需要理解其本质,这样才能做到随机应变。

有一个基本原则是“不要阻塞开发人员”。比如说,本地构建脚本的运行速度要足够块。开发人员在自己的开发机器上写完代码之后,都要运行这个脚本进行构建,把新做的改动在自己的开发机器沙盒环境上运行起来,以方便做一些检测。这个操作非常频繁,所以如何它的运行时间太长,就会阻塞开发。因此,确保这个脚本的快速运行就是内部工具团队的一个超高优先级的任务。我们对每次脚本的运行进行埋点跟踪,当运行时间超过了1.5min之后,我们就会停下手里的工作,想尽一切方法给这个本地构建加速。

为什么要有这个原则呢?因为开发流程的顺畅是生产优质软件的关键因素,只有这样才能最大程度的释放开发者的创造性和积极性

那软件开发的本质到底是什么呢?

软件开发本质上就是一条超级灵活的流水线。这个流水线从产品需求出发,经过开发、测试、发布、运维等环节,每一个环节的产出流动到下一个环节进行处理,最后交付给用户。

在这里插入图片描述
另外,这条流水线的每个环节都还可以细分。比如,本地开发环境可以细分为下面几个部分:

在这里插入图片描述
这种流水线工作方式,在传统的制造业中很普遍,也已经有了很多经验和成功实践。最典型的就是汽车生产中使用的丰田生产体系(Toyota Production System,TPS)。所以,我们可以参考传统制造行业的经验来提高效能。

事实上,瀑布模型就类似于传统流水线的处理方法:它强调每个环节之间界限分明,尽量清晰的定义每一个环节的输入和输出,保证每一个环节产出的质量。但是和传统制造业相比,软件开发又具有超强的灵活性,体现在一下四个方面:

(1)最终产品目标的灵活性。传统流水线的目标确定,而互联网产品的最终形态通常是在不断迭代中逐步明确,相当于一个移动的标靶。尤其是最近几年,这一灵活性愈发明细。比如,在精益开发实践中,尝尝使用MVP(最小可行性产品,Minimal Viable Product)来不断验证产品假设,经过不断调整最终形成产品
(2)节点之间关系的灵活性,比如流水线上的多个节点可以相互融合。DevOps就是在模糊节点之间的边界,甚至有一些实践会直接去掉某些环节,或者融入到其他环节中。
(3)每个节点的灵活性。每一个生产环节都会不断涌现出新的生产方式 / 方法。比如测试,最近十多年就产生了测试驱动开发、Dogfood(狗粮测试)、测试前移等方法;最近又出现的测试右移,开始强调在生产环境中进行测试。
(4)每个节点上的开发人员的灵活性。跟传统制造业不同,流水线上的每一个工作人员,也就是开发者,都有很强的灵活性,主要表现在对一个相同的功能,可以选择很多不同的方式、不同的工具来实现。

基于这些特点,我们可以从以下四个方面去提高研发效能。
在这里插入图片描述
(1)优化流程。 主要针对特点 1 和 2,也就是最终产品目标的灵活性和节点间关系的灵活性,进行优化。具体来说:

  • 针对最终产品目标的灵活性,主要是提高流程的灵活性,让它能聚集最终产品的用户价值,以终为始的指导工作,击中移动的标靶。
  • 针对节点之间关系的灵活性,主要是聚集流水线的顺畅,以保证用户价值受到的阻力最小

(2)团队工程实践。主是针对特点 3,也就是每个节点的灵活性进行优化,聚集每一个生产环节的工程实践进行提高

(3)个人工程实践。主是针对特点 4,也就是每个节点上开发人员的灵活性,来提高个人研发效能。争取让每个开发人员都能适时地关注业务,以终为始,同时从方法和工具上提高开发效率

(4)文化和管理。任何流程、实践的引入和推广,都必须有合理的管理方法来支撑。同时,文化是一个团队工作的基本价值观和潜规则。只有建立好文化,才能让团队持续学习,从而应对新的挑战。所以,要提高效能,我们还需要文化和管理这个引擎。

优化流程、团队工程实践、个人工程实践以及文化和管理,就是我们提高研发效能需要关注的四个方面,也就是我们所说的研发效能模型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值