24

“为什么你们开发这么慢?” 5页ppt讲透:硅谷10倍速工程效能提升,是怎么干的?

 4 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzA5MjE3NDQ1Mw%3D%3D&%3Bmid=2649706297&%3Bidx=1&%3Bsn=f9b77e958f90702c1e3e39ea1acbf97f
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

点击“ 技术领导力 ”关注    每天 早上8:30 推送

作者| Mr.K   编辑| Emma

来源| 技术领导力(ID:jishulingdaoli)

上一篇我们聊了,《 “为什么你们开发这么慢?” 3页ppt讲透:帕金森定律,低效正在杀死你的团队! 》,这两天收到许多读者的反馈:说好的下篇怎么还没来?

老K近期推出了“ K班出身 ”短视频号,通过短视频的方式讲技术、讲管理、讲职场人生,所以公众号更新慢了。感兴趣的读者,可以去 抖音(ID:KBCS) 、快手(ID:KBCS2020)围观老K,搜索 K班出身 关注,给老K三连击666,内容陆续更新中。

RJJbUzv.jpg!web

回到本文正题,我们先明确定义,工程效能是什么? 工程效能是研发团队能够持续为用户产生有效价值的效率,包括有效性、效率、可持续性,三个方面

一提到工程效能,大家脑子里马上会浮现:持续构建、持续发布、开发流程改进等词汇,往往会忽略有效性。 有效性,指的是软件产品给用户带来的价值 。如果研发团队辛辛苦苦开发了一个系统,交付给用户,这个系统并没有很好的解决用户的实际问题,那么研发团队的工作就是无效的。所以, 工程效能里首先要强调的就是,有效性,否则做得再快都是徒劳

老K的朋友约瑟夫,是海归技术大佬,在facebook工作过几年,跟他聊了聊fb在工程效能提升方面的实践,世界级互联网公司对工程效能提升是非常关注的,投入专门的技术团队进行流程优化、工具开发等方面的工作。

下面整理了硅谷公司的实践,结合老K带过上百人技术团队的经验,我们来聊一聊,如何提升开发团队的工程效能?

首先,要想提高工程效能,就必须深入到软件开发的整个过程当中,研究软件开发过程的本质,才能够从纷乱的表象中,找到根本性的原则。图9-6是软件开发过程闭环图。

BnYZ3m6.jpg!web

软件开发的整个生命周期,包含6个部分:需求分析、软件设计、程序开发、测试、发布、运营。在运营的过程中发现新的需求,于是又从需求分析开始,不断迭代。

工程效能提升的关键,就是从以上6个环节入手,确保输入和输出的质量与速度,从每个节点的优化,再到整个软件研发流水线的优化。总结下来,工程效能的优化,可以从以下四个方面进行:

01

研发流程 全链路优化提效

需求分析。关注需求价值的管理,建立需求价值的判定规则,根据公司当前的战略重点,对需求价值、项目价值进行评定,如:公司当前以拓展市场为主要目标,那么跟拓展市场相关的需求优先级就高一些,比如OA办公、培训系统等等,相比之下优先级就没那么高。

软件设计。在设计环节,重点提升设计交付物的简明,这里并不强调文档交付的格式和标准,需要根据每个团队自身的情况来制定,成熟度比较高的团队,经过了长时间磨合,产品设计人员只需要通过简单讲解,辅助一些流程图、页面要素定义、原型,就可以清楚的表达设计意图,开发人员和测试人员也能够很好的理解,这就达到了比较好的状态,不需要设计人员写几十页的设计文档。

程序开发。在给予一定工作自由度的同时,工程师需要遵守相关的规约,如编码规范、文档注释、自测用例的覆盖度等等,通过一个个项目来提升自己的职业素养。其次,工程师要快速解决问题,把这一点视为有效工作的标准,而不是去玩一些新技术,结果把代码质量和按时交付抛在一边,就本末倒置了。

