軟體設計並不昧於專案現實

軟體專案在時程緊迫的情況下,如果專案範圍、期限與資源不可能更動,常有些人會認為要達成專案目標,應該減少軟體設計的時間,增加程式實作的時間。這些人以為時間緊迫,沒有時間做設計,軟體設計對軟體專案產出的頁獻不是最直接的,還不如把節省設計的時間拿來寫程式。誠如M君在矇矇的秘密基地《軟體的模組化(Modulize)設計應該要徹底實踐!》中提到~

這就是現實的問題,有專案在身上的時候,就很難做到。只有沒有專案的情形下才能真正落實,沒有專案就是要花錢,事實上我們老闆只是把上個專案賺的錢決定不要再接著賺,不是很有錢(我們手上有了三個專案都是10M以上的,全都暫時用政治力量擱置),要落實真的流程,當然目的是想未來能否賺更多錢。

M君的觀點看起來似乎是理所當然,但大多數的專案的經驗及教訓(Lesson Learn)卻告訴我們:「忽略軟體設計的專案難逃專案失敗的命運」。如果我們因應專案時間緊縮而在早期不做設計或整體規劃,到專案後期會因為不做設計所引發的高度風險而以失敗收場。為什麼為這樣呢?因為我們落入了「捨本逐末」的系統陷阱中,見下圖所示:

軟體專案設計系統思考圖

上圖是軟體專案設計的系統思考圖,圖中的紅色迴路便是面對專案開發時間緊縮時,常見的因應之道。省略設計工作得確可以在開發階段的早期減少工作負擔而對專案開發時間縮短的問題有抒緩的效果,但這種解決方法只是治標而不治本,是針對問題症狀的發生的暫時權宜之計;面對問題根本的解決方案應該是如橙色迴路的落實設計理念,加強設計能力進而尋求良好的開發工作績效來解決時間的緊縮。但根本解沒有像症狀解有立杆見影的效果,但一昧地採用症狀解將會出現衍生品質問題的副作用,然後離根本解愈來愈遠,正如粗線迴路一樣產生專案時間緊縮問題反而愈演愈烈,造成一發不可收拾的惡性循環,這樣的事件結構模式就是所謂的系統思考之捨本逐末基模,彼得.聖吉在《第五項修煉》中特別提到:

捨本逐末最嚴重的後果是目標侵蝕,只要目標與現狀有差異,就會產生兩種壓力:改善現狀或降低目標。(略)在人類社會中,原有的目標逐漸被腐蝕的情況常常發生。(略)事實上,因為我們總能找到一些合情合理的藉口,因此極易染上降低目標的「癮」。

其實長期降低目標所造成的後果正如同《易經文言傳》坤卦所言:

積善之家必有餘慶,積不善之家必有餘殃。子弒其父,臣弑其君,非一朝一夕之故,其所由來者漸矣,由辯之不早辯也。

坤道為順應趨勢之道,專案進行中順應趨勢是必須的;而乾道是行事之道,設計工作則是幫我們把工作做得更好,設計必須對實際需要來做因應取捨。所以如果專案面對現實而落實設計(積善之家),即使專案時程緊縮,設計的好處也將在關鍵時刻中展現其效益(必有餘慶);反之,若專案昧於實際需要而一再地縮減設計工作以減少工作負擔(積不善之家),即使專案時程是充裕的,最後也將發生軟體問題叢生而無法善終(必有餘殃)。不知不覺是相當可怕的,發生像「子弒其父,臣弑其君」這樣離譜的事情絕對是長期累積的問題,我們慢慢地失去設計能力,專案便註定了要失敗。設計者要有防微杜漸的能力,所以專案現實不但不會侵蝕我們的能力,而是讓我們能力與時俱進,因為軟體設計是不昧於專案現實的,所以專案前期面對現實的規劃(管理面)與分析設計(技術面)是必須的,即使如M君所言:

我二十多年的寫程式經驗來說,我服膺的是射擊、瞄準、射擊的理論,所以對各種事先的設計嗤之以鼻,不過除非本身的實力夠,而且願意不停的重寫程式,不然很難做到。我之前提到的那個東西,平均每兩年我會全部重寫,不過還是保留向下相容性,畢竟底層是不停的變動的,光是xml parser,在jdk內建的定版前,我們這些先行者就有許多不同的格式,想起以前的xml4j 1.x多好用。也因為最底層修改了,上面也要修改,通常我會重新寫、重新設計一回。射擊、瞄準、射擊是在有的東西上持續改進,別忘了沒有實做的設計有很大的機率會因為底層不支援而不能照想像的來搞,沒有真的去作不會想到jdk有那麼多限制,想起以前C的美好時光,甚麼都能作。

軟體專案的規劃比較適用於反覆與漸近式開發(IID, iterative and incremental development),它強調用適應性計劃(adaptive planning)來取代預測性計劃(predictive planning),把規劃設計與承諾完成的水準與資訊品質等量齊觀,是一種面對現實的規劃。因此M君如上所言,雖然不做事先的設計,但他所做的還是在做設計,一種面對現實的設計。

總之,設計是在專案有限資源的狀況下,找出解決專案問題的最佳方法,其目的是確保專案能夠成功,專案的軟體設計者應當去思考如何面對現實,做符合現狀的設計,所以設計並不昧於專案現實。「沒有時間設計」只會淪為一種抱怨,但抱怨對能力的成長是沒有助益的。而運用設計理念並不需要強大的工具或技術,因為設計思維是來至設計者的創意與智慧,並不在於使用的工具與技術。

Please follow and like us:
分類: 分析設計建模, 品質文化, 易經思維, 系統思考, 軟體開發。這篇內容的永久連結

在〈軟體設計並不昧於專案現實〉中有 4 則留言

  1. 自動引用通知: 同人的生活派對 » 專案管理與系統思考

  2. 自動引用通知: 同人的生活派對 » 好的設計源自於紀律

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *