http://chengxuyuans.com/software_engineering/45.html
在这风起云涌的年代,最为人们津津乐道的国内互联网三巨头无疑是腾讯、百度和阿里巴巴,比较凑巧,鄙人曾在其中两家的研发部门任职。因为已离开Tencent,所以现在可以站在另一个角度冷静思考,梳理回忆当年的所见所感,让众人一睹Tencent研发的峥嵘。
Tencent的产业布局主要在IM即时通讯、互联网增值业务、网络游戏、无线应用、网络媒体、电子商务和广告业务,QQ注册用户超过7亿、活 跃用户超过3亿,依托QQ、Qzone、游戏等平台优势,单一产品月收入过千万的比比皆是,像会员、Qzone、宠物、QQShow等,盈利能力超乎想像 的强,年Revenue达38亿、市值超150亿美金,称其为吸金机器一点不为过,所以股价一直坚挺,在其他科技股纷纷低迷,却被证券市场成熟的香港投资 人持续追捧,这都说明大众非常看好Tencent的业务前景和盈利能力。
说完商业表现再说研发背后,Tencent现有员工约4K,其中约一半为研发,研发岗位主要有产品经理、项目经理、开发工程师、UI工程师、测试工程 师、运维工程师以及项目管理工程师、SQA和CMO等,开发语言和工具以C++、PHP、Linux和MySQL为主。现有服务器超1W台,其中 QQ同时在线约4KW,Qzone同时在线约500W,ITIL可用性指标超99.9%,以其中约300人的事业部门为例,同时研发/运营100个以上子 产品,每月发布30个以上版本。
回想起来,对Tencent研发影响深远的有两家公司,一家是Google,它影响的是Tencent的研发文化;另一家是ThoughtWorks,它影响的是Tencent的研发管理。至于Tencent是如何引入并发扬,且听后续慢慢道来。
Google是互联网的传奇,其独特的开放和创新风格,奠定了它的世界级霸主地位。研究Google的人士都知道Google员工管理的十大黄金定律——
(1)组织委员会严把招聘关
(2)满足员工的所有需要
(3)拉近员工距离
(4)使合作简单协调
(5)身体力行,使用自己的产品
(6)鼓励创新
(7)尽可能统一意见
(8)不作恶
(9)数据决定决策
(10)有效地沟通交流
事实证明这是管理知识型员工的最佳方式。当年Tencent CTO Tony曾带队赴美国Google总部,亲身感受Google的文化魅力,回来后大加褒奖,立志效仿引进。在鄙人看来,Tencent吸纳了Google 文化的精髓主要有四点:宽松文化、创新文化、体验文化和精英文化。
一、宽松文化:
Google公司的办公环境是很多IT白领向往的天堂,员工可以带宠物、穿溜冰鞋上班,酒吧间、健身房、按摩房一应俱全,办公大楼之间提供滑轮车通行,初来乍到的很多人可能会有错觉,真不知道是不是进错了地方。
Tencent的办公环境也堪称一流,虽然自己的35层写字楼在建,现在还租用着飞亚达约八层楼和华强若干层,但在环境装修和硬件设施上丝毫不 吝啬,包括桌球厅、休闲吧、阅览室,并入驻咖啡厅,办公座位装扮非常个性化,有大幅的海报、卡通玩具、绿色植物,甚至直接在办公区中间摆上沙发和液晶电 视,供看比赛、听音乐或中午玩PSP。晚上八点提供免费晚餐,加班晚了不用担心,全天固定40多路大巴通往城市各处。行政秘书MM人数所占的比例是我经历 的公司中最多的,每个BU都有办公室建制,她们为员工提供了很多后勤保障并营造氛围激励士气。
当然这是表象,让员工感受宽松与否的除了办公环境外还包括工作压力,在Tencent要想表现绩效、获得肯定并非容易,KPI是把双刃剑,每季 度的强制正态分布让不少人无奈,因为晋级的条件是必须连续两次拿A或S。另外少数中层干部“技而优则仕”,表现出来“管事不管人”,谈工作多、谈个人少, 对人的内心关怀比较淡漠。
二、创新文化:
Google鼓励员工动用20%的时间用于自主研究,然后从员工创意中挑选Top20采纳应用,给与经费和资源转化成产品,像Google的桌面搜索、Orkut等产品都来源于当初员工的创新想法。
Tencent也非常鼓励创新,认为创新是互联网技术的灵魂,并写入了企业文化里。在组织架构上,Tencent设立有创新中心,专门实验互联 网上的新生事物和形态,作为新产品初创期的孵化器,成熟后再移交给业务部门运营壮大。在创新渠道上,Tencent每年举办创新大赛,由一线员工提出众多 构想,然后相互PK给与重奖。当然现在Tencent暂时还做不到腾出20%的时间出来让员工自主发挥,因为产品的压力持续存在着。
三、体验文化:
Google深信用户体验的好坏决定了产品对用户的粘性,因为同类型的产品实在太多,用户迁移转换的成本极低,所以如果自己用着都不爽,就更别说让用户来用了。
在Tencent也是如此,从产品人员、设计人员到各级经理都非常在意交互体验和设计,而对原型PK最多的也是这里,细到每个流程、每个按钮、每个图标甚至每个文字。主要体现在:
(1)用户体验小组,邀请客服人员和客户代表对产品现场反馈,几乎每个事业部都有。
(2)用户体验室,装有“眼动仪”以分析志愿者眼球的转动是否符合界面引导的初衷,以及长时间停留的区块。
(3)用户体验平台,陈列所有产品供员工随时反馈,并提供月度、季度积分排名。
(4)产品内部公测,每个重大产品发布之前都会发起,因为公司员工中不少就是QQ产品的忠实玩家。
(5)灰度放量发布,当不确定市场反应或用户真实需求的时候,先让部分用户灰度使用,收集体验反馈并修改完善后再放量发布。
四、精英文化:
Google对员工的素质能力要求很高,据说招聘时需要6个人以上集体把关面试,另外在Google博士尤其受欢迎,比例也很高。
Tencent的面试也很严格,T3(骨干级)以上至少要过4关,并经副总裁和CTO面试认可。除了社招以外,Tencent也非常重视校园招 聘,每年都组织到各地高校宣讲,“在一个好玩的地方实现自己的梦想”的校园招聘口号让人印象深刻。另外近年Tencent也加大了吸引高级人才的力 度,T5(资深专家级)不断涌现。
培训也是Tencent对待员工职业发展的一项制度,培训区分新人培训、管理培训和职业培训,对管理干部有潜龙、飞龙和EMBA体系,尤其让鄙人难忘和受益的是一些精品课程,比如“六顶思考帽”、“高效能人士的七个习惯”、“带人带心的领导艺术”等等。
从上述的比较中大家可以看到很多Google文化在Tencent的烙印,这也说明这是一家善于学习、开放包容的企业。就像Tencent推出 的众多产品一样,虽然刚开始可能是后来者,但只要放手去做马上可以像模像样,甚至超越、打垮先来者,这也是Tencent真正可怕的地方。
ThoughtWorks公司是一家全球IT咨询公司,它可能不像Google那么响亮,但有一个名字我们技术人员不可能不知道—— Martin Fowler,堪称软件开发领域教父级的人物,他精通OO分析、架构设计和软件工程,立著颇多,像《UML精粹》、《重构》、《分析模式》、《企业应用架 构模式》等不少获得Jolt大奖的著作都出自他的手笔,而他正是ThoughtWorks公司的首席科学家,同时也是敏捷联盟的17个始创人之一、以及敏 捷宣言的起草人之一。至2008年,ThoughtWorks公司已连续举办了三届敏捷中国大会。
那么Tencent和ThoughtWorks两个不同类型的公司又是如何结下渊源的呢,话要从2006年说起,那时Tencent规模已经开 始膨胀,开发模式急需规范和标准化,到底走IPD(集成产品开发)还是Agile(敏捷)的开发路线,公司管理层也在为拿不定主意而犯愁,之后研发管理部 开始与ThoughtWorks公司接触,逐渐将敏捷产品开发引入进来,并正式命名为TAPD(Tencent Agile Product Development)。
接触是从一次3天15W的培训开始的,ThoughtWorks派来了一个4人讲师团队,三天的课程让人印象深刻,由此也诞生了Tencent 日后推行敏捷的第一批种子。后来一想,这次培训本身就是敏捷的一次真实案例,成员临时抽调,有来自北京,也有来自西安;课程设置应我们临时要求即时调整, 五天压缩成三天;讲解过程大量应用白纸、小纸条、图钉和白板等简单工具;关注学员的心情曲线等。这是一个拥抱变化的团队,从他们身上折射出沟通、简单、反 馈和勇气的敏捷价值观。
简言之,Tencent的TAPD是吸收了XP+SCRUM+FDD三者特点的并行迭代开发模式,涉及范畴包括敏捷项目管理和敏捷软件开发。
一、敏捷项目管理:
(1)Iteration
软件开发模型经历了从瀑布到螺旋再到敏捷的过程,迭代不是敏捷独有的创造,无论在RUP还是在MSF中迭代都是其核心特性之一。而在Tencent特别强调的是并行迭代,即多个版本并行,最大程度发挥资源的效率。
Release(发布)可理解成当实现的产品Feature累积到一定用户价值时的正式发布,它是比Iteration更大的概念;Iteration(迭代)是在固定时间内开发Feature的过程,Release一般包括多次Iteration。
(2)TimeBox
TimeBox(时间箱)反映了敏捷开发的节奏,即在固定时间内实现不固定特性的周期,抛开需求定义阶段,从设计-实现-测试到部署,在Tencent一般一至两周时间居多。
(3)Planning Game
对敏捷的一种常见误解是不要计划,其实在敏捷的体系中不仅强调计划,甚至区分Release计划、Iteration计划和Task计划等多种 不同粒度、不同时长的计划。Planning Game突出的是让用户代表参与,由用户代表评估UserStory/Feature的优先级,开发人员评估任务的开发时间,由用户代表+项目经理+核心 成员三方共同排序、组合,确定本次迭代计划需要实现的Feature List。在Tencent用户代表就是产品经理。
(4)IterationPlanningMeeting
IterationPlanningMeeting就是Planning Game实现的管理形式,通过会议沟通达成。
(5)Stand-up Meeting
团队成员围成一圈,逐个说明3个问题:昨天做了什么,今天计划做什么,有没有困难并计划如何解决。对Team而言这是检查进度、快速调整非常有效的形式,在Tencent这已经成为大家每天早上的固定习惯。
(6)ShowCase
提交测试前由开发人员演示实现的功能,产品经理到场Review是否符合当初的设想,避免接近发布时才反馈。
(7)Retrospect
每个迭代结束后,项目经理组织或轮流组织所有Team成员共同回顾本次迭代的得与失,整理Well/LessWell,因为敏捷的团队是自我反省、持续调整的团队。
二、敏捷软件开发:
(1)Story Card/Story Wall/Feature List
StoryCard是XP中推荐的需求定义方法,要求符合Invest和Moscow原则;StoryWall则用于跟踪StoryCard的 变化状态,而FeatureList是Tencent一直沿用的需求表达形式,在Tencent的TAPD工具中已经实现了类似ThoughtWorks 的Mingle的StoryCard管理功能,对于需求跟踪而言这是不错的方法,一目了然。
(2)Refactoring
相信我们都听过这句话:好的代码不是设计出来的,而是重构出来的。
(3)TDD
“测试驱动开发”在Tencent执行地并不太好,Tencent的产品以Web形式居多、业务逻辑相对简单,C++下的单元测试有些力不从 心。相反自动化测试在Tencent比较盛行,因为有测试部门专门的自动化测试Team在推动,而且链接的是正式生产环境,可以即时反映产品当前的状态。
(4)Pair Programming
理论上结对编程可以提高代码的质量,而且并不会降低开发效率,但Tencent的业务繁忙,资源上不允许两人结对。
(5)CI
持续集成可以降低发布前集成阶段的难度与成本,Tencent的自动化构建系统推行的比较早,覆盖了大多数产品,而且正在朝自动化构建-自动化测试-自动化发布三者协同的目标迈进。
(6)灰度发布
灰度发布是Tencent的又一创新,它将产品试用扩大到海量用户一端,在小范围及时吸取用户反馈,分析用户行为和喜好,持续修正自己产品的功能体验。
当然开发方法和流程确定了还远远不够,更难的是如何将它推动落地。首先Tencent组织开发了承载敏捷思想的TAPD项目管理工具,它类似 ThoughtWorks的Mingle;然后推出了敏捷能力模型,类似CMM成熟度模型一样对Team评级加以引导;同时还推出了敏捷指数排行榜形成竞 争,营造你追我赶的声势氛围。
文章写到这里行将结束,最后我们分析Tencent为什么选择Google和ThoughtWorks,其实是由互联网行业本身的特点决定的, 互联网的生存法则就是大鱼吃小鱼、快鱼吃慢鱼,谁转身的快、谁拥抱变化、谁更关注用户,谁才可以笑到最后。阿里巴巴董事局主席马云说过:今天很残酷,明天 更残酷,后天很美好,但绝大多数人都死在明天晚上,却见不到后天的太阳。