测试。测试工作的重心放在测试用例的编写,对业务逻辑的梳理和学习,尽可能把手动测试的工作工具化,从接口到界面尽量用自动化测试工具,许多云测试工具是不错的选择,包括App兼容适配测试等等,都可以做到云端测试。

发布 。随着虚拟化、云计算等技术的发展,发布技术和工具日益强大,许多公司在开源套件的基础上,都建立起了自己的CI、CD平台,实现DevOps研发、测试、发布、运维一体化。实现了A/B测试、灰度发布等极大提供效率的工程实践。

运营。发布结束并不意味着软件生命周期的结束,实际上万里长征才踏出第一步,产品经理、运营人员、项目经理等核心人员,必须关注软件交付后的运营情况,对产品经理来说,这个阶段是验证需求有效性非常重要的环节,然而许多公司的产品研发团队对运营环节重视度不够,久而久之就会跟业务方的想法产品隔阂,技术人员不能很好的理解业务需求,导致开发的有效性降低,所以产品研发团队必须有日常工作当中关注运营进展,提升业务敏感度。

ZRVvAr6.png!web

02

团队工程效能提升

一群人如何走得更快、更远?

开发环境。开发环境包括,机器、IDE、版本管理工具等开发所需的软硬件设施。国内许多企业都越来越重视这些因素,比如给开发人员配备一台笔记本、一台式机、高分辨率的电脑屏幕、移动端开发用的手机,甚至符合人体工学的办公桌椅等等,这些都是非常好的实践,提升了员工办公体验的同时,也提升了工作效率。

许多公司也开始重视代码审查,为什么强调做代码审查呢?因为代码审查,一来能够及时发现代码中的问题,并且能够提升开发人员的编码能力,再者能够提高代码质量,促进代码规范的统一,同时也达到了知识共享的目的。代码审核包括增量审核、全量审核,根据员工的特点的阶段可以分别采用。

开发速度与代码质量。在日常开发工作当时,迭代的安排是比较紧凑的,以应对快速变化的市场,开发人员会做很多的“临时方案”,这些方案逐渐变成了技术债。因此,有计划的还“技术债”能够避免工程质量的坍塌,让系统更持久的运行。同时,开发人员要有意识做持续重构,通过工程再造,抽象、拆分等措施,把代码和架构持续优化。

左移、右移测试。所谓的左移测试、右移测试,是相对于常规测试而言的,从图9-6所示,测试的上一个环节是开发,下一个环节是发布,左移测试指的是在开发环节进行前置测试,包括开发的测试用例执行,代码中包含测试代码等等,指标包括:测试用例代码覆盖率、送测一次通过率等等。右移测试指的是,在发布环节的测试,即代码部署完成,连接线上数据,进行预发布测试,以及发布完成后在生产环境做冒烟测试、手工测试等等。

灰度、蓝绿、红黑发布。灰度发布,也叫金丝雀发布,是指在黑与白之间,能够平滑过渡的一种发布方式。在其上可以进行A/B testing,即让一部分用户继续用产品特性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。红黑部署的好处是服务始终在线,同时采用不可变部署的方式,也不像蓝绿部署一样得保持冗余的服务始终在线。

云化提效。中小型软件公司尤其适合云化提效,把测试环境、生产环境部署在云端,通过第三方云平台的成熟套件,进行环境搭建,包括机房负载、安全防护、数据库搭建、服务器环境安装等等。如果按照传统的方式,需要专业的数据库工程师、运维工程师、网络工程师,采用云端的方式,这些都省了,只需要按月付费即可。云化还有一个好处,就是让应用能够实现高可伸缩性,这在过去,是一笔巨大的投入,现在云化就像自来水一样,按需付费,人人都可以使用。

03

个人工程效能提升

从原则、方法、工具,来武装每个工程师

个人高效能原则。个人工程效能提升,要关注一些基本的原则,比如当接收到一个需求的时候,不要着急动手编码,要对模块进行抽象、拆分,做适度的工程化处理,否则随着工程复杂度的增加,代码就会变得难以维护,灾难离你就不远了。在工程化的同时,要注重快速迭代原则,回归工程师的本质,工程师的本质就是用工程的方法,解决业务上的实际问题,快速搞定是工程师的基本要求。

