2012年平安夜,我离开工作了近十年的通讯行业投身互联网行业,入职了当时阿里巴巴旗下的淘宝浏览器开发团队。过去的两年,这个团队完成了从淘宝浏览器过渡到UC浏览器电脑版开发团队的巨变。之所以说是巨变,是因为整个开发团队的工作方法、工作质量和精神风貌在过去的两年发生了翻天覆地的变化。在这个过程中,我作为“领头羊”引领着开发团队向前发展,并在最近有机会成为了带领包含开发和测试在内的整个技术团队继续向前发展的负责人。
个体在两年内取得巨大变化相对容易,而对于一个团队来说挑战就大了很多,因为其中包含了技术和管理两方面的内容,甚至是我个人对于软件行业的理解及所持有的技术和管理理念。在目前中国IT行业的大环境下,UC浏览器电脑版开发团队何以取得如此之大的进步相信被不少人所好奇。也正因如此,我想通过文章与大家分享。与此同时,通过这些文章与我的团队共同总结过去两年所发生的变化和让团队知晓将来如何发展得更好。
为了避免这类文章过于空洞,本文将基于我个人在过去两年所看到的、所想的,以及所采取的方法的形式加以展开。
混乱http://www.douban.com/note/483236221/
二年前我之所以选择加入淘宝浏览器团队,正是因为看中了Google的Chromium开源项目,因为淘宝浏览器正是基于它的二次开发产品。那次面试时其实并没有多少Windows的编程经验(只有大约半年),当时面试官之所以看中我,最大的原因是我有Motorola的架构师经历。入职后,在一封主管回复给我的邮件中他告诉我:“其实,将你招聘进来是一次非常大的冒险。因为,一是你没有互联网行业的经验;二则担心你这次转行适应不了新环境。然而,从你的邮件来看,这种担心完全是多余的,你进入角色的速度远远超出我的预期”。收到这封邮件的回复时,我入职并在Chromium的软件架构上已花了有一个星期的时间。
在接下来的三个星期里,因为我是一名新人,所以没有被安排具体的开发任务,而我也一直将时间投到了掌握Chromium的软件架构上。即便在之上当时总共花了大约一个月的时间,但对于Chromium这一被我称之为“恐龙级”的项目来说,这点时间真的是杯水车薪。
之后,我被安排从事一些简单的界面编程工作。对于我这个新人来说,当时团队对于项目计划的乐观程度着实让我吓了一大跳。对于那些在项目上有经验的人来说,很简单的工作要我二天完成其实并不容易。原因在于,我之前并没有将时间投入到了解界面与程序中类的对应关系,团队也没有在这方面有任何文档沉淀帮助我上手工作。好在有周围同学们的帮助,加上自己的钻研,我还是如期地完成了被安排的开发工作。
第一次接触淘宝浏览器的代码真可用“震惊”两个字去形容当时的心情。首先,代码的组织完全忽视了Chromium的软件架构。这造成的问题有二方面。一方面是代码目录结构与层级一片混乱,每位同学想怎么处理都行,结果就是自有代码很难维护;二则,由于没有很好地关注Chromium的软件架构,这使得自有代码与Chromium的原生代码耦合度很高,从而导致升级Chromium内核工作很是困难。其次,编码格式没有统一的标准,“不堪入目”的代码让人一瞄就知道编程效率和质量不可能高到哪儿。
在入职的前半年时间里,我一边“独善其身”地工作着,力争让自己的工作成果与Chromium的保持高度一致;一边不时地通过即时通(阿里是用旺旺的)和邮件指出所看到的不良编程行为和分享自己的一些思考。坦白说,作为一名新人,在开始指出他人的问题时并不能让人愉快地接受。相反,很容易让人觉得“这个人怎么到处在挑刺?”主管看到我时常指出团队的问题,很是担心这样团队接受不了我,为此专门在一次谈话中向我提及该事。在这种背景下,之前出书、写博客的经历,加上在指出问题时往往会告知背后的原理,以及自己以身作则的各种工作习惯,让我慢慢地博得了大家的认可与信任。最终结果向良性方向发展的关键在于,大家看到了我的能力,以及感受到我希望团队发展得更好的做事初衷。http://www.cnjiayu.com.cn/life/jkys/2015020323220.html
http://www.cnjiayu.com.cn/life/jkys/2015020323219.html
另外,前半年工作时间除了让我慢慢融入团队,还给了我很多观察团队的机会,让我看到了团队其他更多的问题。首先,整个团队的工作方式过于原始,基本上是采用编码后测试验证通过就发布软件的方法。由于概要设计和代码走查流程的缺失,使得开发工作差不多就是各自为政,技术方案的优劣和编码质量的高低都没有把关。其次,严重存在“重新发明轮子”的问题。由于项目计划总是过于乐观,在项目时间并不充裕的情况下,大家一拿到需求的第一反应就是开干,而不是先研究Chromium是否存在为我所用的方案、模块和函数、结构是否与Chromium的保持一致。概要设计和代码走查流程的缺失使得“重新发明轮子”的行为很难发现和被纠正。再次,整个团队在知识管理方面一片空白。团队中找不到任何一份文档指导个体如何开展开发工作,也由于个体所掌握的知识没有通过文档化的方式输出,使得整个团队的个体成为了“知识孤岛”,个体的学习成本更高,团队效率更低。最后,完全“闭门造车”。作为一款基于Chromium开源项目二次开发的产品,除我之外几乎没有人关注开源社区的动向,大家只是低着头干,视野很是局限。
前半年工作时间还让我形成了自己的一些思考。
互联网行业的产品对于用户体验很是考究。然而,让人分裂的是,产品后面的团队似乎并不关注自己的工作体验。他们用着原始的工作方法,采用简单加班的苦劳方式,却无法从本质上改变自己的工作和生活质量。
互联网行业对于“天下武功,唯快不破”存在严重误解。从功夫的角度,武林人士之所以能做到“快”(形式)的跟本在于他的内功(能力),也就是说没有深厚的内功则“快”跟本没有支点。然而,大家在引用“唯快不破”时,只看到了表象,甚至将之当作解释自己工作质量不尽人意的借口。在我看来,对于“快”的正确理解应是产品的所有功能根据一定的优先级、以满足可持续发展所需的质量要求的方式分阶段实现,而非以牺牲赖以可持续发展的工作质量去换取。有一点我们一定不能欺骗自己的是,因为“内功深厚”而有意忽视质量求快呢?还是根本不知道如何获得高质量而以“快”做幌子?“唯快不破”之所以运用广泛,是因为创新产品存在巨大的用户红利,而这种红利很可能快速变成产品的用户粘性而形成竞争优势。即便如此,“唯快不破”并没有隐含“牺牲质量换取速度”。对于目前已一片红海的PC浏览器市场,如果没有形成自己的核心技术竞争力,则很难用低质量的“快”打出自己的一片天地。
淘宝浏览器时期的团队还存在极为严重的内核升级之痛。Chromium大约一个半月推出一次大版本,而基于Chromium的淘宝浏览器别说跟上Chromium的发展步伐,就是做一次内核升级也因为得重放大量的代码而周期很长。由于Chromium的发展步伐很快,且每一个版本几乎都存在对已有功能的代码重构而导致大量的变更,一旦跟不上其发展步伐,就会造成大量的变更被累积到下一次内核升级工作之时,从而使得下次内核升级的工作量更为巨大。
现在回过头来看,那时的淘宝浏览器团队虽然不少同学有很好的技术积累,但由于做事方法缺乏规则的约束和不具专业性而难以发挥团队的效能。团队走过了不少弯路、犯过了不少错,只是那时的团队还没有完全意识到。此外,那时的团队也根本没有意识到Chromium项目所蕴藏的软件开发方面全方位的知识宝藏。
整个团队正等待着一次全面改善的机会!
相信读者对于像淘宝浏览器这样的团队并不陌生,甚至正经历着这样的团队。或许,有的人对于这样的团队并不感到有何不妥,因为在他们看来,这样的团队同样能够在业务上取得巨大成功,业务成败与团队的水准似乎毫无关系。然而,我想提醒的是,对于大家都骑马前往目的地时,总会有骑马的人先达到;但如果其中有某位是驾车前往时,最先到达目的地的一定是他。而且,两种出行方式的过程舒适度截然不同!