不斷發(fā)展,、改進公司的內部工具,,可以極大地提高每個員工的工作效率,可以減少運營人員的數量,。這樣既改善了整體協(xié)調,,又減少了整體開支。 為幫助工程師更好地進行產品開發(fā),Facebook對內部工具(Tools)是非常非常關注的,。招聘我進公司的總監(jiān)黃易山,,就是這方面一個最有力的倡導者。他極力強調,,公司要把最好的人才放到工具開發(fā)那一塊,,因為工具做好了,可以達到事半功倍的效果,,所有人的效率都可以得到提高,,而不僅僅是工程師。 Facebook有兩個工具組,。一個叫研發(fā)工具組(Dev
Tools),,專門負責研發(fā)工具的開發(fā)和維護,包括所有有助于工程師開發(fā)速度和質量的工具,,主要服務對象是內部工程師,。另外一個叫網站支持和工具組(Site
Support and
Tools),主要負責公司里所有通用工具的開發(fā)和維護,,關注的主要是如何方便用戶和Facebook的交流以及Facebook內部的溝通,,主要都是通信工具,服務對象是用戶和所有員工,。 研發(fā)工具有哪些呢,? 新的工程師剛加入Facebook時,需要分配自己的開發(fā)服務器,,公司就做了一個工具來管理分配所有的開發(fā)專用服務器,。在一個頁面上,你可以很清晰地看到所有的開發(fā)服務器,,包括哪些人是現在的使用者,、什么時候申請分配的、服務器的操作系統(tǒng)版本,、配置信息等,。對于空余的服務器,你可以一鍵申請,,并自動初始化該服務器,。這讓剛加入的菜鳥們可以迅速地獲得自己的研發(fā)活動空間。 工程師最重要的工作就是寫代碼,。針對代碼管理,,公司也開發(fā)了很多工具。我在這里介紹部分工具供參考,。Facebook的代碼庫管理是通過一種叫GIT的開源管理系統(tǒng),,為此開發(fā)了一些工具來集成GIT,。比如有一個工具是在提交代碼之前自動檢測所修改的代碼是否符合公司代碼規(guī)范,如果不符合,,該工具會自動警告,,但把決定權交給工程師。Facebook提倡對修改的代碼寫測試案例,,在代碼提交時自動檢測是否存在覆蓋這些修改的測試案例,,如果沒有則會警告,但工程師仍然可以強制提交,。但這種情況下,,代碼若出錯給網站帶來巨大危害的話,工程師可能會被嚴厲批評,,因為這本是可以避免的錯誤,,是人性的狂傲忽視了工具的提醒。在代碼審查(Code
Review)方面,,Facebook做了一個可視化的工具,,現已開源,叫Phabricator,。工程師可以在頁面上非常方便地針對每一段(單行或者多行)代碼進行交互討論,;負責審查的工程師可以接受代碼改變,可以提出疑問要求原作者繼續(xù)修改,,可以提出自己不適合以退出該代碼審查,,等等。只有代碼被明確接受后,,才能被工程師提交到服務器端的代碼庫,這一點被集成到提交工具中強制執(zhí)行,。這些工具的基本理念就是,,凡是被很多人不斷重復的好習慣,要將其自動化,,綁定到工具之中,。以“Don’t
Make Me
Think”(別讓我多想)的方式來推廣好習慣。 Facebook的代碼發(fā)布是灰度發(fā)布,,所以開發(fā)了一個方便設計灰度發(fā)布的工具,。在這個工具中,工程師和產品經理(也可以授權給其他非研發(fā)人員)可以設計新產品發(fā)布的目標人群特點(比如對年齡,、性別,、地域、受教育程度等方面的限制)及發(fā)布的人群比例(在0%~100%之間自由調整),,所有的改變都不需要修改代碼,,只需要在工具頁面上點擊鼠標即可,,讓灰度發(fā)布變得很輕松。 發(fā)布過程由一個利用點對點(Bit
Torrent)算法實現的工具進行多線程同時發(fā)布,,更新幾十萬臺機器只需要幾十分鐘,。由于是不間斷地發(fā)布,,對公眾的服務不可以停,,所以Facebook會將一部分機器從公眾服務狀態(tài)中拿下來,,更新之后再放回,然后繼續(xù)下一批,,直到所有機器都被更新,。這樣就可以保證在任意狀態(tài)下都有足夠多的機器來支持用戶訪問。整個過程都是通過工具自動實現的,。而監(jiān)控這個發(fā)布過程的進展,也有一個工具用于監(jiān)測并且將其進度可視化,,你可以很方便地看到哪些服務器更新了,,現在正在更新哪些服務器,,整個網站的進度是百分之幾,,等等,。 發(fā)布之后的數據監(jiān)測更是重點,,Facebook做了很多工具使之變得容易,。數據收集只要1~2行代碼即可完成,數據的整理,、分類和存儲皆在后臺的上萬臺服務器上自動完成,,數據的可視化報表只需要通過一個頁面工具點點鼠標設置便可即時生成,,不需要任何代碼,。數據波動的自動警報也可以設置,,可以自動發(fā)郵件、發(fā)短信,,可以要求24小時全球輪班的站點穩(wěn)定工程部門(Site
Reliability
Engineering)按照你既定的反應方案去解決,。如果還不行,最后會打電話給你,,直接把你從床上拽起來。在Facebook工作的四年半時間里,,這樣的事件至少在我身上發(fā)生了10次,。 還有一種工具是人為的,我們組經常用,,就是把最最重要的目標及相關的任務,、目標日期、負責人等信息寫到白板上,,掛在離我們最近的墻上,。每天一抬頭就可以看到,,每次開會都會路過,,時刻提醒我們最最重要的事情是什么,,這種工具對我們組非常有效。 網站支持和內部通信工具有哪些呢,? 在如何處理用戶和Facebook之間通信這個問題上,,針對常見的問題(尤其是關于如何使用某項功能的問題),,Facebook在用戶提交時,,嘗試將其引導到網站幫助或FAQ的頁面,。但這并不能滿足所有人的需求,,尤其是和個人特殊情況相關的問題,,仍然有很大一批用戶會堅持提交問題,這時候Facebook內部處理工具就要把問題自動分配(Routing)到最相關的運營組,,比如,,和支付欺詐相關的問題應當自動分配給反欺詐運維組的那十幾個人,。然后,,工具會提供常見的通用解決方案,比如,,若選擇退款,,可以做到一鍵退款,,絕大多數回信內容自動產生(用戶姓名,、原問題等個體信息都會自動嵌入),,運維人員可以選擇要不要修改內容,,然后發(fā)送,。如果針對某一個功能的問題突然多起來,工具會自動發(fā)現并提醒運維人員手動查看,,運維人員可以根據實際情況決定要不要工程師介入尋找并修復可能的問題根源,。所有用戶問題的回復率、回復滿意度,、交互次數等信息都會被統(tǒng)計或抽樣統(tǒng)計,,以保證客戶服務的質量。 另外一個重要工具是招聘工具,。Facebook有一套專門的做題系統(tǒng)(Puzzle
System)嘗試去篩選可靠的工程師,。這套系統(tǒng)是一個專門的招聘工程(Recruiting
Engineering)組做的,包括題庫的管理和更新,、自動提交系統(tǒng)和打分系統(tǒng)等,。如果在解題這個環(huán)節(jié)脫穎而出的話,公司獵頭(Recruiter)會給工程師打電話,,安排他下一步的電話面試,。另外一種獲得電話面試的途徑是通過內部推薦。所有的內部推薦都是通過專門的人才提交工具上傳簡歷,,這個工具和整個招聘系統(tǒng)結合,,并注明這是一個內部推薦、誰是推薦人,。而整個面試過程里,,包括誰應該參與面試,誰實際參與了面試,,每一步面試官對應聘者的評價和打分,,都在工具里被很好地記錄和顯示出來。當然還有必不可少的權限控制——只有參加面試的人員才能夠看到關于應聘者整個流程的所有資料,。最后,,該工具允許打印所有的相關資料以幫助決策委員會在討論該應聘者時擁有全部的相關數據。 還有一個重要的工具,,就是每六個月一次的業(yè)績評價工具,。這個工具允許員工對自己評價、員工互相評價,、員工和老板之間互評等,,還要考慮權限的管理。這并不是一個很容易開發(fā)的工具,一開始是內部開發(fā),,但后來還是決定使用Rypple來提供專業(yè)的業(yè)績評價工具,。 從這些工具可以看出,Facebook是一家工具驅動的公司,,但這并不表示所有工具都要公司自己開發(fā),。必須清楚的是:工具開發(fā)是手段,而不是目的,,Facebook的目的是打造一個最好的社交網站,。因此,對于某個需要的工具,,如果有更專業(yè)的人做得更好的話,,Facebook非常樂意付費購買他們的服務,而把精力集中在核心產品上,。這就是為什么Facebook會花大筆錢購買數據庫軟件MySQL的支持服務,。 還有很多其他工具。Facebook希望通過工具來解決所有可能想到的問題,,比如,,要請假有相應工具,你可以說明休息多長時間,,需要讓哪些人知道這些情況等,;所有新想法的提出、討論,,讓網絡頭腦風暴變成了可能,;各種電子設備如電腦、手機等IT服務的請求和處理,,通過工具來解決……能夠想到的地方就盡可能用工具,。與物理工具不同,計算機工具可以實現“杠桿效應”的反復累積,,通過組合這些“杠桿效應”可以達到更高的層級,。 因此,公司的工作效率,,影響到你需要雇用的員工數,影響到公司的成本究竟是多少,,并將直接影響到公司內部產品的獨創(chuàng)性。黃易山就認為,,工具團隊不應該是一個由二線員工組成的“事后諸葛亮”的后勤部門,,公司里最有才華的工程師應該用公司自己的工具來工作,并且企業(yè)文化里要優(yōu)先反映這些,。編寫出優(yōu)秀的工具并繼續(xù)加以改善,、更新,這比尋找下一個偉大的創(chuàng)意更重要。 我最近跟國內一些技術公司的高管們討論過有關工具的話題,,有些人非常贊同,,也想通過工具來解決很多工程性問題。比如你要在公司里推廣一些規(guī)范性的規(guī)則,,一種傳統(tǒng)的方法是反復強調,,另一種是開發(fā)出好用的工具,把這些東西固定化在里面,,借助工具進行強制性推廣,,就能解決很多問題。Facebook沒有專門的軟件質量測試人員,,都是工程師自己進行,。公司就有這方面的工具,,把測試過程中重復性的工作集中起來,自動化實現,,只有一些必須要個性化處理的部分由工程師具體再去做,。我在開發(fā)反欺詐系統(tǒng)時,,將欺詐案例識別直接拋給人工處理當然是最簡單的方式,,但我們希望通過自動處理來解決大部分欺詐案例,,而把精力放在那些確實需要單獨處理的特殊案例上,,最后決定的方向是“進行自動處理”和“建立反饋機制”,,設計出用于用戶報告(外部工具)和案例審查(內部工具)的工具,。這樣一來,,我們也可以自動采集客戶支持部門的處理意見,,并集成到下一輪的機器學習中去,,工具會越加精確、聰明,,且與時俱進,。 Facebook在
2005~2006年的發(fā)展中,,公司根據不斷增長的用戶數量,,聘請了成比例的客戶服務人員,。當后來有1000萬用戶時,公司的客戶服務人員還不到20個,。到Facebook的用戶數量達到1億時,,很明顯,,公司不能用相同的速度來增加員工數量,,所以公司讓內部方案團隊與客戶服務分析師更加緊密地配合,推出了更具創(chuàng)新性的工具和用戶界面,,極大地提高了客戶服務部門的工作效率,。通過內部工具團隊研發(fā)的產品,,客戶服務部分析了目前已完成建立的工作并創(chuàng)建了定制方案,,方法是讓電腦去做可自動化處理的部分并優(yōu)化用戶體驗,,這樣客戶服務分析師就可以專注于人工最擅長處理的事務,。 不斷發(fā)展、改進公司的內部工具,,可以減少招聘運營人員的費用,,讓每個員工的效率更高,,這樣既改善了整體協(xié)調(員工數量少意味著協(xié)調更容易進行),又減少了整體開支,。如今,Facebook每一位工程師服務的用戶數均超過100萬人,,隨著用戶數量的持續(xù)增長,,這種效率優(yōu)勢將更加明顯,。 不過有一個現實問題是,,工具團隊要招聘新員工有一定難度,。Facebook的用戶已經達數億,,而且還在不斷增長,,如果你開發(fā)的是直接面向用戶的產品,每天有那么多人在使用,,那成就感顯然非常棒。而你要說服新員工去開發(fā)內部工具,,稱這樣可以帶給工程師以及其他同事更高的效率,、最終幫助公司做出更好的產品,,這個理由顯然缺乏吸引力,。所以,,工具團隊在招聘上花了很多工夫,,想各種辦法找到合適的人,。 一種方式是用一些通過提高效率的具體案例和數據來做理性說服,,這需要在開發(fā)工具的同時檢測工具使用前后的效率變化,。當然,,為了吸引內部最好的人才愿意到工具團隊,,企業(yè)文化中也一定要著重反映出這一點:公司將內部工具視為持續(xù)的重要投資,,以保持公司的領先地位,。集中精力努力說服幾位頂尖工程師加入工具組,,具有很好的示范效果和磁鐵效應,。如果真正做到如此重視,,最優(yōu)秀的工程師是愿意加入工具團隊的,,這樣可以大大提升同事們的效率,,從而更好地服務于用戶,這也是一種外部用戶所感受不到的成就感,。
|