> 原文出處:https://www.phodal.com/blog/rethink-one-build-dream-team/
> 作者:?[Phodal Huang](https://www.phodal.com/blog/author/root/)
## ReThought (一): 如何構建理想的開發團隊
**引言**: 過去,關于理想的開發團隊似乎是一個熱門的話題,所以我也來湊湊熱鬧。人們想要理想的開發團隊,只是因為在傳遞知識的時候很痛苦。人們總在說,這個地球多你一個不多,少你一個不少。假想有一天你們團隊中的主力走了,那么你們的團隊會怎樣?塞翁失馬,焉知非福。
也許上個月我們團隊里走了個漢子,來了一個萌妹子。也許下個月會走個老人,那必然也會來個新人。對于個人來說,這是件好事。但是對于團隊來說,則有待商榷。于是,也將過去的一系列思考整理成一些文章,方便和以后的想法進行一些對比——有時候會發現最初的想法都挺好的,只是沒有記錄下來。
## 最初的團隊

有時,我在想最理想的團隊莫過于一些創業團隊了—— 分工明確。那些還存活著的公司在過去都有著那樣理想的團隊,然而隨著公司業務與團隊人數的增長,離這一些越來越遠。
在我認識的那些創業公司的前端人員中,多數可能還充當著后臺 API、App的開發,原因可歸類為:
1. 招不到人
2. 沒有錢
3. 不知道招什么人 (他們自己并沒有意識到自己不知道)
如《REWORK》一書中所說的那樣,只有在你真正受不了時才招人。如果同那些大公司一樣,漫無目的地進行撒網,那么早晚會死在這條路上。通常在那些存活下來的團隊(也包含沒有存活下來的團隊)里,一個人可能身兼多職,會有小部分的重疊,但是不會太多。
在這一個時期主導團隊往往是Idea的所有者,Owner找來一個技術人員,這個技術人員再依照短處去尋找需要的人才。

隨著公司業務的發展,出于個人、家庭、團隊因素,總有些人會離職(人總是有需求的,WiFi應該是最底層的吧),總需要迎進新人。
## 有序的團隊
最初整個宇宙是混亂的、整個系統是混亂的、整個組織是混亂的。通過不斷地分門別類,整個系統看上去似乎有序了。

在這樣的團隊里,A做著A應該去做的事,B做著B應該去做的事。
1. 如果A和B很熟悉,可能產生出ab —— 可能是一個新的系統,也可能是一個新的生物。
2. 如果A和B不熟悉,那么通過公司的各種各樣活動會幫ta們產生ab。
3. 如果A和B不得已熟悉,那么我想這個ab可能是API。
在最初的團隊里,A和B可能只隔著10cm,后來他們越來越遠。
職能分明的團隊是一個解耦后的系統,他們間的溝通需要比原來花費更大的開銷。在傳統IT公司及大部分的互聯網公司都有這樣的"最后一公里"問題。引自之前的文章[《知識論(一): 知識傳遞》](https://www.phodal.com/static/media/uploads/rethink/https://www.phodal.com/blog/knowledge-transfer-part-1/)?:
> 傳統軟件開發流程中,知識傳遞的方式主要在于文檔,而我相信在網上已經有足夠的證據可以表明,程序員既討厭看文檔,又討厭寫文檔。
無論是在系統集成環節,又或者是在交接環節,人們所做的一件事只是知識傳遞。因為職責讓你不可能接觸太多的東西,就好比原來你可以每天吃一點的藥,突然要你在短期內吃完。
## 理想團隊
團隊類似于人物文明,更多地在于文化與知識的傳承。人們想要一個理想的團隊,但是他們往往并不知道他們真正的問題不在于團隊本身——而在于團隊是如何協作的。
### 理想型A
在多數的公司里,團隊的組成方式類似于下圖:

如果有一天大牛出車禍了,中牛roll off了,團隊就剩下一堆綠帽子了...
在這樣的團隊里,我們可能會用下面的方式來教授團隊的成員:

即類似于傳統的授課制:
1. 你今天去把《Thinking Java》看一遍
2. 你今天去把《設計模式》看一下
3. ...
在這時候,那些領悟力比較好的就在NB的路上了,但是每次只會有那么一兩個人。
### 理想型B
在另外一個理想型的團隊里,人們想要的是這樣的結構。

我想不到這樣的團隊還有怎樣的知識可以傳遞。在這樣的團隊里,傳遞知識是相當于容易,因為大家很容易就懂得別人說的內容。
讓團隊中的每一個人都是全棧程序員的難度很大,然而這并不意味著這樣的團隊不可構建。
## 構建理想團隊
在過去我們有師徒制,這樣可以保證師徒間知識可以傳遞下來。而在多數的軟件開發團隊里,并不存在這樣的制度,換句話說在這樣的環境成長時,你只能依靠你自己。
>?*在一個團隊里,當來了一個新人時你們會怎么做?*
如果你是一個新人,你來到這樣的一個團隊:
1. A 教你如何使用各種快捷鍵。
2. B 教你使用一些特定語言的技巧。
3. C 教你一些基本的DevOps技能。
4. D 教你怎么追妹子。
5. ......
你會考慮加入這樣的團隊嗎?
### 結對編程
或出于公司文化,或出于對自己的不明確認知,多數市場主導的公司并不會采用這樣的方式來工作。這也導致了人們一直在追逐理想的開發團隊時,一直找不到合適的時機。

這時,也許會有人提醒你,你多了個分號。我曾經在看別人的面試作業時因為多了分號,reject了一個人——因為語言是Python。
而這時候團隊的組成,傾向于下圖(圖是盜的,上面的圖也都是盜的 :) ):

在這樣的團隊里,并非每個人的技能都需要是一樣的。會出現重疊,一個比一個強,可能有一個的技能點數是最強的。項目在不斷開發地過程中,總會有人離職,有新人進來。
然而,在這個結對編程的過程中,知識都在不斷地傳遞。
(ps: 上面只是提到了結對編程會構成理想團隊,更多內容請期待下文《ReThink2: 如何照顧團隊中的新人》(9月10號))