騰訊與敏捷開發
在這風起云涌的年代,最為人們津津樂道的國內互聯網三巨頭無疑是騰訊、百度和阿里巴巴,比較湊巧,鄙人曾在其中兩家的研發部門任職。因為已離開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,其實是由互聯網行業本身的特點決定的, 互聯網的生存法則就是大魚吃小魚、快魚吃慢魚,誰轉身的快、誰擁抱變化、誰更關注用戶,誰才可以笑到最后。阿里巴巴董事局主席馬云說過:今天很殘酷,明天 更殘酷,后天很美好,但絕大多數人都死在明天晚上,卻見不到后天的太陽。