關於專案管理的一點體會
阿新 • • 發佈:2019-01-10
這段時間,一直在負責一個專案的管理與開發。在時間短、任務緊,而團隊人員又大部分是沒有經驗的菜鳥的惡劣情況下,我帶領接近40人的團隊,終於在客戶規定的時間範圍內如期交付產品。這其中,經歷了需求變更、人員變動(因為其它任務,先後有近10人離開團隊)等諸多問題,專案仍然取得成功了,不能不說有幾分僥倖,但此外也有一些經驗與教訓可以與大家分享。
專案開發方面
需求
專案應以需求為核心。一個專案是否能夠成功,對需求的準確把握在成功因素中要佔上60%的比例。不管系統的架構設計、團隊管理有多麼的成功,如果需求出現偏差,仍然是南轅北轍。由於EAS專案的特殊性,專案開發過程中能夠與客戶建立有效快速的溝通渠道,是專案成功的關鍵。
需求必須獲得客戶的確認。通過需求調研與分析後獲得的使用者需求說明書,以及軟體需求規格說明書都必須得到客戶的簽字確認。確認的內容包括專案的目標、範圍以及專案需求功能點(用例)。EAS專案在前期對需求不夠重視,導致在需求理解上出現了一些偏差,從而影響了專案的進度。幸而得到了及時的糾正,在專案管理部的協助下,所有需求都得了客戶或客戶代表的簽字確認。從而使得專案在客戶驗收時,有了充分的保證。
專案應確立專門的需求分析師。公司沒有專門的需求分析師,不能不說是人員配備上的一大弊端。從EAS專案的開發過程中,我們就充分地認識到這一問題的嚴重性。需求的不斷更改,客戶遲遲未簽字確認,原因正是在於我們沒有專門的具有豐富經驗的需求分析師。普通開發人員在調研需求以及撰寫需求規格說明書時,總是會出現偏差或理解錯誤的地方。軟體需求分析是一項重要且負責的技術,沒有經過專門訓練的需求分析師,通常會給專案帶來隱患。
專案應指定各個模組的需求介面人。只有這樣,才能有效地保證專案組與客戶的及時溝通,快速響應客戶的請求與反饋。EAS專案在開發早期及時地確立了需求介面人,在一定程度上規避了需求變更給專案帶來的風險。但是,確立的需求介面人未經過系統培訓,在需求調研以及與客戶溝通的過程中,工作表現只能說是差強人意。
注意維護需求調研記錄以及需求跟蹤表。這一工作做得不夠好。由於需求調研人不夠專業,而專案經理以及需求分析負責人對這一過程還欠缺足夠的重視,同時沒有好的工具或流程來監控這一過程,使得需求調研記錄沒有發揮更大的作用。此外,需求跟蹤也非常重要,畢竟,任何專案的需求都不是固定不變的,需求隨時會發生變更,而開發人員實現的需求也可能會與客戶的要求偏差。
注意維護需求矩陣。專案經理對這一內容缺乏足夠的重視與理解,專案開發過程體系中也缺乏好的需求矩陣文件模板。但是在專案中後期,專案及時撰寫了EAS專案需求功能列表,並結合交付版本與客戶進行了溝通和協商,從而規避了需求偏差的風險。
控制需求變更。重視CCB的作用,同時應建立需求變更的響應機制。EAS專案組對於需求變更的響應還不夠及時,這一點專案經理與專案管理小組要擔負一定的責任。
設計
重視架構設計。EAS專案的成功,一定程度是源於我們有個優秀的框架開發小組,我們在專案立項之初就基本確定了整個系統的架構。其中雖然發生了一些變化,但核心架構仍然沒有發生大的變化。由於,我們建立了穩定、簡單的系統框架,可以極大地提高開發效率,規避了對框架的重複編碼。
善於對設計作出取捨。專案開發的三要素是成本、質量與進度。在保證質量的前提下,為了專案進度不出現大的偏差,EAS專案組並沒有過分強調技術,特別是在考慮進度的情況下,犧牲了系統的部分可擴充套件性。雖然這為系統的後期維護帶來一定隱患,但卻能夠有效地保證專案的進度。從EAS最初的架構設計來看,我們引入了Castle與AOP,試圖簡化ORM以及橫切關注點例如日誌、異常、許可權、事務等功能的實現。同時,希望採用WCF,利用SOA思想建立鬆散耦合的面向服務應用程式。但隨著客戶需求的變化,我們果斷地放棄了採用WCF的構想,同時又克服了技術困難,堅持了對Castle與AOP的使用,併為此成立了框架開發小組。事實證明,在技術的抉擇上我們作出了正確的決定。
重視UI原型設計。系統的原型設計與需求分析相輔相成。如果有好的原型版本交付給客戶,則客戶更能夠理解系統的實現,促進溝通的有效性與準確性。在EAS專案中,我們從一開始就確立了原型設計小組,並在分析需求階段,就開始了原型設計。這一做法無疑在客戶溝通、需求確認、UI設計等方面都發揮了很大的作用。但是,我們在這一點上,由於缺乏專門的UI設計人員,因此,這一工作還存在很大的缺陷,甚至於UI的設計為迭代版本的交付帶來了很大的障礙。在專案後期,關於UI的bug是最多。因此,我們認為在開發類似的WEB應用程式時,應儘早確立UI設計規範,以約束所有的UI設計。同時,必須培養專門的UI設計師,在開始原型設計時,就儘快完成UI互動的設計。並且,必須成立專門的UI設計小組,在需求階段與需求分析師合作,在編碼階段與開發人員合作。
測試
測試成員應瞭解需求。如果不瞭解需求,測試人員無法編寫正確的測試用例,同時在測試過程中,也可能因為錯誤地理解需求,從而導致報告錯誤的bug,影響開發人員效率。
加強開發人員與測試人員的合作。開發人員必須及時響應測試人員提交的bug。而測試人員也應跟蹤開發人員對bug的修復情況。
測試之初必須確定測試原則,對bug的嚴重程度進行分級。同時,必須確定修復bug的優先級別。
專案管理
進度管理
保證專案進度不出現大的偏差的前提是制定一個好的專案計劃。必須根據專案規模,成員情況,技術難度等多方面考慮整個專案計劃。如果專案的deadline已經確定,則必須採用一些方法來保障專案計劃的完成。首先是選擇符合專案的軟體開發生命週期。通常情況下,並不建議採用瀑布開發方式。最佳的辦法,應該是RUP或者敏捷開發,然後結合原型法制訂專案計劃。這樣可以規避因為需求變更產生的風險。
其次,要每日跟蹤專案的進展情況。可以通過晨會、週會以及專案日報、專案週報瞭解專案進展情況。同時,需要為各個小組指定進度跟蹤人,根據各個小組長的日報,判斷實際的進度是否與計劃出現偏差。
要制定專案進度偏差的應對方法。一旦專案進度出現了偏差,必須採取相應錯誤解決問題。或者通過加班、增加人手、申請專案進度等方法及時作出響應。
及時向專案成員彙報專案進度情況。只有讓各個專案成員瞭解到專案現狀,才能夠給每個成員增加壓力,不至於鬆懈。同時,也能夠使得每個成員能有一個目標,而不至於茫然失措。
制定專案計劃時,必須考慮階段評審與同行評審的時間。這一點在EAS專案中做得不夠好。其中原因也是由於專案進度本身較緊的緣故。
注意維護專案進度跟蹤表與專案進度偏差跟蹤表。讓專案管理部以及QA及時掌握專案進度,有利於對專案進度的管理。
變更管理
變更包括需求變更、人員變更。如果不控制好,兩者對專案的進展都會帶來災難性的後果。需求變更在前面已經敘述,而EAS專案中發現人員變更的情況也非常嚴重,因此這裡重點介紹關於人員變更的管理。
如果發生人員進入的情況,那麼對專案帶來的通常都會是好的影響。但我們也必須注意如何讓新成員更快地融入團隊。整體上講,如果需要新成員加入,發生變更的最佳時機是專案前期。如果在專案中後期加入新成員,無疑則意味著專案出現了災難性的後果。而新增加的成員,由於不熟悉專案,所能帶來好的影響也是有限的。如果不處理好新成員與老成員之間的合作關係,反而會帶來負面影響。
人員的退出很多時候是不可控的,同時對專案帶來的影響也是不可估計的。為了將這些影響降到最低,就必須在專案開始之初就要確立編碼規範。同時,還應該重視對文件的維護與更新。而在人員退出時,必須做好交接工作。同時,還應對這種變更進行合理的評估,並及時報告專案管理部,並與客戶及時溝通。如果對專案進度有嚴重影響,應爭取最大的努力取得客戶的理解,提出專案延期的申請。
風險管理
要在專案開始之初就考慮到專案過程中可能出現的所有風險,是不現實的。但是,我們必須考慮對風險的管理,尤其是在制訂專案計劃以及建立團隊的時候,考慮這一因素。風險有很多,包括需求的風險、進度的風險、質量的風險以及技術風險等。必須制定一套完整的風險管理計劃,而一旦發生了風險,則必須及時響應,組織相關人員解決風險。不能忽略任何一個小的風險,否則一個小的風險到最後會造成大的災難。風險的把握必須要有專案經理與系統架構師把關。
成員管理
不團結的專案組是無法保證專案的成功地。專案經理與專案組長在管理團隊成員時,必須時刻注意成員狀況,即使處理工作出現的矛盾與摩擦,隨時保證團隊合作精神得到最大程度的執行。
持續地保證專案成員的士氣非常重要。專案每取得一個階段性的進展,必須告知全體成員,如此才能收穫成功的信心。專案開發過程需要注意勞逸結合。一味地強制性加班,只能降低專案成員的工作效率。專案過程中,如能適當地開展一些活動,無疑能夠讓團隊成員感受到專案組的集體氣氛。在階段實現的重要時刻,專案經理必須注意通過文字、語言等激勵專案組成員。而專案經理的自信也是保證成員士氣的一個關鍵。
必須注意瞭解團隊成員的心理狀態與工作狀態。專案成員的戰鬥力除了是個人的能力發揮之外,一個好的領導也是至關重要的。因此,必須選擇合適的專案組長,通過他們掌握整個專案團隊成員的工作進展。同時,還要了解每個成員的能力,以安排合適的角色與崗位。
重視開發組與測試組以及專案管理小組的合作。專案組是一個整體,每個成員的角色不同,但大家都是團隊的重要一員。
專案開發方面
需求
專案應以需求為核心。一個專案是否能夠成功,對需求的準確把握在成功因素中要佔上60%的比例。不管系統的架構設計、團隊管理有多麼的成功,如果需求出現偏差,仍然是南轅北轍。由於EAS專案的特殊性,專案開發過程中能夠與客戶建立有效快速的溝通渠道,是專案成功的關鍵。
需求必須獲得客戶的確認。通過需求調研與分析後獲得的使用者需求說明書,以及軟體需求規格說明書都必須得到客戶的簽字確認。確認的內容包括專案的目標、範圍以及專案需求功能點(用例)。EAS專案在前期對需求不夠重視,導致在需求理解上出現了一些偏差,從而影響了專案的進度。幸而得到了及時的糾正,在專案管理部的協助下,所有需求都得了客戶或客戶代表的簽字確認。從而使得專案在客戶驗收時,有了充分的保證。
專案應確立專門的需求分析師。公司沒有專門的需求分析師,不能不說是人員配備上的一大弊端。從EAS專案的開發過程中,我們就充分地認識到這一問題的嚴重性。需求的不斷更改,客戶遲遲未簽字確認,原因正是在於我們沒有專門的具有豐富經驗的需求分析師。普通開發人員在調研需求以及撰寫需求規格說明書時,總是會出現偏差或理解錯誤的地方。軟體需求分析是一項重要且負責的技術,沒有經過專門訓練的需求分析師,通常會給專案帶來隱患。
專案應指定各個模組的需求介面人。只有這樣,才能有效地保證專案組與客戶的及時溝通,快速響應客戶的請求與反饋。EAS專案在開發早期及時地確立了需求介面人,在一定程度上規避了需求變更給專案帶來的風險。但是,確立的需求介面人未經過系統培訓,在需求調研以及與客戶溝通的過程中,工作表現只能說是差強人意。
注意維護需求調研記錄以及需求跟蹤表。這一工作做得不夠好。由於需求調研人不夠專業,而專案經理以及需求分析負責人對這一過程還欠缺足夠的重視,同時沒有好的工具或流程來監控這一過程,使得需求調研記錄沒有發揮更大的作用。此外,需求跟蹤也非常重要,畢竟,任何專案的需求都不是固定不變的,需求隨時會發生變更,而開發人員實現的需求也可能會與客戶的要求偏差。
注意維護需求矩陣。專案經理對這一內容缺乏足夠的重視與理解,專案開發過程體系中也缺乏好的需求矩陣文件模板。但是在專案中後期,專案及時撰寫了EAS專案需求功能列表,並結合交付版本與客戶進行了溝通和協商,從而規避了需求偏差的風險。
控制需求變更。重視CCB的作用,同時應建立需求變更的響應機制。EAS專案組對於需求變更的響應還不夠及時,這一點專案經理與專案管理小組要擔負一定的責任。
設計
重視架構設計。EAS專案的成功,一定程度是源於我們有個優秀的框架開發小組,我們在專案立項之初就基本確定了整個系統的架構。其中雖然發生了一些變化,但核心架構仍然沒有發生大的變化。由於,我們建立了穩定、簡單的系統框架,可以極大地提高開發效率,規避了對框架的重複編碼。
善於對設計作出取捨。專案開發的三要素是成本、質量與進度。在保證質量的前提下,為了專案進度不出現大的偏差,EAS專案組並沒有過分強調技術,特別是在考慮進度的情況下,犧牲了系統的部分可擴充套件性。雖然這為系統的後期維護帶來一定隱患,但卻能夠有效地保證專案的進度。從EAS最初的架構設計來看,我們引入了Castle與AOP,試圖簡化ORM以及橫切關注點例如日誌、異常、許可權、事務等功能的實現。同時,希望採用WCF,利用SOA思想建立鬆散耦合的面向服務應用程式。但隨著客戶需求的變化,我們果斷地放棄了採用WCF的構想,同時又克服了技術困難,堅持了對Castle與AOP的使用,併為此成立了框架開發小組。事實證明,在技術的抉擇上我們作出了正確的決定。
重視UI原型設計。系統的原型設計與需求分析相輔相成。如果有好的原型版本交付給客戶,則客戶更能夠理解系統的實現,促進溝通的有效性與準確性。在EAS專案中,我們從一開始就確立了原型設計小組,並在分析需求階段,就開始了原型設計。這一做法無疑在客戶溝通、需求確認、UI設計等方面都發揮了很大的作用。但是,我們在這一點上,由於缺乏專門的UI設計人員,因此,這一工作還存在很大的缺陷,甚至於UI的設計為迭代版本的交付帶來了很大的障礙。在專案後期,關於UI的bug是最多。因此,我們認為在開發類似的WEB應用程式時,應儘早確立UI設計規範,以約束所有的UI設計。同時,必須培養專門的UI設計師,在開始原型設計時,就儘快完成UI互動的設計。並且,必須成立專門的UI設計小組,在需求階段與需求分析師合作,在編碼階段與開發人員合作。
測試
測試成員應瞭解需求。如果不瞭解需求,測試人員無法編寫正確的測試用例,同時在測試過程中,也可能因為錯誤地理解需求,從而導致報告錯誤的bug,影響開發人員效率。
加強開發人員與測試人員的合作。開發人員必須及時響應測試人員提交的bug。而測試人員也應跟蹤開發人員對bug的修復情況。
測試之初必須確定測試原則,對bug的嚴重程度進行分級。同時,必須確定修復bug的優先級別。
專案管理
進度管理
保證專案進度不出現大的偏差的前提是制定一個好的專案計劃。必須根據專案規模,成員情況,技術難度等多方面考慮整個專案計劃。如果專案的deadline已經確定,則必須採用一些方法來保障專案計劃的完成。首先是選擇符合專案的軟體開發生命週期。通常情況下,並不建議採用瀑布開發方式。最佳的辦法,應該是RUP或者敏捷開發,然後結合原型法制訂專案計劃。這樣可以規避因為需求變更產生的風險。
其次,要每日跟蹤專案的進展情況。可以通過晨會、週會以及專案日報、專案週報瞭解專案進展情況。同時,需要為各個小組指定進度跟蹤人,根據各個小組長的日報,判斷實際的進度是否與計劃出現偏差。
要制定專案進度偏差的應對方法。一旦專案進度出現了偏差,必須採取相應錯誤解決問題。或者通過加班、增加人手、申請專案進度等方法及時作出響應。
及時向專案成員彙報專案進度情況。只有讓各個專案成員瞭解到專案現狀,才能夠給每個成員增加壓力,不至於鬆懈。同時,也能夠使得每個成員能有一個目標,而不至於茫然失措。
制定專案計劃時,必須考慮階段評審與同行評審的時間。這一點在EAS專案中做得不夠好。其中原因也是由於專案進度本身較緊的緣故。
注意維護專案進度跟蹤表與專案進度偏差跟蹤表。讓專案管理部以及QA及時掌握專案進度,有利於對專案進度的管理。
變更管理
變更包括需求變更、人員變更。如果不控制好,兩者對專案的進展都會帶來災難性的後果。需求變更在前面已經敘述,而EAS專案中發現人員變更的情況也非常嚴重,因此這裡重點介紹關於人員變更的管理。
如果發生人員進入的情況,那麼對專案帶來的通常都會是好的影響。但我們也必須注意如何讓新成員更快地融入團隊。整體上講,如果需要新成員加入,發生變更的最佳時機是專案前期。如果在專案中後期加入新成員,無疑則意味著專案出現了災難性的後果。而新增加的成員,由於不熟悉專案,所能帶來好的影響也是有限的。如果不處理好新成員與老成員之間的合作關係,反而會帶來負面影響。
人員的退出很多時候是不可控的,同時對專案帶來的影響也是不可估計的。為了將這些影響降到最低,就必須在專案開始之初就要確立編碼規範。同時,還應該重視對文件的維護與更新。而在人員退出時,必須做好交接工作。同時,還應對這種變更進行合理的評估,並及時報告專案管理部,並與客戶及時溝通。如果對專案進度有嚴重影響,應爭取最大的努力取得客戶的理解,提出專案延期的申請。
風險管理
要在專案開始之初就考慮到專案過程中可能出現的所有風險,是不現實的。但是,我們必須考慮對風險的管理,尤其是在制訂專案計劃以及建立團隊的時候,考慮這一因素。風險有很多,包括需求的風險、進度的風險、質量的風險以及技術風險等。必須制定一套完整的風險管理計劃,而一旦發生了風險,則必須及時響應,組織相關人員解決風險。不能忽略任何一個小的風險,否則一個小的風險到最後會造成大的災難。風險的把握必須要有專案經理與系統架構師把關。
成員管理
不團結的專案組是無法保證專案的成功地。專案經理與專案組長在管理團隊成員時,必須時刻注意成員狀況,即使處理工作出現的矛盾與摩擦,隨時保證團隊合作精神得到最大程度的執行。
持續地保證專案成員的士氣非常重要。專案每取得一個階段性的進展,必須告知全體成員,如此才能收穫成功的信心。專案開發過程需要注意勞逸結合。一味地強制性加班,只能降低專案成員的工作效率。專案過程中,如能適當地開展一些活動,無疑能夠讓團隊成員感受到專案組的集體氣氛。在階段實現的重要時刻,專案經理必須注意通過文字、語言等激勵專案組成員。而專案經理的自信也是保證成員士氣的一個關鍵。
必須注意瞭解團隊成員的心理狀態與工作狀態。專案成員的戰鬥力除了是個人的能力發揮之外,一個好的領導也是至關重要的。因此,必須選擇合適的專案組長,通過他們掌握整個專案團隊成員的工作進展。同時,還要了解每個成員的能力,以安排合適的角色與崗位。
重視開發組與測試組以及專案管理小組的合作。專案組是一個整體,每個成員的角色不同,但大家都是團隊的重要一員。