天天看點

我在QQ郵箱的這四年

恍惚間已經工作了四年有餘,很幸運剛畢業就遇到一個很好的鍛煉機會,05年7月份剛成立的騰訊廣州研發中心,主要負責騰訊的郵箱業務,我是在06年2月份加入到這個團隊,也算是見證了QQ郵箱的整段發展經曆。有些記憶隔的太久,可能時間和細節上不太準确,盡量去回憶吧。

  寫這個系列的文章也是對自己過去四年工作的一次回顧和總結,我會結合自己的經曆和感受來寫,視角不會太開闊,用平鋪直叙的方式吧,就像講故事,我是一個沒有太多故事但卻喜歡講故事的人。

  也許大家都聽說過騰訊做郵箱的那段往事吧,創業團隊太自信了,覺得把郵箱放到用戶端上依賴QQ巨大的使用者量自然就會成功,但是結果卻恰恰相反,糾正錯誤認識,在04年緊急做了QQ郵箱的web版,也就是QQMail2.0版本,這個版本明顯過于倉促,和網易等其他郵箱應用相比,差距很大。騰訊在05年中旬收購了foxmail及其團隊,成立了廣州研發團隊,主要負責QQ郵箱的開發和營運。很明顯,公司非常重視郵件這一塊,也基本承認了之前的判斷錯誤,是以打算下大力氣做好郵箱業務,這為之後QQ郵箱能夠取得優異成績奠定了政策基調。

  在計算機軟體領域,一款成功的産品背後一般都會有一個明星人物,QQ郵箱也不例外。QQ郵箱的這個關鍵人物大家應該也都知道,他就是foxmail的作者張小龍。09年賴勇浩同學在一次技術交流中談過他心目中的幾個國内頂尖程式員和其成功的軟體作品,有求伯君和wps,有鮑嶽橋和ucdos3,有王江民和kv100,有梁肇新和超級解霸3,有張小龍和foxmail,有侯延堂和flashget等等。小龍被認為是國内第二代程式員中的領軍人物,他曾經是國内頂尖的程式員,然而他在QQ郵箱的整個發展過程中不是以技術人員的身份在指導,如果要用一個最合适的身份來形容他,我覺得是産品經理。小龍曾經在内部發表過一篇文章,這篇文章講述了他對網際網路團隊管理的一些觀點,他認為網際網路團隊中的管理不是管人,而是管理産品體驗,以産品體驗為核心,産品設計和開發人員與産品共同提升,共同進步。小龍之于QQ郵箱的影響正如喬布斯之于蘋果的影響。

  QQ郵箱3.0版應該是廣研自主研發的第一款郵箱産品,2.3版是從總部繼承過來的,3.0版的背景很多代碼也是從2.3版繼承過來的。3.0版的UI有點像hotmail和outlook的綜合體,思路很明顯,把郵件用戶端做到web上面,做一個富用戶端的郵件應用服務。當時國内的郵件應用第一梯隊是網易和雅虎中國(中國雅虎是之後的事情),第二梯隊的是新浪、搜狐、tom線上、21cn等門戶,第三梯隊是一些獨立的郵件服務商。當時大家經常上艾瑞網看排名,QQ郵箱當時排名在12左右,還進入不了前三梯隊,市占率低到可以忽略。當時的目标是在一兩年内進入第二梯隊,我想,如果當時确定目标是超越網易成為國内第一,估計是沒人相信的,包括我們自己。

  3.0版是廣研的處女作,投入了全部的人力物力,采用了當時業界最先進的技術方案和最好的UI設計,并且創新的采用outlook的三欄結構,很像郵件用戶端,這是一次軟體服務化的嘗試。

  我是06年2月份加入廣研,當時3.0已經渡過了最繁忙的開發階段,進入了小範圍的公測階段,使用者可以在2.3版和3.0版之間切換。3.0版的集中開發大概是半年多時間,05年中旬廣研招兵買馬的時候,大部分人沒有郵箱産品的相關開發經驗,當時是在摸索中前進。然而,當時的團隊卻采用了業界最先進的ajax技術架構,當時的javascript代碼有很重的面向對象的味道,用傳統的軟體工程思想建構了整個web架構,從軟體的開發流程來說,這并沒有什麼問題,但是産品卻有很大的問題出現了--慢,不是一般的慢,當時除了較快的電信網使用者可以登陸進郵箱之外,其他的使用者基本上都被卡在登陸上。06年的大部分時間,整個團隊都在解決速度慢的問題,嘗試了很多方法,把js容量壓縮掉了一半,js混淆之後又壓縮了很多,js檔案分開為多個,但始終沒有根本的轉變,速度的提升仍然不能被使用者接受。現在回過頭分析這個問題,我覺得實體上的壓縮和分割js檔案之是以解決不了問題是因為問題的根本在于js的邏輯架構上,當時的js有明顯的基類和繼承類結構體系,這種結構并不适合實體上的分割,即使分割開,渲染消耗的時間是節省不下來的。

  3.0版的背景基本上是繼承的代碼和開源代碼的綜合。最重要的郵件投遞子產品采用的是當時最好的投遞引擎postfix,web端采用的是apache。郵件存儲是簡單的單檔案存儲方式,使用者資料存儲也是比較簡單的,帳号和郵件清單是合并存儲在一起的。這個架構對于支撐當時的使用者規模是足夠的。

  06年之前廣研在做QQ郵箱開發和營運的人數是比較少的,是以06年吸納了不少的畢業生,我就是第一批廣研接收畢業生中的一員,當時3.0版的主要開發人員集中在兩個小組:QQMail小組和系統架構組,從名字上看,應該是QQMail小組負責産品層面的開發,系統架構組負責背景架構的研究和開發,不過我當時感覺兩個組差别并不大,都是在做産品開發,都同時做前台背景,可能是人手緊張的緣故吧。QQMail小組除了做産品開發之外,還負責産品的營運工作,人數上稍微多一些。我加入的是QQMail小組,最初是以實習生身份參與到3.0的開發中,工作任務比較雜,寫一些cgi,做一些内部系統和統計的工作,其餘的大部分時間是在讀代碼,也就是上面提到的那些js代碼,背景代碼和cgi的代碼。這近三個月時間是我有史以來精力最旺盛的一個階段了,把所有的代碼梳理了一次,寫了好幾本筆記,現在回憶起來覺得真是太不可思議了。

  QQMail小組當時的組長是ted,系統架構組的組長是harvey,兩位老大對我的影響都很大,我後來分别在兩位老大麾下做了兩年,從兩位老大身上學到很多東西,他們也給了我很多鍛煉的機會。

  ted老大當時主要負責QQ郵箱的産品開發營運方面的管理,在我進組之後,當時的3.0已經過了集中開發階段,開始進入優化階段,對營運品質提出了更高的要求,當時整個QQ郵箱的營運隻有一個粗糙的資料統計系統和一個nagios系統,資料的收集和統計的方法比較簡單,cgi寫日志然後收集起來之後再運用shell統計入庫,甚至資料的頁面表現也是shell做的。ted安排aoger為我的導師,我跟着aoger邊熟悉系統邊做一些資料統計方面的嘗試,偶爾也會寫一些産品cgi。aoger是一位相當有耐心的導師,尤其是面對我這種打破沙鍋問到底類型的學生,aoger在最初給了我最多的幫助,沒有aoger的幫助,我不太可能在3個月理清整個QQ郵箱的架構。aoger解答不了的問題,他會推薦更合适的同僚給我,不過我比較取巧,遇到這種情況一般就去問ted老大了:)也正是在這些和ted老大的問答過程中,增加了彼此的了解,這為以後ted能夠不失時機的給我最恰當的嘗試機會奠定了基礎,不過最重要的還是ted的信任。