在產品開發的過程中,工程師的主動性體現在要善於處理不確定性,迅速發布滿足可以接受的最低標準(但並非低標準)的產品,再根據監測數據的情況不斷完善,最終達到極致。
在Facebook,對於工程師來說,公司特別提倡以下幾點。
其一,迅速發布,再進行監測(Move Fast and Monitor Closely)。Facebook一直崇尚的是盡可能滿足一個最低標準,當然這個最低標準也還是很高的,你可以在完成產品離所謂的完美程度還有一定距離時迅速推出去。接下來,就要監測這個產品最重要的幾個指標,從整體的運營數據來看看你的產品究竟算不算成功,找出哪些方麵沒有達到你的預期,然後思考如何加以改進,再推出下一個版本。Facebook很多嚐試性產品發布的時候有一些已知問題,由於Facebook發布是灰度發布 方式,如果這些問題隻在極端少見的情況下才會被用戶碰到的話,在新產品的發布初期是可以接受的。這由主導工程師和產品經理來決定,大家都習慣了相信這些人的主觀判斷。Facebook崇尚的是Move Fast,前提是不能有太多錯誤,尤其是低級錯誤。如果你僅僅速度夠快,但每次推出去的產品各種錯誤接連不斷,很快你的名聲就毀了,這種質量的快速是不允許的。Facebook在早期還提Break Things(產生破壞),其實是有點開玩笑的,後來工程師多起來,即便每個人出錯概率隻有千分之幾,綜合下來公司每天還可能會出現一個較大錯誤,後來逐漸開始提倡初始代碼質量方麵的要求,所以就不再公開講Break Things,而Move Fast一直在強調。在2009年的一次“禮品商店”新版本發布中,我犯了一個錯誤,把本來隻應該影響和禮品商店相關的數據庫訪問擴展到了全站,結果導致全站的後台數據庫崩潰,在半小時內Facebook不能響應任何訪問。這是我在Facebook第一次讓全站崩潰,也是最後一次。我當時的確很緊張,想死的心都有,在極度緊張中很快提交修複,半小時後所有的訪問都恢複正常。當天和我一起作戰的一位資深工程師(公司前20位員工,後來是工程總監)開玩笑地對我說:“Harry(哈裏),如果你從來都沒有讓整個網站崩潰的話,你就不能說自己真正是Facebook的工程師!好玩吧!”
其二,坦然對待不確定性(Be Comfortable with Uncertainty)。前麵講到,要迅速發布產品,會涉及究竟優先開發產品的哪些功能,在市場上去做試驗。在互聯網2.0時代,訪問網站是光速,更新網站是近似光速。Facebook將網站的更新做到了極致。這樣做,主要是由於這種產品是否適合市場的不確定性:這一次做對了,下一次繼續增強;這一次做錯了,下一次馬上改正。這就考驗工程師跟不確定性打交道的能力,你要根據自己的知識和經驗,敢於做出選擇,然後根據監測數據及時改進或做出調整。公司不允許對一個計劃中的產品是否成功有太多糾纏,當然會有討論,在討論中鼓勵大家理性地分析用戶可能有的反應,感性地推銷自己對某個產品方向的熱愛;但對於有爭議的產品,很難有一個大家都完全認同的方向。這個時候,公司更願意相信有能力的產品經理或工程師的判斷。比如剛開始決定要用時間軸來替代個人主頁,誰能確定這樣做的效果就一定比原來好呢?但紮克伯格敢於將它推出來進行試驗,並且工程師團隊也願意跟他一起去嚐試。在大家互相無法說服的情況下,倔強一點的工程師會說“何不讓我花兩天時間做一個最簡版本來試試看呢?如果有效,我們繼續做;如果無效,那就停”,這就是著名的“代碼勝於雄辯(Code Wins Arguments)”的來源。當然,這些做法中最重要的是監測相關數據,以驗證自己的預期,如果出現的錯誤越來越少,用戶反饋數據越來越好,那就說明這種改變是積極有效的。
其三,不追求極致,應該不斷地發布以達到目標(Done Is Better Than Perfect,Stay Focused and Keep Shipping)。在眼下所處的互聯網時代,軟件開發工程師不要試圖追求一次就讓你的產品達到極致。這一點不像硬件,比如蘋果公司的iPhone等硬件產品,它對產品有極致的要求,因為硬件一旦銷售出去,如果發現致命的問題,除了召回沒有其他辦法,隻能等到下一次推出新產品時再改進。它也不像傳統的桌麵軟件產品,其更新與否很大程度上取決於用戶的興趣、時間、使用習慣和集成程度等,導致產品更新有很多負擔。而且多次更新之後,會出現用戶群之中多版本共存的問題,版本兼容、版本管理就成為很頭疼的事。這些都增加了產品的開發難度,拖累了產品的開發速度。而通過瀏覽器訪問的網站產品,則沒有上述問題。代碼隻存在於服務器端,開發者要麼不更新,要麼最終全部更新 。而且,網站的更新可以在比較短的時間內完成(小網站隻需幾分鍾,像Facebook這麼大的網站最多幾小時),用戶也沒有任何本地舊產品的負擔。這就允許互聯網公司可以不斷地嚐試,不斷地改進,在這個過程中逐漸達到極致。當然,由於用戶的口味、需求都在不斷變化,在這種商業環境中,沒有最終的、穩定的極致狀態。隻有不斷地進行符合用戶需求的改變,才是能夠在互聯網時代生存下去的法寶。