研发困扰
1、研发团队看起来人也不少,大家也很辛苦,加班也不少了,但是产品发布还是常常延期,上线后产品问题频发
2、用户需求从需求分析、产品设计、开发、测试最终流到部署,但最终发布的产品与用户需求偏差却很大
3、产品发布上线时出现大量提交、合并,导致最后时刻出现很多问题,团队成员集体熬夜加班,却将大把的时间花在了等待环境、等待验证上
4、开发提测质量不好,大量压力聚集到测试这一步,导致代码返工率很高。引入单元测试、代码审查,效果却都不明显
5、开发人员疲于应付业务,没有精力或者兴趣去精进技术,对 Git、命令行等强大工具的使用仅限于皮毛,士气低迷、工作效率低下
研发效能
定义
团队能够持续地为用户产生有效价值的效率
有效 性(Effectiveness)
效率(Efficiency)
可持续性(Sustainability)
本质
提高研发效能,需要深入了解研发活动的本质,从纷乱的表象和层出不穷的方 法中,看到隐藏的模型,找到根本原则,然后从这些原则出发,具体问题具体分析,找到合适的方法。
原则
不要阻塞开发人员
开发流程的顺畅是生产优质软件的关键因素,只有这 样才能最大程度地释放开发者的创造性和积极性
模型
软件开发本质上就是一条超级灵活的流水线。这个流水线从产品需求出发,经过 开发、测试、发布、运维等环节,每一个环节的产出流动到下一个环节进行处理,最后交付给用户
整体流水线
需求分析 --> 软件设计 --> 本地开发 --> 构建 --> 测试 --> 发布 --> 部署 --> 运维
本地开发流水线
编码 --> 调测调试 --> 静态检查 --> 自动化测试 --> 代码审查
软件开发具有超强的灵活性
最终产品目标的灵活性
传统流水线的目标确定,而互联网产品的最终形态通常是在不 断地迭代中逐步明确,相当于是一个移动的标靶
节点之间关系的灵活性
比如流水线上的多个节点可以互相融合。DevOps 就是在模糊节点之间的边界,甚至有一些实践会直接去掉某些环节,或者融入到其他环节当中
每个节点的灵活性
每一个生产环节都会不断涌现出新的生产方式 / 方法。比如测试,最近十多年就产生了测试驱动开发、Dogfood(狗粮测试)、测试前移等方法;最近又出现的测试右移,开始强调在生产环境中进行测试
每个节点上的开发人员的灵活性
跟传统制造业不同,流水线上的每一个工作人员,也就是开发者,都有很强的灵活性,主要表现在对一个相同的功能,可以选择很多不同的 方式、不同的工具来实现
研发效能模型
优化流程
主要针对特点 1 和 2,也就是最终产品目标的灵活性和节点间关系的灵活性,进行优化
具体来说,针对最终产品目标的灵活性,主要是提高流程的灵活性,让 它能聚焦最终产生的用户价值,以终为始地指导工作,击中移动的标靶
而针对节点之 间关系的灵活性,则主要聚焦流水线的顺畅,以保证用户价值的流动受到的阻力最小
团队工程实践
主是针对特点 3,也就是每个节点的灵活性进行优化,聚焦每一个生 产环节的工程实践进行提高
个人工程实践
主是针对特点4,也就是每个节点上开发人员的灵活性,来提高个人 研发效能
争取让每个开发人员都能适当地关注业务、以终为始,同时从方法和工具上 提高开发效率,实现 1+1>2 的效果
文化和管理
任何流程、实践的引入和推广,都必须有合理的管理方法来支撑
同时,文化是一个团队工作的基本价值观和潜规则
只有建立好文化,才能让团队持续学习,从而应对新的挑战
所以,要提高效能,我们还需要文化和管理这个引擎
度量
定义
从应用程序开发的生命周期中获取数据,并使用这些数据来衡 量软件开发人员的工作效率
目标
跟踪团队的表现、提高团队的绩效
通过确定研发效率指标,公司可以明确团队和成员的工作预期,从而使得开发人员能够目标性更清晰地投入研发
同时,这些生产指标可以作为“晴雨表”,帮助团队定位影响工作效率的不良因素,从而帮助团队消除这些因 素,最终达到团队更快乐、绩效更高的目的
提高项目计划的精确度
团队负责人可以通过度量来估算一个需求端到端的成本,包括 收集成本、设计系统成本、开发测试成本,以及运维成本等,来了解每项活动在项目总 成本中的占比,从而更好地确定这些活动的优先级
同时,我们可以了解哪些步骤有较 大风险和不确定性,从而提高预测项目进展的精准度
了解流程是否高效,寻找需要改进的关键领域
我们可以衡量进行每项研发活动所需的 时间,并估算其对质量和生产效率的影响,然后比较成本和收益,最终确定哪些步骤是 高效的,以及哪些步骤是需要改善的
我们还可以对不同的实践进行 A/B 测试,以此 来选择更好的方法
总结
提高团队绩效、提高计划精确度,以及寻找关键的待改进领域,这三个因素的结合有助于简 化工作流程,发现瓶颈,帮助团队持续改善现有产品的生命周期,从而更高效地生产出质量更好的产品
方法
困难
软件开发的灵活性决定了研发效能提升的困难性
可以关注的点太多
可以使用的方法也很多