从2006年开始,腾讯的研发规模开始膨胀,开发模式急需规范和标准化,到底走IPD(集成产品开发)还是Agile(敏捷)的开发路线,公司管理层也在为拿不定主意而犯愁,之后研发管理部开始与ThoughtWorks公司接触,逐渐将敏捷产品开发引入进来,并正式命名为TAPD(Tencent Agile Product Development)。

接触是从一次3天15W的培训开始的,ThoughtWorks派来了一个4人讲师团队,由此也诞生了腾讯日后推行敏捷的第一批种子。接着总结腾讯本身是怎么样子的,有这样一个框架之后搞一些团队去实践,通过实践以后再不断改进,本身也是一个不断迭代的过程。

整个实施阶段大概分成几个阶段:

    试点期:组织很多专题研讨和内部培训,树立标杆,更大范围内进行培训。
    推广期:内部建立一个顾问团队,开发一些扫盲的课程,不断的到一些团队里面去介绍去培训,让大家接受这些理念。

同样腾讯在推广敏捷的过程中也面临一些挑战:

    团队非常多,每个团队特点都不一样,比如规模不一样,应用方法不一样;
    产品非常广,互联网上所有的产品腾讯几乎都有,这种多元化的产品它本身产品的研发模式会有一些不一样,那么敏捷、TAPD怎么样去适应这种多元化产品的研发;
    敏捷在腾讯也是存在一个过程改进,这样会存在一些不适应性,针对这种不适应性应该怎么样去做才能更好;
    腾讯人员本身的素质也是参差不齐,每年校园招聘大概会招聘1000多个毕业生,这些毕业生从毕业到能上手工作,他们对敏捷的了解,融入到团队中都需要一个过程;
    一些长周期的项目,比如QQ客户端,一个版本的发布可能要半年到1年的时间,像这样一个产品怎样去做敏捷开发,也许它不适合敏捷开发。

正是由于这些挑战,才孕育出了独特的腾讯敏捷模式。以下为收集的一些资料整理:

一、整体的框架结构

简言之,腾讯的TAPD是吸收了XP+SCRUM+FDD三者特点的并行迭代开发模式,涉及范畴包括敏捷项目管理和敏捷软件开发。

1、产品

采用FDD,即产品特性开发驱动的一种模式,腾讯的产品会有一个明确的产品经理这样一个角色,他会负责整个产品,包括产品的验证、产品的方向、市场调研、用户调研等。FDD 模式是一种非常适合产品经理来对产品做一些滚动的要求,腾讯在产品设计上引入了类似FDD这样的模式,但是也不完全是FDD,只是参考FDD,所有的开发团队都是由产品经理所归纳出来的产品特性去驱动整个产品的研发。


FDD的核心是面向产品的功能点,但这个功能点是从客户角度出发的,并不是从系统角度出来的。功能点是用一个短句描述出一个业务需求,而这个业务需求的粒度是按开发时间来衡量的(一般不超过两个星期)。特征与用例的相似之处是,两者都可以用短句(动宾短语)来描述;两者的不同之处在于,用例用UML的用例图来表示,而特征是用四色原型(类图)来表示。产品经理这个角色有点Scrum的Product Owner的味道。但产品特性和backlog相差甚远,因为产品特性只是一个动宾短语,而backlog却是一个完整的故事(story)。

2、项目管理过程

腾讯采取了SCRUM,但也不完全是SCRUM ,腾讯根据自己的特点去总结的一些实践,大概的项目管理过程同SCRUM的过程比较类似,包括每天的晨会、迭代、timebox、每个迭代完成的时候会有showcase、回顾总结等。

3、开发实践

参考了很多XP的实践,XP完整的实践来说会比较理想化,很多东西不一定在实际开发中能够采纳,所以腾讯也是采纳其中的某些实践,比如自动化测试和持续集成,通过这样的实践能保证产品有一个快速发布的过程。

二、腾讯的快速迭代过程

一个完整的迭代过程 包括概念、设计、开发、测试和发布五个过程。

    在概念阶段,会采用FDD里面提到的一些好的佳实践来支撑到我们怎么样去敏捷的做需求开发,会制定一些产品发布的计划,比如产品在未来,某个迭代什么时候发布,要发布哪些产品特性,都是在这个阶段做的。
    在设计阶段,会做产品原型上的设计。对于互联网产品说更多的是通过快速原型法快速的让产品在不同范围内去做一些体验,比方产品在某个迭代的一个小迭代里面,可能会在一个团队里面先去体验,可能会采取发布到公司某一个部门去体验,或者发布到整个公司范围去体验,它会是一个不断放大的一个过程。
    在开发和测试阶段,更多的采取XP的一些实践,包括编码规范,代码走读,比如1周一次代码走读,构建持续集成的环境,包括自动化构建,自动化测试等,会有一些好的测试上的实践,如全员测试,是将测试看成不仅仅是测试人员的工作,更多的是整个团队的工作,当然也包括这个产品的其他同事的工作,通过全员测试来激发大家对产品质量负责。
    在发布阶段,腾讯采用的是灰度发布,同传统的软件发布不一样。项目中整个迭代过程通过类似SCRUM模式去管理,如有每日晨会,如何建设团队氛围,统一的管理平台,每次迭代完成时的总结回顾等等,这属于项目管理的工作。