我為什么勸你放棄個人代碼所有權?
編碼是一種藝術形式,藝術家們非常重視他們的作品。這種發自內心的依戀讓程序員們充滿激情。這可能是件好事,但也可能導致問題。
除非整個開發組織只有一兩個開發人員,否則在意個人的代碼所有權是一種病態的行為。我不推薦,也不鼓勵。原因如下:
1. 對代碼的情感依戀傷害了集體智慧
與代碼相關聯的程序員會認為代碼是自己的一部分。這種情緒導致代碼變成他人不可觸及的,而這種教條主義思維會發展成權屬之爭。當涉及情緒時,代碼審查是困難的。除非代碼的所有者批準更改,否則無法進行改進。
我觀察了一些團隊的軟件開發過程,認為團隊理念應該被擴展到開發的所有權、目標、過程,衡量成功的方式以及如何慶祝等工作的所有方面。就如同在一個球隊中不能說球員自己的勝利,而是團隊的勝利。每個成員都是一個有機體,是能完成工作的重要組成部分。贏得比賽的是球隊,而不是某個球員。同樣地,開發人員不應該感到自己擁有代碼。相反,他們應該覺得自己是構建代碼的必要組成部分,是為組織工作而不是自己打游戲。
作為工程文化的組成部分,正確地培養對代碼的感覺需要公司頂層的支持,最好是在一項新工程開始時就著手準備。如果鼓勵恰當,這種文化就會在團隊中形成,成為現實。
2.個人代碼所有類似流水線上的單點故障
開發者本身會有生病、辭職、升職、轉行、出國、死亡等任何你能想到的不測。把一個公司的知識產權的重要部分與一個人聯系在一起,是一條通往災難的單行道。個人代碼所有權會將公司的健康狀況與代碼所有者個人的健康狀況,或與所有者/公司之間關系的健康狀況聯系起來。
如果一個開發人員擁有代碼權,那么開發人員就成了一個單點故障。如果他或她發生了什么事,公司就會承擔后果。代碼越復雜,公司需要承受的損害就越大,回到正軌的時間也就越長。
3.團隊比個體之和更強大
一個有才華的開發者可以創造出驚人的價值,但是一個由N個開發者組成的團隊創造的價值超過N個開發者開發價值之和。頭腦風暴、協作和反饋可以提高任何開發人員的質量和產出,不管他或她多么有才華。當一個人擁有代碼時,頭腦風暴和協作就要讓位于所有權,而結果會影響產品的質量。
也許你會認為幾個開發人員獨自工作比一個小團隊一起工作要好得多。一個開發人員單獨工作可能會更快地產生一些實際的結果,這對于解決一個問題來說是很好的,但是其整體結果的質量和壽命是有限的,這對企業來說不是很理想的。
4. 代碼是一種產品,屬于團隊擁
有沒有人會這么想問題,到底房子屬于建造它的木匠,還是屬于購買它的房主?這是因為房子是一個物理實體,它具有我們所認為的買方擁有的實體品質。當你在商店里買食物時,那就是你的食物。如果你買了一輛車,那就是你的車。再明顯不過!
當一個產品是概念性的,事情就不那么明顯了。例如,小說的作者擁有故事版權,而買書的人只擁有紙質書。軟件更接近一個概念而不是一個物理對象,而開發人員,特別是小公司的開發人員,覺得自己擁有它。他們有這樣的感覺,因為他們是唯一了解細節的人。這是一種自然傾向,但同時也是一種謬論,組織和開發者應該遠離。
軟件由公司所有,而不是由開發人員擁有。從法律上來說,這是軟件開發人員和他們的雇主之間的雇傭合同中所規定的事實,但人們每天的感覺可能都不一樣。雖然工程團隊應該對工作有責任感,但開發人員不應該產生個人所有制的感覺。
5. 創新需要一個組織
如果一個開發人員單獨擁有代碼,那么開發人員將完成所有的創新。聽起來不是很荒謬嗎?作為一個獨自工作的工程師,確實可以做到快速創新,但很快就達到能力的極限了。另一方面,一個團隊可以繼續通過集體智慧,頭腦風暴,從不同角度看待問題,將一個人無法擁有的豐富經驗搬上臺面,進行創新。
如果團隊隨時做出改變,引進不同經驗的新成員,其創新的質量就會增長,新概念的火花也會被重新點燃。辯論和善意的摩擦刺激創新,那些秘密的和受到謹慎保護的部門的知識領域則不容易創新。
6.個人代碼所有權會導致停滯
缺乏創新會導致工程停滯不前。長期處于孤立狀態下的程序員往往會被他們已習慣的觀念所影響。他們會不同程度地拒絕接受工作上的任何改變,因為固化的觀念已經給他們帶來了復雜的意義。如果與自己的觀念不一致,任何外部來源的想法最終會被過濾掉。如果是在創業初期,這樣做可能是件好事。然而,時間一久,這種開發軟件的方式就很難擴展了,繼而將不再有創新。
7.個人代碼所有權會阻礙個人進步
那些整天獨自在同一個代碼庫工作的開發人員變成了籠子里的鴿子。這意味著他們在任何不是他們專長領域的地方都變得遲鈍,裹足不前。
我曾經看到過來自大企業的開發人員,他們在同一個應用程序的同一個對話框上工作了多年(微軟的一些部門曾經因此而臭名昭著)。這種專業化是極端個人代碼所有權所導致的結果,造成了個人成長的損失。
8.個人代碼所有權阻礙了職業發展
如果一個開發人員把自己和他們的代碼捆綁在一起,那么他們不僅是上面所提到的單點故障,還很難晉升到更高的職位,因為沒有簡單的方法來替代他們所負責的工作。
我之前在一篇題為《Work yourself out of your job》的文章中談到了這一點:“要得到晉升,你必須放棄你寶貴的財產,把自己從目前的工作中擺脫出來,這樣你就可以開始一個更高級別頭銜的新工作。”個人代碼所有權限制了這種可能性。開發人員若想提升,要做的第一件事就是確保他們不是某部分代碼庫的所有者。
個人代碼所有權通常是自己造成的,因此也很容易被自己撤銷。為了做到這一點,開發人員需要友善地鼓勵其他工程師接觸自己編寫的代碼,并協助他們熟悉它。一開始,讓所有權消失會有風險。這會讓你覺得你把自己從工作中趕了出來,但這是正確的做法,去做不同的更好的事情會更有益。
9.個人代碼所有權是工程師們的監獄
“擁有”部分代碼,感到不可缺少,這可能會給人一種職業安全感的錯誤印象。然而,工作安全看起來更像把自己關進監獄,而不是待在一個舒服的地方。不學習新技能,沒有職業發展,一個軟件工程師就像被關在一個自制的監獄里,并且這個監獄空間還會變得越來越小。
幾年前,我讀了一篇優秀的文章,標題為《Give Away Your Legos, and Other Commandments for Scaling Startups》。它談到了創業公司的可擴展性,同樣的概念也適用于個人的可擴展性和職業發展。如果一個開發人員整日把自己的“樂高積木”放在身邊,小心翼翼地保護著,就等同于用樂高磚給自己建造了一座樂高監獄。放棄你的樂高積木吧,重塑自我,繼續前進。
10.開發人員堅持他們的代碼所有權,易與領導沖突
在技術世界里,市場總是在不斷變化,產品也是如此。有時產品變更必須是激進的,開發人員需要適應和支持領導要求的變更。當個人代碼所有權的感覺過于強烈時,開發人員往往會與領導產生分歧并抵制變更。這種行為可能會導致沖突,要么減緩進度,要么被解雇。
如果在一些大型機構,整個團隊都會因為一個項目取消而被解雇。試想,為什么一個公司會因為一個項目被取消而解雇一個有才華的工程師團隊呢?如果工程師能毫無問題地進行新項目,公司會解雇他們嗎?現實情況是,有時候,團隊是圍繞項目形成的。個人過分專注于一個項目,擁有它并小心地保護它,失去了適應新項目的能力,拒絕改變,拒絕放手,得到的不僅是一所監獄,還可能是專業的棺材。
11.個人代碼所有權導致不信任
一些認為有必要擁有和捍衛代碼權的開發人員正在傳播一種不良印象:都給我躲開!我才是唯一能理解或接觸這段代碼的人。
這種印象可能不會被明確表達出來,但整個工程團隊都會有感覺,有意或無意地認為這是不信任的信號。當同一團隊的成員互相不信任并明確表示時,團隊就會遭受損失,并失去快速行動的能力。不信任會導致不良摩擦,這會消耗寶貴的能量,卻不會產生任何積極的結果。
當開發人員開始放棄他們的個人代碼所有權意識時,事情就會改變。信任成為工作方式的一部分,團隊合作成為驅動力。團隊在一個充滿信任的環境中運行,會產生更好的結果,并變得更有彈性。
12.拒絕分享對組織的發展沒有好處
感覺自己單獨擁有代碼的開發人員常常覺得他們不需要任何流程來指導他們。Agile方法中如Scrum或其他形式的組織結構對這些開發人員來說似乎是外來的和不必要的。這點和一個拒絕在任何壓力、結構或約束下工作的藝術家來說是不一樣的。
這種軟件開發的觀點根植于早期的黑客時代,是那時很典型的年輕開發者的生活。單飛、學習、成長,長時間占據一個程序員的生活,他們和流程中其他人沒有任何關聯。這種工作方式是缺少彈性的。當一個或兩個以上的人參與一個項目時,輝煌的黑客時代使用的方法便不再有利于工作。
在開發人員作為團隊的一部分進行工作時,流程成為一個重要的工具。它有助于同步工作并確保高效、可預測和有組織地交付結果。黑客和開發軟件之間存在著巨大的差異。前者可能很有趣,后者則是工程組織如何規模化。