作者 | 刘嘉悦
来源 | 心声社区、蓝血研究(lanxueyanjiu)
踏上回国航班那一刻,在美国7年时光的点点滴滴快速从眼前闪过,有意气风发的高光时刻,也有心灰意冷的低谷期。如今,我将带着这些经历投身到国内云业务的发展中。从沉思中回过神儿来,飞机在颠簸中完成爬升,逐渐平稳,阳光透过舷窗洒在身上,明亮而温暖。
01
从0到1,一个月完成“不可能的任务”
2021年4月26日,对我有着非凡的意义。这一天,我正式入职华为成为一名软件教练,接到了第一个工作任务:在2021年5月30日完成云服务产品IaC(基础设施即代码)V0.0版本的开发交付工作。
IaC(基础设施即代码)是通过代码而非手动流程来管理和置备基础设施的方法。利用IaC,我们可以创建包含基础设施规范的配置文件,从而便于编辑和分发配置;此外,它还可以确保每次置备的环境都完全相同。通过对配置规范进行整理和记录,IaC有助于实现配置管理,并避免发生未记录的临时配置更改。通俗点讲,就好比你想要喝橙汁,需要自己切橙子然后去榨汁,但如果在咖啡厅,你只要跟服务员说我要橙汁即可,他会帮你完成剩下的一切工作。IaC云服务就像是咖啡店的服务员,它可以统一并自动化基础设施的发放,降低手工错误与P事件发生概率。由于代码化,可以审阅并且有版本控制,进一步提升服务的可用性,同时还提升运维效率。
主管见到我开门见山的第一句话:“终于把你盼来了,这个项目已经万事俱备,就差你来写了。”
我有点犹豫:“V0.0计划交付6个 Api(应用程序编程接口),我们完全从零开始,涉及到很多底层的构建、搭建、调试等,在只有两个人力的前提下,要求我们在一个月内完成,这在业界是不可能完成的任务啊。”
主管摇摇头:“你们不是两个人,还有一位教练马上到位,相信你们的实力。“
时间有限,也没有讨价还价的余地,我和陆遥两兄弟,开始了前期的准备工作。好在主管说话算话,一周后,他承诺的第三人刘睿如期到位。三人刚聚齐,就赶上北京疫情暴发,我们被隔离在酒店,动弹不得。开发过程中也是磕磕绊绊状况不断,比如底层工具缺失,原本以为可以一键搞定的工作变得复杂;再比如知识经验沉淀不足,很多信息都得靠口口相传,无形中浪费了很多时间。幸运的是,我们三个人背景相同,工作习惯和理念一致,配合起来柔顺丝滑。更令人惊喜的是,在最艰难的时刻,主管又给我们带来了两个小兄弟,董勇和程锁亮。就这样,疯狂开发了大概三周左右,我们如期写完了代码,从零开始,完成了6个API的开发、测试、上线,用户从原先连夜手动部署一百多个小站,变成了一键式部署,极大提升了效率。
百闻不如一见。通过交付产品的过程,我与华为云软件开发的全流程有了一次亲密接触,这也促使我开始思考:过往在北美工作的经验中,有哪些实践是适合国内软件能力现状的?有哪些理念和工具是能切实帮助软件能力提升?
02
让30个人像3个人时一样工作
V0.0版本只是万里长征第一步,接下来团队计划用1.5年的时间,即到2022年12月30日,完成V1.0版本的商用上线。V1.0版本要交付30个Api(应用程序编程接口),包含UI、测试流程的自动化,同时要提升可靠性,将V0.0版本Api中存在的小概率问题全部解决掉。
想完成这一目标,即使我们三个教练配合得再天衣无缝,也是无法达成的。于是,我们开启了新的工作模式:边写代码,边招新人。
在公司政策的支持下,团队很快发展到十多人,有刚毕业的应届生、有从其它团队转过来的同事、也有社招的软件精英,各路人马被整编到一起,每个人都有自己的做事风格。甚至有人到团队后提的第一个MR(合并需求)被改了126遍才被允许合入,我也因此被同事们打上了“苛刻”的标签。
在清华大学讲课
眼看人多了,效率不见提升,SL(服务组长)沈鹏飞很着急,专门从杭州飞到北京,拉着我们商量对策,“来,大家一起出出主意,看看咱们团队的问题出在哪里?怎么改进?“
我想了想,说了自己的看法:“我们每位同事都很努力,只是不知道往哪个方向使劲儿。“陆遥接道:“很多时候员工并没有按我们的要求去做,也许是我们没说明白,也许是员工没有理解到位。”
沈鹏飞问道:“你们的意思是不是说,咱们需要有一个团队的标准和原则?“
我兴奋地答道:“其实公司软件文化八条就不错,只是有些宏观。咱们可以在此基础上结合部门的情况以及亚马逊、谷歌、微软、 Facebook等顶尖互联网公司的实践,再进行下细化。”
沈鹏飞若有所思的说:“能不能再具体点?”
我接着说:“首先要对一名‘好的软件工程师’应该做好的“最重要的事”进行明确定义,然后再针对每件事给出分级的评价标准。以我们当前最棘手的‘输出效率’为例。我们要告诉所有人,成为好的软件工程师第一条就是要保证‘高效输出’,即‘高效输出’就是我们的一条工作准则。但是工作输出的过程中,一定会碰到时间线和工作量不匹配的情况,这个任务我觉得要两个月完成,但项目进度只能给一个月,这个时候怎么办?我们推荐做的方法是什么?各种做法我们会如何去评价?“
我顿了顿,看大家听得来劲儿,便继续说:“举例说明。第一级也就是最优解:通过思考,找到了一些更好的办法,将原来需要两个月的时间缩短到一个月。但是你会说:‘不一定所有的事情我都能找到这样的方案,有的事情可能就是已经经过很多轮的重复迭代,它的流程已经达到最优了,我做不到。’那我们还有第二级:通过排列优先级砍掉了一些低优先级的任务,并且不影响主线功能。如果达到这一级,我们依然认为你是一个非常好的工程师。”如果这个也做不到,就是第三级:准时做完。所以准时做完并不一定是最优秀的,而动脑子了才是最优秀的,这就是我们推崇的方向。依此类推,直到最后一级。”
沈鹏飞频频点头:“听起来不错,虽然对执行效果我有点儿怀疑,但我觉得咱们可以试试看。”
就这样,根据部门工作的优先级,我们一条条梳理,一步步推行。到2021年底,从核心产出和周边协同角度,确定了9条标准,32条自评细则,这套属于华为云RSF团队的 “卓越自评表(9条)”正式定稿;并于2022年年中,通过在互评与集体评议中的应用,指导员工绩效考评。
经过一段时间的使用,团队全体成员都成为了全栈工程师,版本发布也从原先的3个月降低为每周一个版本。同时沈鹏飞也感觉到,团队同学进步飞速,很多同学从不知所措,变得打法整洁、战术精良。
软件开发有一个特点:前人栽树后人乘凉,前人砍树后人遭殃。同样是做完一款软件,怎么做有很大的差别。我可以把代码写得非常完美,让别人很容易读明白,很容易维护;也可以把代码写的全世界只有我自己才看的懂,很难维护。站在团队的角度来讲,我们更希望是前者。因为前面挖的坑越多,后边就要花更多的时间去填坑,其实对于团队来讲总体的效率是很低的。而卓越自评表的好处就是它不仅讲结果,更讲过程。在过程中大家能更好的理解软件文化,养成良好习惯。
03
聚沙成塔,将技术知识沉淀成文档和工具
还记得刚入职的时候,我要配置一下电脑,没有人知道要怎么做,一切都要靠自己连蒙带猜和搜索,好不容易找到了参考资料,结果资料又很老,里边的配置很多都是错误的。随着部门进人越来越多,每一个新员工的环境搭建,都让我重温一次入职“噩梦”。终于有一天,忍无可忍的我决定,无论再忙,我都要先把新人入职Wiki(指导文档)做出来,而且它要详细到把新员工前两个月的每一天、每一个小时要做的事情都写出来;假设新员工只会复制粘贴,他都可以把这个事情干完。比如“先打开git bash,然后要敲cd”,这样的步骤都会写在里边,而不是简单地写“回到原始目录”。
Wiki一经面世,大家好评如潮。首先它节省了导师大量的时间;在入职前两天,新员工可以在不问问题的情况下把环境搭建起来,并做好工作开展前的所有准备。其次老员工们偶尔也会遇到电脑卸载重装的问题,直接照着这个步骤走一遍就好了。
另人欣慰的是,大家举一反三的能力很强,部门掀起了Wiki写作热潮。但看着因写作水平不同而导致的质量参差不齐的文档,我又开始担心热情褪去后,这些Wiki可能会变成一堆“废纸”。
我再次找到沈鹏飞,一起商量对策。
“大家现在心气很高,咱们可以抓住时机,把文档质量提一提?”我试探性地问。
“入职Wiki确实对大家帮助很大,在咱们部门例会上,你给大家传授下写作经验,怎么样?” 沈鹏飞十分支持。
“我觉得光分享经验可能还不够,以后咱们开会,能不能尝试下先看文档,再讨论形式?”得到首肯后,我大胆地往前迈了一步。
“这个提议倒是不错,但肯定会影响效率吧!” 沈鹏飞有点担心。
“咱们可以先实践起来,前期浪费的时间,我们几个软件教练多干点儿,把进度追回来。”虽然我也没有十足的把握,但觉得还是值得一试。
万事开头难,一开始的几次会议几乎就没开成过。因为我会要求大家会议的前20分钟,一句话都不能说,所有人只准看文档。看明白了,可以开始讨论;看不明白,可以问问题,但作者不准解释和回答,回去改文档,直到大家能看懂为止。
经过几次反复,大家逐渐上手了,会议效率显著提升。大家又自发总结了一套写Wiki的标准:刚入职的新人能看懂,为及格;计算机专业大一在校生能看懂,为良好;外行人(比如老奶奶)能看懂,那才是优秀。
随着Wiki数量的不断增加,它所展现的效用越来越明显。当前团队Wiki 存量一千六百多篇,这些文档不但使组内拉通少了很多——不知道怎么做先去看Wiki,而且连外部客户的很多问题,也可以直接看Wiki解决,大家被打扰的时间呈几何级数下降。
以此入手,我们加强倡导部门的学习氛围,并专门拿出绩效考核10%的权重来鼓励技术知识的输出和积累,并形成9条准则中的“为他人赋能”,尤其会关注赋能的效果是“加法”还是“乘法”。举个例子,团队新人加入,他问了1个问题,你给他讲了1遍,来10个人讲10遍,这是加法。如果写了Wiki,谁问这个问题就直接发给他,这是乘法。
那写流程写文档就是最好的方法了吗?当然不是。众所周知,即使再完美的流程,再完整的文档,也不能保证每个人的执行是最完美的。所以,我们提倡将知识流程自动化,让工具代替人工操作。我们推崇“任何可以节约团队1秒的事都是被鼓励的”,用工具最大的解放生产力,才是“乘法”的最好体现。
再向前一步,工具不仅要解决有无,还要考虑体验。可以将所有的经验知识流程自动化、一键化、无脑化、不感知化。我们的“哆啦A梦工具箱”里就有很多这样的工具,包括:无代码集成测试框架、一键创建MR工具等等,累计节省团队工作量50人/月。这样的工具越多,整个团队的效率就越高,大家释放出来的生产力就越多,开发交付就会变得更快。
日常工作远比这些要多得多、细致得多。每天早上15分钟的晨会、每周跟自己辅导的员工每人30分钟的面谈,每两周一次的Sprint(项目管理模式)……在一个又一个往复循环的日子里,管理者只有用真心去关注每个员工的成长、用坚持去夯实每个必选动作;践行先进软件文化,养成良好习惯;做好经验传承,重视工具和基础设施建设,持续学习提高技能,不断提升效率,才能实现从优秀到卓越,才有希望收获一颗枝繁叶茂的大树。
种树,是一件很长远的事。
04
后 记
华为软件教练组是在公司“全面提升软件工程能力与实践,实现为客户打造可信的高质量产品”的大背景下成立的。从2019年开始,累计从业界引入软件专家两百二十多名。这些专家入职后以软件教练的身份投入产品线的项目中,将业界的先进经验和优秀实践引入到产品线中;同时双手粘泥,与团队一起攻关解决问题,很好的起到了“传帮带”的作用。