5. 保持一個尊重的工作環境
彼此間的尊重會促進溝通。一個可以挑戰任何人觀點的地方,一定是一個可以產生好主意的地方。一個容易被攻擊的地方,是會抑制反饋的。
在過去的幾十年里,頭腦風暴(Alex Osborn 在1948年創立)風靡于工作場合,同事們聚集在一起,放棄批評和負面情緒,不用擔心被評價,提出各種創造性的想法。充滿敬意,推遲評價是頭腦風暴的關鍵。但最近的心理學研究,正在顛覆Osborn的方法,新的研究鼓勵在頭腦風暴中爭論,這樣實際上能避免團隊思想的僵化,從而產生更有效率的想法。根據這個理論,一個尊重的環境,能夠產生更好的主意。
工程的領域一般都很廣(系統,機器學習,產品等等),不是每一個人在每一個領域都有相同的經驗。實際上一個強有力團隊里的每個人都應給在某個領域很強,即使在其他領域可能很弱。一個系統工程師不應該和一個產品工程師放在一起評估,在一個健康的工程師團隊里,這是很重要的,尊重彼此的差異,不用單純用一方的強項去評判另一方。
6. 建立共享代碼所有權
沒有人對代碼的某部分熟悉后,就覺得他應該獨自擁有或是維護這段代碼。在短期內,某個人成為產品某個部分的專家,在一年或更長的時間里也許會提升效率,但長期來看,這種方式最終會帶來傷害。
有組織的共享代碼,會帶來三個好處。第一,保持公開,能夠更好的減低維護者的壓力,也能夠降低維護者離職,給團隊帶來的風險。這也讓無憂無慮的休假變得不那么困難。我不會忘記,在我獨自維護Ooyala's 日志處理系統的時候,有次我在夏威夷穿越,結果不斷的收到報警短信的那些日子。
第二、共享所有權,能幫助那些沒能參與某個領域的工程師,擴展新鮮視野。而且這樣也可以避免工程師有“我必須扎根一個項目”的想法,可以鼓勵他們參與多個項目。這個可以幫助保持工作興趣,增進雇員不斷學習和保持動力。長期來看這樣也可以降低工程師感到停滯而辭職的風險。
第三,共享代碼還有這樣一個功能,當有一個戰略級的目標需要更快速的完成時,多個團隊成員可以云集在一個高優先級的問題上,優先解決它。如果私密化代碼,那么責任只能落在一兩個人身上。
一個工程師團隊容易犯得的錯誤是:在整個team不大的時候,就把團隊分成了若干子團隊。子團隊會壘砌一堵墻,妨礙共享代碼,因為每個人會受到子團隊目標的影響。Ooyala在我在的時候,就分了小團隊,這使我失去了和另一個團隊的人一起工作的機會,對此我非常遺憾。因為那個團隊采用了一種敏捷開發方法,他們很關注共享代碼所有權,我聽說這給工作滿意度和工作效率帶來了很大的提升。而我熱愛Quora的一個重要方面,就是我們強調項目屬于整個團隊,這讓我有機會參與,用戶增長,機器學習,監督工具,推薦,分析,站點提速,垃圾判斷等項目。
7. 在自動化測試上投資
單元測試加集成測試,是那些大型的,產品相對穩定的團隊,僅可用的控制大型代碼質量的方法。而對于那些為了提高代碼質量進行的大規模的重構,自動化測試可以提供一種可靠的保護。如果缺乏嚴格的自動化測試,那么用工程師團隊自己測試,或者聘用外包團隊測試,時間成本都會變得很高。而且這樣容易陷入一種害怕通過重構提升代碼質量的不良文化。
在實踐中,自動化測試伴隨著團隊的成長,需要不斷的開發。代碼數量隨著的產品的成長在不大增大,但是由于新人的加入,團隊成員對代碼的熟悉程度卻在降低。對工程師對代碼還有印象的時候進行測試,比起幾個月或幾年后再進行測試要容易的多。所以鼓勵加強單元測試的文化,能讓作者更有責任感,能保證產品質量。
8. 自由支配 20% 的時間
Gmail 來自于Paul Buchheit的20%項目,他第一版的開發時間加一起不超過一天。 Google News,Google Transit,Google Suggest 也都開始于20%項目。我在google的時候,用20%的時間,寫了一個python框架,它能夠很容易的搭建一個搜索頁面原型。雖然現在google20%時間的效率可能比早期低了,但是這種觀念,容許工程師花費20%的工作時間在其他項目上的觀念,依然會是小工程師團隊創新的搖籃。
Ooyala沒有官方的20%時間,至少我在的時候沒有,但是我仍然想辦法,寫了一個命令行Flex和Actionscript編譯工具,它能提高團隊編譯的時間,其實就是一個 Adobe's Flex Builder工具的降級版本。雖然現在工程師團隊已經增長了三倍,但是這個工具仍然在被使用。 Atlassian在嘗試了一年以后,正式才用了20%時間。 有個facebook創立的20%時間的變種,Ooyala后期也采用它,是周期性的hackathons,--整夜的干,規則就是你可以干任何事情,除了你的本職項目。
從上到下的指定計劃的方式,在關注整個公司的方向的時候是非常必要的,但是不適合管理眾多的來自緊貼現實的工程師的創意。只要工程師負責的對待20%的時間,并且專注在那些可能產生重大影響項目上,那么這個過程中可能會產生重大的進步。沒有官方認可的20%時間,這些仍然是可能的,但是更加的困難,設計和工程師想去實現那些瘋狂的想法,就必須要犧牲周末和假期的時間了。
9. 建立一種持續學習提高的文化。
學習和有足夠的挑戰,是心理學教授Mihaly Csikeszentmihalyi所說的達到“FLOW”所需要的要素,在“flow”里人們關注他們所做的事情,并且被它激勵著,甚至都忘記了時間的存在??焖俚鷰淼闹苯臃答佈h是達到flow的另一要素。
每周的技術講座,為工程師提供了一個論壇分享他們的設計,他們的構建,也為工程師提供了一個為自己工作感到自豪的機會,而且這樣也能讓其他工程師學到他們領域以外的知識。內部(知識管理系統),諸如,email系統如何工作,搜索服務如何排序等,也能鼓勵工程師學習和發布他們掌握的知識,以及更好的完成 20%的時間。在Quora,我們跑了一個內部的Quora服務來做這個事情,在上面我們提一些產品或開發的相關問題。
建設學習文化的目的,是通過教育和訓練,確保每一個人都具備做好工作所需要的“基本算法”、“系統”、“產品”等技能。隨著工程師團隊的成長,團隊會把越多的精力放在招聘上(尤其是校園招聘),那么,就需要更多的在指導和訓練上投資。在新雇員到來的頭四個星期,導師每天花一個小時來輔導,這可能對導師來說是一個負擔,但是,這個只花費了導師一年工作時間的1%的投資,會有顯著的杠桿效用,這會決定,新雇員是否會取得成功。