2004-11-16 17:17:16讀.冊.人
經理人觀點 :專案管理的成功方程式
專案管理的成功方程式
從事軟體開發的人都希望自己的專案成功,它是所有開發成員的期望,也是專案經理或專案負責人的最大責任。雖然世上並沒有保證成功的規則可遵循,不過以下的方程式可以指引你邁向成功之路。
Effort = (Team) (Tools) (Complexity) Process
這是軟體業界廣泛使用的一種結構成本模型(COCOMO)表示法,由美國南加大軟體工程中心綜合大量的產業研究所發展出來的。這個方程式用Team(開發團隊)、Tools(工具)、Complexity(複雜度)、Process(程序)等四個參數的組合關係,代表一個專案所需投入的成本及可以產生的成果。因此可將Effort視為成本,也可以視為成功機會。
如果從成本角度來看,我們的目標就是盡可能降低四個參數對成本的影響;如果從成功機會來看,則是盡可能增加四個參數對成功的貢獻度。接下來我們將同時以兩個角度來討論這四個重要參數,也就是如何降低他們的負面影響,並增加正面貢獻。
複雜度
「複雜度」是指軟體架構與規模。一般而言,軟體規模越大,複雜度就越高,所以這個參數也可以用「規模大小」(Size)來代替。通常軟體開發專案越龐大、越複雜時,它的相對成功率就越低,所以這裡的主要目標就是盡量降低軟體的規模,也就是降低它的開發複雜度。
有三種方法可以達到這個目標:
1. 調整軟體規模:
把一個軟體依它所需要的功能特色(Feature)切割成幾個獨立小系統,然後讓每一個小系統都有自己的成本(cost)與價值(value)這兩個數字,代表完成這個小系統的所需成本與所得回饋。我們的目標就是選定一種系統組合方式,讓它的總價值與總成本的比值最大化。
2. 降低人為程式碼數量:
2. 降低人為程式碼數量:
許多程式語言都可以達成同樣一件事,差別只在於其程式碼的大小。例如,同樣一個應用程式,用組合語言可能需要100萬行的程式碼,C++需要40萬行,而Java搭配現有元件則可能只要5000行就搞定。人為程式碼越多,開發過程就越麻煩,出錯機會也越高,成功率自然就降低。所以應該選擇人為程式碼較少的方式(例如採用比較高階的語言),這樣才能增加專案的成功機率。
3. 採用視覺化模組:
3. 採用視覺化模組:
目前的軟體架構與運作環境都日趨龐雜,不是二十年前那種單機版單功能軟體可以比擬,開發成員根本已經無法單純用「想像」或「便條紙」進行溝通與管理。所以此時應該利用標準模組化語言(例如UML)等專業工具來建立整個開發計畫,以協助進行鉅細靡遺的掌控與管理,這樣才能有效降低管理上的複雜與困難度。
程序
程序是指完成一個軟體專案的整個作業流程,包括生產性活動與非生產性活動。從公式中可以看出,程序與軟體複雜度有著密切關連,而且會對它造成指數性影響。在這個部分,同樣有三種方法能達到目標:
1. 採用往復式流程法(Iteration):
程序
程序是指完成一個軟體專案的整個作業流程,包括生產性活動與非生產性活動。從公式中可以看出,程序與軟體複雜度有著密切關連,而且會對它造成指數性影響。在這個部分,同樣有三種方法能達到目標:
1. 採用往復式流程法(Iteration):
軟體開發有兩種流程法,一種是傳統的瀑布式流程法,另一種是新的往復式流程法。關於他們之間的優缺點與差異比較,在先前文章已經介紹多次,因此不再贅述。只要記住一點,往復式流程法是專門解決成功率偏低的改良性工法,而且軟體規模越大時,它的效果就越明顯。
2. 早期發現早期治療:
2. 早期發現早期治療:
我們都知道,突發性風險(Risk)是導致專案失敗的重要因素,而且當它越晚發作時,所需投入的治療成本就越高,「治癒率」也越低。所以在軟體開發過程裡,不應是祈求危機不要爆發,而是該想辦法讓高風險的危機在早期就被發掘出來,立刻予以治療,如此才能增加專案的成功率。
3. 參考最佳典範(Best practice):
3. 參考最佳典範(Best practice):
軟體工業已經發展超過三十年,過程中有成功也有許多失敗,業界已經擷取這些大量經驗,淬煉出一套最佳化的軟體開發程序典範。與其自己埋頭苦幹,重蹈覆轍,不如直接參考他人的成功典範來得實際與聰明,而且能增加自己的成功機會。
開發團隊
開發團隊也可以用「人」(People)這個名詞來代替。毫無疑問,開發團隊的成員素質與他們之間的協同合作,是專案成功的決定性因素。這個部分也有三種作法:
1. 強化個人效能:訓練是強化個人效能的不二法門。除了充實專業知識外,另一個重點就是強化個人對於開發流程的熟稔度。另外,開發團隊成員可能需要兩種特質,一是知識平衡,二是跨領域涵蓋。有些成員的任務是進行全面性的溝通與管理,他就需要在各方面都具備相同水準的基本知識,這就是知識平衡;有些人則會進行跨小組的協同整合作業,那麼他最好具備跨領域的技能。
2. 增進團隊合作:一個最典型的組織團隊應該包括管理、架構、發展、評估等四個小組,在不同階段的重要性各有不同,不過在整個開發流程中都應該全程參與,不得中途介入或退出。此外,「團隊」遠比「個人技巧與努力的總和」還來的重要,所以專案經理與其和個別團員斤斤計較,不如想辦法讓整體團隊維持在平衡與最佳狀態。
3. 累積組織能量:許多開發團隊可能都遇過這種情形:「每一次專案都有一種作法,有時莫名其妙成功、有時則無緣無故失敗,連自己都搞不清楚。」其實這是不對的。一個優秀的團隊組織,其執行專案的整套作法應該可以被清楚掌握、管理與複製,而且成功率應該是穩定且逐步提升。
工具
目前的軟體開發工作幾乎不可能脫離工具,而且每個步驟都有適當的工具可以使用。這些工具的組合就構成了一種開發環境(Environment)。而我們使用工具的終極目標,就是建構一個最大可能的自動化環境,讓它盡可能地幫你完成最多工作。此處有三個面向需要注意:
1. 提升人類產能:一套好的工具應該能達到這個目標。例如,利用UML模組語言的視覺化工具,就可以幫你處理從需求管理一直到程式碼產出的所有工作流程與管理細節,讓開發人員避開繁瑣工作,輕鬆得到成果,然後把時間用在更有價值的創造性工作,這就是提升產能。
2. 排除錯誤來源:在軟體開發過程中,每個階段都會不斷製造各種類型與各種版本的產出物,這是完成最終產品的必經過程。但在產出物的製造與管理過程中,卻可能出現各種錯誤,成為導致專案失敗的潛在危機。這些錯誤其實很容易被忽視,也不是人類大腦可以完全掌握與釐清,這當然就是工具應該發揮功用的地方。
3. 最佳化程序流程:流程管理牽涉到最多的人為因素,也有許多繁瑣細節,所以它常常也是專案管理者的最大挑戰。這同樣也是應該利用工具的地方,以建立一個最佳化的程序流程。何謂「最佳化」?其實就是「自動化」。唯有整個開發流程與管理工作達到全面自動化,才能排除所有人為因素,避開所有繁瑣細節,解放因人為影響而產生的錯誤。
科學化的專案管理其實並非遙不可及,只要注意到方程式中所提到的各個面向,並記取影響各個參數的因素,「每次專案開發都獲致成功」的目標是可以達成的。
開發團隊
開發團隊也可以用「人」(People)這個名詞來代替。毫無疑問,開發團隊的成員素質與他們之間的協同合作,是專案成功的決定性因素。這個部分也有三種作法:
1. 強化個人效能:訓練是強化個人效能的不二法門。除了充實專業知識外,另一個重點就是強化個人對於開發流程的熟稔度。另外,開發團隊成員可能需要兩種特質,一是知識平衡,二是跨領域涵蓋。有些成員的任務是進行全面性的溝通與管理,他就需要在各方面都具備相同水準的基本知識,這就是知識平衡;有些人則會進行跨小組的協同整合作業,那麼他最好具備跨領域的技能。
2. 增進團隊合作:一個最典型的組織團隊應該包括管理、架構、發展、評估等四個小組,在不同階段的重要性各有不同,不過在整個開發流程中都應該全程參與,不得中途介入或退出。此外,「團隊」遠比「個人技巧與努力的總和」還來的重要,所以專案經理與其和個別團員斤斤計較,不如想辦法讓整體團隊維持在平衡與最佳狀態。
3. 累積組織能量:許多開發團隊可能都遇過這種情形:「每一次專案都有一種作法,有時莫名其妙成功、有時則無緣無故失敗,連自己都搞不清楚。」其實這是不對的。一個優秀的團隊組織,其執行專案的整套作法應該可以被清楚掌握、管理與複製,而且成功率應該是穩定且逐步提升。
工具
目前的軟體開發工作幾乎不可能脫離工具,而且每個步驟都有適當的工具可以使用。這些工具的組合就構成了一種開發環境(Environment)。而我們使用工具的終極目標,就是建構一個最大可能的自動化環境,讓它盡可能地幫你完成最多工作。此處有三個面向需要注意:
1. 提升人類產能:一套好的工具應該能達到這個目標。例如,利用UML模組語言的視覺化工具,就可以幫你處理從需求管理一直到程式碼產出的所有工作流程與管理細節,讓開發人員避開繁瑣工作,輕鬆得到成果,然後把時間用在更有價值的創造性工作,這就是提升產能。
2. 排除錯誤來源:在軟體開發過程中,每個階段都會不斷製造各種類型與各種版本的產出物,這是完成最終產品的必經過程。但在產出物的製造與管理過程中,卻可能出現各種錯誤,成為導致專案失敗的潛在危機。這些錯誤其實很容易被忽視,也不是人類大腦可以完全掌握與釐清,這當然就是工具應該發揮功用的地方。
3. 最佳化程序流程:流程管理牽涉到最多的人為因素,也有許多繁瑣細節,所以它常常也是專案管理者的最大挑戰。這同樣也是應該利用工具的地方,以建立一個最佳化的程序流程。何謂「最佳化」?其實就是「自動化」。唯有整個開發流程與管理工作達到全面自動化,才能排除所有人為因素,避開所有繁瑣細節,解放因人為影響而產生的錯誤。
科學化的專案管理其實並非遙不可及,只要注意到方程式中所提到的各個面向,並記取影響各個參數的因素,「每次專案開發都獲致成功」的目標是可以達成的。