覃超:Facebook的項目開發流程和工程師的績效管理機制
非常感謝QCon給我這個機會給大家帶來這個演講,我將結合之前在Facebook的四年工作經驗,介紹Facebook創新的管理方法以及整個工程文化的方法。
引子:從大學宿舍到完整生態鏈:Facebook的12年發展歷程首先我想解釋下為什麼我要要說Facebook,並不是因為我在那裡工作過。請看一下Facebook的發展簡史:2004年,扎克伯格在大學宿舍里開發了Facebook,很長一段時間它只是一個簡單的網站。但是後來,擴展到硬體,開發了各種產品,佔據了整個社交領域、至少是北美的霸主地位。Facebook還推進了Connectivity(全民聯網計劃),給發展中國家提供免費的無線網路,再到後面做VR、AR、人工智慧等現在非常火的新領域,形成了完整的生態圈。看Facebook12年的發展,我一直在想一個問題,它是怎麼從大學生宿舍裡面一個簡單的扎克伯格自己的個人項目,最終發展成為可以上市的公司?為什麼現在整個生態鏈布局的已經非常完善了,這個公司是怎麼做出來的?我思考了很久之後,發現有一句話很有意思,21世紀最重要的是什麼? 就是人才。現在互聯網創業很多技術基本上都是開源的,很多硬體隨手可得。上圖是在五年前矽谷非常流行的一張圖,描述了大公司之間人才的流動情況。圖中,每個圓點是一個公司,和圓點顏色相同的邊的表示這個公司的人才流入。可以看到Facebook基本上和其他點的連線都是藍色的,所有公司都在向Facebook輸入人才。而谷歌基本上在從微軟和雅虎搜集人才,在其他地方是流失人才的。所以,五年前吸納了很多人才,Facebook才有了今天的成就。有一群最牛的工程師、產品經理和設計師在這裡,所以經過五年的布局和人才培養,才造就了現在相當於在全生態鏈都有的非常好的格局。所以我在想,裡面整個工程師文化做得比較牛的是什麼。因為我自己在Facebook工作過,所以結合自身的經驗帶來了這個分享:在公司裡面如何塑造比較好的公司文化?怎樣把牛人吸引過來?
總共五個部分:首先是簡單的自我介紹;接下來講Facebook的工程師文化;以及團隊的組成,包括設計師、產品經理和工程師;人員是如何管理的,怎樣能有效的控制工程師的工作積極性以及給予相應的報酬;最後一點也是最重要的,以上這些對我們中國公司有怎樣的啟示。1、我是誰:從Carnegie Mellon到Facebook這是我的簡歷,大學和企業在技術方面的差距還是很大的。從Carnegie Mellon大學畢業後,我加入了Facebook,開始做的是CTO親自主導的比較神秘的項目,後來去做了Facebook的APP,主要是iOS,也做過Voice Message等。2、Facebook的工程師文化是怎樣的?特點一:Hack Culture首先,Hack Culture,可以說是「黑客文化」。注意並不是字面意義上的「黑客」,在扎格伯格招股書上就說過,Hack Culture並不是黑別人電腦,而是一種態度和做事的方法。現在去美國已經非常容易了,如果飛機降落在舊金山機場,著陸的時候會越過Facebook總部,建議大家到時候可以留意一下,這麼一群建築就是整個Facebook總部的樣子。做了一個東西之後先發給用戶,看一下用戶的反饋或者搞一批測試的用戶,最後看多少用戶覺得你這個好,通過數據的採集方式來論證是否可行。在Facebook有很多牛的方法可以搜集數據,所以可以很明顯的看出這個版本用了AB測試之後到底是好還是壞。
在Facebook並沒有一個專門的部門做Hack,而是鼓勵所有的人去發揮自己的想像力,想做什麼就可以做。公司的角落有各種各樣的「Hack」,營造出一種氣氛,鼓勵員工去創新、鼓勵那些牛逼的人待在這個地方工作,這樣的公司文化是比較愉悅的。
特點二:Design+Engineering如果說蘋果是80%的精力很重視自己的設計,谷歌大概非常重視工程,在Facebook設計和工程各佔一半,這可能和大家想的不一樣。Facebook的新辦公室出自一位著名的設計師,有各種奇妙的元素,開始我認為這些設計是浪費,後來我慢慢發現這種環境下工作心情非常愉悅,很多人自發工作10個小時左右,而且在這種環境下心情很放鬆的狀態,更能激發你Hack。後來我看到國內的一些互聯網公司也有這種感覺,比如最近的創業貴族今日頭條。所以如果想把互聯網公司做大,就要有非常迷人的工程師文化,才能把牛逼的人招進來。特點三:Open
我第一天入職Facebook的時候,最大的感受就是這三點:首先是Open,非常Open的checking。新人第一天入職,領到一台電腦,連上網後,所有的數據都可以看到:產品的月活、日活、每一個功能,甚至可以像股票交易系統看到這樣的數據,比如日本的用戶30歲以下的人在用 news feed 的時候情況到底怎樣,從今年年初到現在變化是怎樣的等。所有的東西都開放給工程師,沒有任何許可權。在Facebook,codebase 是所有 software engineer 都有許可權把它拷貝下來。我(作為一個facebook phone 和 iOS app的工程師)可以把安卓的codebase拉下來,也可以把PHP、推薦演算法、引擎各種代碼庫給git clone下來,所有的許可權都是開放的。但開放的前提,如果把公司內部信息泄漏出去就會被開除掉,歷史上也發生過好幾起這樣的事情。所以,在Facebook基本上不可能出現扎克發的一封郵件會被爆光。剛開始回國的時候,我很震驚,各種CEO的郵件都曝光在公眾眼中,這種事在矽谷基本不可能。所以Hack意味著內部信任和開放,同時對外也要遵守非常嚴格的規定。最後一點就是Open Space,很開放的環境,給人的感覺是「網吧式的工作環境」。美國公司的辦公室給人的感覺比較粗糙,比如說天花板上沒有任何裝飾,柱子上還有很多鐵鏽一樣的東西,但是它又有非常細節的地方。比如說,顯示器都還不錯,有各種飲料和零食,隨便吃;椅子是著名的 Aaron chair。最有趣的是:椅子右側有兩個按鈕,一個是上升和下降,平時就是這麼正常的工作,累了之後,久座對身體不好,就把桌子升起來,變成站立式辦公。站起來有一個好處是,當好幾個人在一起討論問題的時候,大家可以站在一起看。很多時候寫代碼的時候,把設計師也帶過來,直接問「我做了一個原形你看有什麼問題的嗎?」有問題就直接改了。扎克和所有人一樣,坐這麼一個位置,開放式工位旁邊有很大的玻璃房子,用於開會,扎克沒有太多的會議或者太多出去的時間,基本上每天在公司裡面專註於自己的事務。3、Facebook團隊組成:設計師、產品經理和工程師
很多人問我,Facebook的項目團隊是怎樣的?一般情況,如果是做一個簡單、小功能,一般是一個設計師加兩個工程師;比較大的項目一點,比如說改版、在新版開發兩三個功能,基本上兩三個工程師一起做,iOS messenger app 五到十位工程師和兩到三位產品經理,和國內配比差不多。比較有意思,Facebook沒有測試,他們比較貴,很多時候都是我們自己測,我們 Unit Test 並不多,覆蓋率10%到,但是我們有非常嚴格的 Code Review。所以如果你要學習一點,在工程上面、執行上面讓bug減少的話就是代碼審核,交到這個 Master Branch 裡面的代碼必須預先經過代碼審核,直接看代碼,沒有什麼問題就交,如果交進去後來發現Bug最後進行修復Bug花的時間和精力是之前的三倍十倍。整個流程一開始規劃要做什麼東西、要做什麼功能、需求是什麼,接下來設計師和工程師互相合作,比較有意思的是整個流程每個決策都要參與,而且每個決策之間互相是互動式的,工程師也可以說這個需求根本不能做或者說不用之類的。這是我的桌子,當時無意中拍了一張照片,後面兩個都是工程師,我們在討論我們的消息收發的時候是怎樣的,那個時候已經過了下班的時間。有人問,為什麼你們的產品開發的比較快或者做得比較好,有沒有什麼秘訣?其實並沒有太多的秘訣。首先,人和人之間互相尊重,同時用 Scrum,大家都坐在一起有任何進展馬上當面溝通,雖然我們遠程會議系統特彆強大,各種功能開個遠程會議也行,但是我們鼓勵在一起坐下來聊。團隊最初期的時候就要開始協作,不同角色的人坐在一起討論,不像國內分階段分得特別明顯。最後,設計師和開發者在工作的後期聯繫是非常緊密的。特別當看到一個簡單或者重複性的任務被email或者tower(或者teambition)上分配來的時候,不要因為任務簡單就馬上跳上去干,不然這樣極可能被簡單重複勞動把自己的時間全部佔光,最後沒來得及乾重要的事情,或者沒有精力去思考更加長遠更有影響力的事情。
所以,重申一次,去做impact和urgency最高的事情(這種事情一般來說不是很愉悅,甚至比較棘手或者說是無從下手的事情),而把簡單重複的活盡量後排(或者delegate出去)。這時你才會發現你的忙碌是有意義的,而不是做「偽工作」(pseudo work)。我常常看到一些畢業不久的人每天都很忙,但卻沒有抓住重點,只是為了忙碌而忙碌,或者用更加貼切的話描述是:「為了感動自己而忙碌」。很多時候這樣的忙碌,最後都是一個屁。之前在Facebook里,對於這樣的同事有一個稱號叫做「pseudo worker」,領導的職責是直接給他們透徹的反饋,讓他們認清自己工作的impact最大化的地方到底在哪兒,同時告誡他們要忍住低impact的簡單任務的誘惑。對的!那些垃圾任務有著一種誘惑;誘惑著沒有定力的人一直去做,一直去做,感覺自己特別有成就感,特別「忙碌和充實」。所以要小心!在國內創業路上也有很多這樣的創始人(或者cofounders),他們自己的方向可能沒怎麼想清楚,或者路線沒有執行得當,卻一天到晚在朋友圈篩自己和同事們的加班,覺得這樣的「忙碌」很充實。其實這是一種很可怕而且對自己和團隊既不負責的做法。一般工作時長驚人但又沒有unicorn估值的公司,我總覺得加班是一種羞恥,是自己團隊不會分優先順序或者戰略不明確的表現;如果創始人還一直在那裡秀加班來感動自己的話,我的建議是儘早離開。同時我還感打賭,90%這樣的公司在加班(和日常工作時間裡)的效率是偏低的。另外,Zuck Review可以從用戶的角度進行分析。有的時我們候做一個產品或做一個技術,一直做的時候會把很多東西想的過於簡單,而用戶很多時候比較傻或能夠一秒鐘變傻,會覺得這個東西並不好用。這一點感覺扎克做得比較好,扎克自己不是特別懂技術細節,如果他覺得這個地方為什麼這麼難用,會給你講很多有意思的東西。4、Facebook是怎樣利用OKR進行人才管理的?接下來是整個Facebook的管理是怎樣,即OKR。在Facebook,OKR意味著每六個月或每一年,制定一下你個人的目標、團隊的目標以及公司的目標是什麼,接下來行動就可以了。
第一點,在目標制定的時候你要以結果為導向或者以影響力為導向,不要為了做而做、或者做一些偽工作。在工作的時候很多人會做一些偽工作或者簡單的工作,也就是自己願意做的工作。第二點,在Facebook會看每六個月、這半年的指標到底是什麼東西。第三點,每年6月底、12月底分別會做一次個人績效評估。
最後,一個月之後評估結果就會出來,將決定你的獎金多少、是否升職,年終績效評估將決定你的現金獎金是多少,年底除了現金還有股票的追加。不管任何級別,只要是工程師都會給你相應的股票,每過一年年底績效評估將決定給你追加多少股票,一般都會追加股票。具體的績效考核怎麼做?
首先是國內常講的360度評估,每6個月做一次,主要是四個部分:自評、同事評價、直屬上司評價和老闆評價。最後比較有意思的啊,你可以決定這個東西是否開放、被誰看到。一般有85%左右的人會選擇開放,這是很恐怖的一個數據,基本上互相之間都是開放的。最後一點就是HR和整個Team calibration,從上面再校準一次。
最後就是獎金,給你規定一個獎金,在10%到25%的區間。看你在哪個級別,新進來是10%,越到上面越高。然後要乘以你的個人績效,0表示沒有獎金,一般在1.25左右,4.5就很高了。最後再乘以一個公司的績效,公司那幾個高層對公司這半年來做得怎麼樣打一個分,如果公司做得很不錯,所有人的薪水都會加。
5、師夷長技以制夷:對中國互聯網公司有什麼啟示?最後,我想說說Facebook的管理之道對中國互聯網公司的啟示是什麼。雖然在Facebook工作很好,但我更喜歡加入中國的公司或者自己創業,和一幫國人在一起做一個公司,有一個牛逼的產品能夠放到國際市場上和西方對打。首先想強調一點,很多人說Facebook工程師文化特別好,但是它的文化並不是與生俱來的。前幾天為了佐證這個觀點我專門看了一下2007年大家對於扎克的想法,那個時候公司一團糟,偶爾有幾個比較厲害的人,Facebook現在比較牛的工程師文化是在2008年、由一個女孩Molly Graham逐步營造起來的。
Molly營造公司文化的過程,在這篇文章有闡述(http://firstround.com/review/80-of-Your-Culture-is-Your-Founder/)。當時,Facebook從400人快速增長到1000人,公司已經管不過來了,一團糟,大家互相埋怨對方,幹活非常沒有效率,做了很多低效的事情。那麼怎麼把公司管好,同時讓更優秀的人可以持續進來呢?Molly建議Facebook建立工程師文化,她當時讓扎克自己寫了十條他覺得比較牛逼的人是怎樣的,當然那十條大部分就是由扎克自己的氣質決定的。這十條標準寫出來之後,在公司裡面反覆強調,同時招人也招符合這些條件的人。所以可以得出一個結論:公司80%的文化來自於創始人。最後一個結論,當一個公司變大,比如從A輪到B輪的時候,一定要營造出自己的文化。所以如果你是創始人,在公司還小的時候隨便怎麼弄,但是你自己要很明確有一桿秤;當公司到了500人以上的時候,這個時候一定要建立自己的公司文化。對技術人員來說,判斷公司文化很多時候都是看創始人,看創始人是幹什麼出身的。如果他是做生意的,那麼這個公司或許並不是是你的最佳歸屬,即便講得再牛。舉今日頭條的例子,他們做得比較好,老大本身也是技術出身,他們公司對技術人員的待遇非常好,還去矽谷挖了很多牛逼的人,把公司氛圍營造得非常好。所以看創始人是可以看出來這個公司文化到底是怎樣的。對任職管理者的工程師來說,在創業的過程當中有四點需要注意:第一,盯一線產品。下面的人不怕你challenge他,怕的是把這個東西做完之後上面的人不看,他就會覺得自己所有的辛苦努力全部都浪費了。第二,6個月要做一次Performance Review,這將決定員工的獎金和股票。第三,Code Review。在工程方面並不是用最好的技術最重要,而是把Code Review加進來,這並不是為了查出錯,而是有時候要注意自己看一下,你交的代碼整個邏輯是不是清晰,同時會留下記錄以便如果後來的人想學習你這個功能是怎麼寫的,他可以來從這個上面看所有的記錄,這是工程師之間互相切磋和交流的一個工具。第四,很多中國的創業公司有常會忽視的,入職培訓和Wiki要寫好。麥肯錫曾總結成功的公司的最大的經驗是:Wiki做得很好。可以把公司中每個人的知識歸檔、以及把每個人牛逼的知識在整個團隊里擴散出去,是非常重要的一件事。最後申明下版權,本文首發於InfoQ公眾號:覃超:Facebook的項目開發流程和工程師的績效管理機制關注InfoQ,回復「魔王」,下載大魔王演講PPT。推薦閱讀:
※揭秘 Technical Writer 的工作環境 | 加入 PingCAP 五個月的員工體驗記
※自動化的方向與未來
※石墨烯PLA復材怎麼做到耐高溫_復材 (#6) *完成小試
※終於量產!深度解讀英菲尼迪可變壓縮比發動機
※Markdown:寫技術文檔、個人博客和讀書筆記都很好用的輕量級標記語言