yqqiYnY.png!web

番茄工作法。番茄工作法,是一种帮助你深度高效工作的方法。具体做法是,选择一个待完成的任务,将番茄时间设为25分钟,专注工作,中途不允许做任何与该任务无关的事,直到番茄时钟响起,然后在纸上画一个X短暂休息一下(5分钟就行),每4个番茄时段多休息一会儿。

番茄工作法极大地提高了工作的效率,还会有意想不到的成就感。市面上有许多软件、App都提供番茄钟的功能,可以尝试使用,以帮助你进一步提升工作效率。

04

硅谷10倍速工程效能提升的秘密

跟奈飞学习工程师文化

文化好比企业的DNA,它决定了企业如何思考,如何行动。因此,研究硅谷公司,就必须关注它的公司文化。老K研究过硅谷非常有名的「奈飞文化手册」,下面我们来聊一聊以奈飞文化为代表的,硅谷工程师文化。

奈飞(Netfilx)文化的核心是“自由”与“责任”。它认为现代企业的核心就是“人管人”,跟传统公司领导管下属的方式不同,这里的人管人,前后两个人是同一个人,自由与责任的核心就是要将权力还给员工,让员工在自由环境中充分展现自己的能力,履行自己的责任。我们从奈飞文化的8个原则当中,能够窥探硅谷工程师的文化精髓:

YbAvuuj.jpg!web

1) 我们只招成年人 。奈飞不招巨婴,成年人能够自己管理好自己。

2) 要让每个人都理解公司业务 。尽量告知员工他所处环境中的所有信息,然后由他来判断怎样行动是最合理的,而不是只告诉他你认为他需要的信息,让他严格按照指令来行事。

3) 绝对坦诚,才能获得真正高效的反馈 。奈飞的文化支柱之一,是要开诚布公。如果某个人对另一名同事有意见,最好的方式就是当面沟通。

4) 只有事实才能捍卫观点 。在奈飞,员工可以有自己的意见,也可以为自己的意见辩护,但意见要始终以事实为依据。

5) 现在就开始组建你未来需要的团队 。要面向未来,思考自己需要什么样的团队成员,而不是眼下缺什么样的人,才去找什么样的人。

6) 员工与岗位的关系,不是匹配而是高度匹配 。招聘人才的责任不在HR,而是在用人经理上,要做好招聘就要找到与岗位完美匹配的人,奈飞看一个人是否合适这个岗位,主要是看应聘者解决问题的方式。

7) 按照员工带来的价值付薪 。按照员工给公司带来的真正价值确定薪酬,同时,要给得起钱,要尽可能保证每个人都处在人力市场薪酬水平的顶端。

8) 离开时要好好说再见 。绩效评估应该不仅仅是年度,而应该是季度+年度。

以上是工程效能提升系列文章的下篇,感兴趣的朋友可以回看上篇《 “为什么你们开发这么慢?” 3页ppt讲透:帕金森定律,低效正在杀死你的团队! 》, 如果觉得本文对您有帮助,请 点在看 分享朋友圈 ,感谢您的支持!

作者简介 K ,知名电商公司技术老K级人物。武做过CTO,文出过畅销书,带你一起洞见技术新时代。

-END- 

关注“技术领导力”公众号

用故事讲技术,有趣,有料!

zaquimE.jpg!web

想加入社区,跟100位互联网大咖学习?

添加群助理Emma,注明“加群”

技术领导力社群

Yz2uAn7.jpg!web

大家在看:

1. 海归技术大佬,讲透“奈飞文化”8个原则!

2. 张一鸣:为什么 BAT 挖不走我们的人才?

3. 迷信中台是一种病,得治

4 . 为何职场中的岗位,都被不能胜任的人占据?

5. 阿里中台架构15篇干货,100页ppt精选

6. 雷军、张一鸣,价值千亿的6个思维模式

喜欢就点在看! 6Bfiqij.gif


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK