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