軟體開發管理中的博奕論
吳旻
泰岩網路工作室
軟體開發人員大多懂得演算法的威力,但無數失敗的項目卻向我們展示了一個又一個教科書解決不了的困境。不斷前進軟體的管理方式在力爭避免項目失敗,其實就是在不遺餘力的破解這些困境。今天我們從博奕論的角度重談這些問題,沒準你會覺得從此天高雲淡!
一、到底誰的BUG:“智豬博奕”,多勞並不多得?
曾經有過一段時間,我不停地在和幾個團隊溝通並界定介面出現的BUG是哪一方的責任。限於某些原因,沒有哪一個團隊願意主動去找出問題的原因,反而都說自己的沒問題。於是問題就被當作皮球踢來踢去了;所有的團隊都相信最後會有人忍不住的,至少負責人會出面找人來界定的,所以自己並不急。
“智豬博奕”的故事也是說,如果活只有一個人來幹,但好處卻是大家分享,那除了強勢的群體,其他人還是等著坐享其成的好。博奕論給出的解決方案是修改遊戲規則,讓坐享其成的人付出一些代價,比如將被證明有問題的團隊的績效的一部分分給真正解決問題的團隊,那大家就不會覺得自己沒問題了而坐享其成了。
二、能人過度流動:資訊不對稱,“劣幣驅逐良幣”?
在實際工作中發現,有些公司的所謂“老員工”都是一些能力比較平庸的人,而就算是有能力強的人進來,也會很快離開。換句話說,能人是很難留下的。這和中國古代銅錢中含銅的比例不宜過高一樣,高了就會導致有人盜鑄,從而獲利。
另一個更貼切一些的比喻是“二手車市場”。如果你想買二手車,但你又不清楚二手車到底值多少錢,所以你就會覺得價格越低越好;但好的二手車價格不可能太低,於是二手車市場就真的只有差得不行的二手車成交了。
缺少有效斟別機制是這個問題的關鍵,解決方案也從這裡開始。如果買家能確切瞭解二手車資訊,那他就知道該付多少錢,就不存在價格越低越好的怪圈了。同理,如果公司知道能力強的人和平庸的人的差別,並且能給出合理的定位,那一切就都能迎刃而解了!
三、沒人敢指出錯誤所在:“多個人的囚徒困境”,事不關已?
有時候幾乎所有的人都知道問題出在哪裡,但就是沒有人站出來。埋怨這些人都是膽小鬼?錯啦,因為人在這個時候是非常理性的:我說了,我指出了,很可能被打擊報複,“槍打出頭鳥”呀!
“多個人的囚徒困境”是說,個體的理性有時是和群體的理性相反的。尤其是在一個高壓氛圍的環境中,所有的人都不敢說話,於是大家就只能眼睜睜的看著又一個本可以避免的悲劇發生了。
破解這一難題的一個辦法是建立良好的溝通渠道。尤其是從沒有過民主氛圍的團隊,從不許說,到可以說卻不會說、亂說,到能說並且會說,有一個相當長的過程。
四、面向(需求)變化編程:“資訊動態博奕”
軟體開發中經常會遇到使用者的需求變個沒完沒了,而且對方還覺得你不夠配合,沒有把他當成上帝!可事實是,你為了這點錢,已經累得快死了!
這就像我們平時玩“猜拳”一樣,如果你要想贏,那你就得知道對方出的是什麼。我提出的“面向變化編程”其實就是這個意思。如果我事Crowdsourced Security Testing道使用者有可能發生哪些變化,並且提前做出適當部署,那問題可就好辦多了。破解這一困境的前提是要充分瞭解需求的來龍去脈,只有你提前預期到使用者可能出什麼“牌”,你才會從容應對!
五、保守的合作者:“進化中的路徑依賴”
某航天項目中有若干個合作方,但其中的一方使用的作業系統竟然還是Windows 98!其他合作方對此都是怨聲載道,因為無論是從速度,還是穩定性,Windows 98早該被換掉了。可這一方說自己的程式用了10多年了,不想換!於是,為了保證Windows 98的可能故障不發生,別的合作方都不得不做出比標準工作更多的工作來!
我就見過堅持不使用IDE的程式員,理由就是自己習慣了。我覺得這個人把技術當成信仰了,就像回族兄弟姐妹們不吃豬肉一樣,那完全不是好不好的問題!
為什麼不願用更合適的東西,為什麼老是犯同樣的錯誤,這是我們在工作中經常會遇到的問題。說白了就是習慣了,要想打破這種依賴心理,你必須改變他的路徑!要知道,微軟就是通過未來不支援XP的方式來推進使用者進行作業系統升級的!
六、你做的不是我想要的:“資訊傳遞需要成本”
忙了半天,最痛苦的事情就是人家說:你做得根本不對,不是我想要的!為什麼會出現這種情況,我覺得關鍵還是溝通的原因。事情上,某些時候,溝通的成本如此之高,以至於很難溝通!
比如說,你去找老總,老總說,我沒時間,你看著做吧;比如說,你去找使用者,使用者說,你先做出來我看看;比如說,你去找合作方,合作方說,我們的產品是有多少多少使用者為基礎的,從沒發生過錯誤,問題一定是你們引起的!
怎麼樣,頭大了吧?其實這個也不難,難的只是開頭。要知道,簡單是因為信任,而信任是因為瞭解!所以,一定要把資訊傳遞的通道建立起來,這樣溝通的成本就會大大降低了!這個屬於一次性投資,是要花些成本的,但不會沒有回報!
教科書中的博奕論多是講如何對理性的個體最有利,而軟體管理中要的破解困境卻是個體“最優”導致的團隊“最差”、一方“最有利”導致的團隊“高成本”的情況。他山之石,可以攻玉,至少在許多時候,應用以上方法都比用單純的績效考核來得方便、實在。