zoukankan      html  css  js  c++  java
  • 腾讯与敏捷开发

      在这风起云涌的年代,最为人们津津乐道的国内互联网三巨头无疑是腾讯、百度和阿里巴巴,比较凑巧,鄙人曾在其中两家的研发部门任职。因为已离开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,其实是由互联网行业本身的特点决定的,互联网的生存法则就是大鱼吃小鱼、快鱼吃慢鱼,谁转身的快、谁拥抱变化、谁更关注用户,谁才可以笑到最后。阿里巴巴董事局主席马云说过:今天很残酷,明天更残酷,后天很美好,但绝大多数人都死在明天晚上,却见不到后天的太阳。

  • 相关阅读:
    JavaScript Patterns 5.7 Object Constants
    JavaScript Patterns 5.6 Static Members
    JavaScript Patterns 5.5 Sandbox Pattern
    JavaScript Patterns 5.4 Module Pattern
    JavaScript Patterns 5.3 Private Properties and Methods
    JavaScript Patterns 5.2 Declaring Dependencies
    JavaScript Patterns 5.1 Namespace Pattern
    JavaScript Patterns 4.10 Curry
    【Android】如何快速构建Android Demo
    【Android】如何实现ButterKnife
  • 原文地址:https://www.cnblogs.com/jifeng/p/4811064.html
Copyright © 2011-2022 走看看