工程效能是什么呢?工程效能是研发团队能够持续为用户产生有效价值的效率,包括有效性、效率和可持续性三个方面。
一提到工程效能,大家脑子里马上会浮现持续构建、持续发布、开发流程改进等词汇,往往会忽略有效性。有效性,指的是软件产品给用户带来的价值,如果研发团队辛辛苦苦开发了一个系统,交付给用户后,这个系统并没有很好地解决用户的实际问题,那么研发团队的工作就是无效的。所以,工程效能里首先强调的就是有效性,否则做得再快都是徒劳的。
要想提高工程效能,就必须深入到软件开发的整个过程当中,研究软件开发过程的本质,才能够从纷乱的表象中,找到根本性的原则。如图所示,是软件开发过程闭环图。
软件开发的整个生命周期,包含6个部分:需求分析、软件设计、程序开发、测试、发布、运营。在运营的过程中发现新的需求,于是又从需求分析开始,不断循环迭代。
工程效能提升的关键就是从以上6个环节入手,确保输入和输出的质量与速度,从每个节点的优化,再到整个软件研发流水线的优化。
总结下来,工程效能的优化,可以从以下四个方面进行。
一、优化研发流程
需求分析。关注需求价值的管理,建立需求价值的判定规则,根据公司当前的战略重点,对需求价值、项目价值进行评定,例如,公司当前以拓展市场为主要目标,那么与拓展市场相关的需求优先级就高一些,与之无关的需求,优先级就相对低一些,如OA办公系统、培训系统等。
软件设计。在设计环节,重点是提高设计交付物的简明化,这里并不强调文档交付的格式和标准,需要根据每个团队自身的情况来制定,成熟度比较高的团队,经过了长时间磨合,产品设计人员只需要通过简单的讲解,辅助一些流程图、页面要素定义和原型等,就可以清楚地表达设计意图,开发人员和测试人员也能够很好的理解,这就达到了比较好的状态,不需要设计人员写几十页的设计文档。
程序开发。在给予一定工作自由度的同时,工程师需要遵守相关的规约,如编码规范、文档注释、自测用例的覆盖度等,通过一个个项目来提升自己的职业素养。其次,工程师要快速解决问题,把这一点视为有效工作的标准,不要执着于“玩”一些新技术,把代码质量和按时交付抛在一边,就本末倒置了。另外,工程师在完成自己工作的同时,要积极配合测试人员完成模块测试,帮助接口提供方或调用方完成对接口的联调,如果接口有任何变动要及时通知相关方,接口定义完成后,建议立刻提供MockService给调用方,前后端工作就可以同步进行了。
测试。测试工作的重心放在测试用例的编写、对业务逻辑的梳理和学习上,尽可能把手动测试的工作工具化,从接口到界面尽量用自动化测试工具,许多云测试工具是不错的选择,包括App兼容适配测试等,都可以做到云端测试。
发布。随着虚拟化、云计算等技术的发展,发布技术和工具日益强大,许多公司在开源套件的基础上,都建立起了自己的CI、CD平台,实现DevOps研发、测试、发布、运维一体化,实现了A/B测试、灰度发布等极大提升效率的工程实践。
运营。发布结束并不意味着软件生命周期的结束,实际上万里长征才踏出第一步,产品经理、运营人员、项目经理等核心人员必须关注软件交付后的运营情况,对产品经理来说,这个阶段是验证需求有效性非常重要的环节,然而许多公司的产品研发团队对运营环节重视度不够,久而久之就会与业务方的想法产生隔阂,技术人员不能很好地理解业务需求,导致开发的有效性降低,所以产品研发团队必须在日常工作当中关注运营进展,提高业务敏感度。
二、团队工程实践
开发环境。开发环境包括机器、IDE、版本管理工具等开发所需的软硬件设施。国内许多企业越来越重视这些因素,如给开发人员配备笔记本、台式机、高分辨率的电脑屏幕、移动端开发用的手机,甚至符合人体工学的办公桌椅等,这些都是非常好的实践,提升了员工办公体验的同时,也提高了工作效率。
许多公司也开始重视代码审查,为什么强调做代码审查呢?因为代码审查,一来能够及时发现代码中的问题,并且能够提高开发人员的编码能力,再者能够提高代码质量,促进代码规范的统一,同时也达到了知识共享的目的。代码审核包括增量审核、全量审核,根据员工的特点和所处的阶段可以分别采用。
开发速度与代码质量。在日常开发工作当时,迭代的安排是比较紧凑的,为了应对快速变化的市场,开发人员会做很多的“临时方案”,这些方案逐渐变成了技术债。因此,有计划的还“技术债”能够避免工程质量的坍塌,让系统更持久的运行。同时,开发人员要有意识地做持续重构,通过工程再造、抽象、拆分等措施,把代码和架构持续优化。
左移、右移测试。所谓的左移、右移测试,是相对于常规测试而言的,从图9-6中可以看出,测试的上一个环节是开发,下一个环节是发布,左移测试指的是在开发环节进行前置测试,包括开发的测试用例执行、代码中包含测试代码等,指标包括测试用例代码覆盖率、送测一次通过率等。右移测试指的是在发布环节的测试,即代码部署完成,连接线上数据,进行预发布测试,以及发布完成后在生产环境做冒烟测试、手工测试等。
灰度、蓝绿、红黑发布。灰度发布,也叫金丝雀发布,是指在黑与白之间能够平滑过渡的一种发布方式。在其上可以进行A/B测试,即让一部分用户继续使用产品特性A,一部分用户开始使用产品特性B,如果用户对B没有什么反对意见,那么就逐步扩大范围,把所有用户都迁移到B上面来。金丝雀发布的由来,是以前旷工下矿洞前,会先放一只金丝雀进去探测是否有有毒气体,看金丝雀能否活下来,金丝雀发布由此得名。
蓝绿发布。蓝绿发布 (Blue Green Deployment) 是一种平滑过渡的发布模式。蓝绿发布的操作模式,首先依赖于能够将全站应用划分为对等的A、B两个单元,A先发布新产品代码并引入少许用户流量,B继续运行老产品代码;如果新代码A经线上运行观察没有迹象表明有问题,或者用户行为对A中的变化没有特别的反馈,那么逐步引入更多用户流量,直至所有用户都访问新产品。
红黑发布。这是Netflix采用的部署手段,Netflix的主要基础设施是在AWS上,所以它利用AWS的特性在部署新的版本时,通过AutoScaling Group用包含新版本应用的AMI的LaunchConfiguration创建新的服务器。如果测试不通过,找到问题原因后,直接“干掉”新生成的服务器及Autoscaling Group就可以了;如果测试通过,则将ELB指向新的服务器集群,然后销毁旧的服务器集群及AutoScaling Group。红黑部署的好处是服务始终在线,同时采用了不可变部署的方式,也不像蓝绿部署一样得保持冗余的服务始终在线。
云化提效。中小型软件公司尤其适合云化提效,把测试环境、生产环境部署在云端,通过第三方云平台的成熟套件进行环境搭建,包括机房负载、安全防护、数据库搭建、服务器环境安装等。如果按照传统的方式,需要专业的数据库工程师、运维工程师和网络工程师采用云端的方式,这些都省了,只需要按月付费即可。云化还有一个好处,就是让应用能够实现高可伸缩性,这在过去是一笔巨大的投入,现在云化就像自来水一样,按需付费,人人都可以使用。
三、个人工程实践
个人高效能原则。个人工程效能提升,要关注一些基本的原则,例如,当接收到一个需求的时候,不要着急动手编码,要对模块进行抽象、拆分,做适度的工程化处理,否则随着工程复杂度的增加,代码会变得难以维护,灾难也就不远了。在工程化的同时,还要注重快速迭代原则,回归工程师的本质。工程师的本质就是用工程的方法,解决业务上的实际问题,快速搞定是工程师的基本要求。
番茄工作法。番茄工作法,是一种帮助深度高效工作的方法。具体做法是,选择一个待完成的任务,将番茄时间设为25分钟,专注工作,中途不允许做任何与该任务无关的事,直到番茄时钟响起,然后在纸上画一个X短暂休息一下(5分钟就行),每4个番茄时段多休息一会儿。
番茄工作法极大地提高了工作的效率,还会有意想不到的成就感。市面上有许多软件、App都提供番茄钟的功能,可以尝试使用,以帮助进一步提升工作效率。
四、文化驱动
之前的文章讲过“奈飞”文化,了解了硅谷科技公司是如何打造高效工程师文化的。好的文化能够帮助团队提高整体效率、帮助公司实现业绩增长。这里就不多展开了。
以上内容,摘自畅销书《技术人修炼之道》,作者黄哲铿,曾担任1号店 技术总监、壹药网 技术副总裁、海尔农业电商CTO,出版过畅销书《技术管理之巅》,擅长互联网大型系统研发、大型技术团队治理、区块链创新等。
记得关注@技术领导力
与我一起,提升认知与见识
↓↓↓