CTO眼中的軟體項目管理
4 人贊了文章
軟體是世界上最為重要和活躍的科技。在有限的時間內,利用有限的資源,交付符合要求的軟體是我們面臨的一個難題。
軟體項目成功交付的理論基礎主要涉及兩門學科分別是軟體工程和項目管理。本篇文章主要探討作為技術執行官應該重點關注哪些工作領域,對於非重點工作領域就不展開論述。
一、軟體、軟體工程和項目管理
首先,我們來確定「軟體,軟體工程和項目管理」的概念,以及三者之間的關係。特別是軟體工程和項目管理之間的關係,幾乎所有軟體工程的書籍都會寫到項目管理,但是並沒有把兩者關係論述清楚,這也讓很多人比較迷惑。
軟體是什麼?軟體包括可運行的程序,運行過程中產生的數據和各種描述信息。在整個軟體生命周期中,不同的階段這三部分的重要程度是不一樣的。交付階段可運行的程序是最重要的,因為程序可以直接體現項目進展情況。正式運營階段數據是最重要的,軟體交付之後的工作不在我們討論範圍。
軟體工程是什麼?IEEE給軟體工程下的定義。「將系統化的、規範的、可量化的方法應用於軟體的開發、運行和維護」。軟體工程主要包括過程、方法和輔助工具三大部分。
項目管理是什麼?項目管理是利用經過驗證的並且適用於軟體工程的管理方法去協調、指導和監督軟體交付活動。
軟體工程明確過程,方法和輔助工具,項目管理主要是指導和監督這些過程和方法得到正確實施。
二、軟體項目管理> 軟體工程
這個觀點是站在技術執行官的視角來看軟體項目,項目管理的重要程度大於軟體工程。軟體項目失敗的原因,絕大部分都不是技術問題,而是與管理問題相關。這可能會冒犯某些從事軟體工程研究的權威,他們覺得軟體工程技術可以解決軟體項目中的所有問題,軟體項目之所以失敗是因為項目團隊技術水平不夠。
為什麼技術不是軟體項目的問題呢?在正式的項目中,我們一定會優先選擇成熟的技術,而不會選擇冷門或者前沿技術。成熟的技術是經過驗證的可靠性相對較高,各種資料和中間件也很多;掌握成熟的技術工程師較多,不存在工程師難找的情況;運用成熟的技術,即使出現了項目組無法解決的技術難題,尋找技術大拿支持也較為容易。所以技術不會成為項目成敗的關鍵。
三、項目管理重點內容
關於軟體項目管理工作,作為技術執行官日常工作主要有四大部分。一部分推進各種規範的制定和實施,另一部分是管理公司所有的項目。這裡主要討論具體的項目管理工作。日常的管理工作主要有四大內容,人,過程,產品和監控。
項目管理-人員
軟體項目是智力密集型勞動,所以人員是軟體項目管理第一大要素。技術執行官需要關注的利益干係人有四部分公司管理層、分包商和供應商、項目經理還有客戶和用戶。
1、公司管理層
公司的管理層,不是項目管理的組部分,但是這一層級是最重要的。技術負責人要清楚公司管理層對項目成功的定義是什麼,有時候公司管理層對成功的定義和你不一樣,你首先必須要和公司管理層保持方向一致。
1)公司管理層可以協調更多的資源。例如我曾經遇見一個項目需要趕工,大概有兩個月的時間經常會加班到凌晨3點左右,我就向公司層領導申請在公司附近的酒店長租兩間房,如果加班太晚項目組成員可以去酒店休息。
2)項目在出現風險時,公司管理層對你的處理方法保持信任。我曾處理過公司重點項目大批程序員離職事件(以後有機會單獨來寫這段經歷,這個也是我的職業生涯的一個機會,幸運的是我把握住了這次機會)。當時我處理這個危機向公司領導提的第一授權,我要有直接開除員工的權利。有了大棒和胡蘿蔔我才能快速平息這場離職風波帶來的影響。
3)當項目出現挫折時你需要得到管理層的理解。所有項目不可能都一帆風順,作為公司技術第一責任人,任何牽扯到技術問題你都是負有責任的。所以我常說作為領導要有兩個基礎能力一個是成事一個是平事。成事,就是做成一件事。平事,就是要平息一個爛攤子。人非聖賢孰能無過,當項目出現問題時你需要公司管理層的理解。你要阻止外部環境惡化,為項目團隊遮風擋雨。
2、分包商和供應商
通常軟體工程和項目管理理論對這部分都輕描淡寫,但實際工作中涉及分包商和供應商的重要性是僅次於公司管理層。因為分包和供應都直接涉及到利益分配,所以大家都會重點關注這部分工作。技術負責人在處理這部分工作時一定要謹慎,在選擇分包和選擇供應商時,要堅持自己的價值觀同時不迂腐。對參與項目所有分包商和供應商的工作一視同仁,不要因為某些關係而放鬆對合作夥伴的要求。因為項目成功交付是保證所有項目干係人利益的基礎,如果項目失敗了通常會造成很大的麻煩,這是所有人都不願意見到的結果。
3、項目經理
「兵熊熊一個,將熊熊一窩」,因此項目經理合適與否至關重要。作為企業負責技術人不可能深入到每一個項目日常工作中,項目的具體工作是由項目經理完成。技術負責人的主要工作應該是創造良好的外部環境,監控項目過程,處理項目各種風險。指派一名合適的項目經理,是項目成功的開始。什麼樣的項目經理是合適的呢?這個主要從三個方面來評估,項目內容,項目的組織結構,項目的外部環境,在這裡不展開論述。
4、客戶和用戶
客戶是項目的委託人,通俗說就是決定項目出錢的人。用戶是項目使用者,用戶和客戶也可能是同一人。
客戶和用戶的重要性大家都知道,這裡我就不再敘述。我需求強調的是,一旦客戶和用戶之間需求出現矛盾時,你要優先滿足客戶的需求;二你需要建立和客戶方高層領導直接溝通的渠道(起碼是比該項目的客戶方負責人更高一層級)。那有人可能會有疑問,現在的互聯網公司都強調用戶啊。互聯網公司強調用戶的目的,也是為了從海量用戶中獲取客戶,所以本質還是為了客戶。
項目管理-產品
在產品這項工作中,需要關注一點,成本和工作量。可能有人會說還有項目範圍,確實項目範圍很重要,但是明確項目範圍不是目的,明確項目範圍是為了評估成本和工作量。
這裡我們不討論通過項目預算金額然後進行倒推分攤的情況,因為任何情況公司都需要知道真實的相對準確的項目預算以及工作量。軟體成本和工作量的估算從來就很難做到精確;因為變化因素太多,人員、技術、環境和行政,這些都會影響軟體的成本和工作量。現實工作中我們主要使用以下兩種估算方法。根據類似的項目進行估算;對項目進行分解,利用分解技術生成項目的成本和工作量。
項目管理-過程。
項目團隊首先要選擇一個適合當前項目的過程模型。在軟體工程領域,有很多不同的過程模型,比如瀑布、增量、演化和敏捷等等。但是不同的軟體項目適合過程模型。選擇的模型的依據主要是三點,軟體本身的特點,技術人員,軟體項目團隊的工作環境。例如,有些項目很簡單,開發一個宣傳網站,而且這個宣傳網站是有模板的,這種項目瀑布模型就可以了。有些項目很複雜,客戶的需求也很模糊,這時可能需要綜合用到多種過程模型。
任何過程模型都可以分解為五種基本活動,溝通,計劃,設計,開發和部署。通常技術負責人有選擇的參加溝通和計劃活動,設計、開發和部署不需要參與,只需要知道結果即可。
項目管理-監控
這部分主要看公司項目規模而確定,如果項目較少技術負責人可以直接對各個項目經理。如果項目較多,建議設置一個專門的組織或者責任人,負責收集項目數據,督促各個項目團隊按照公司項目管理規範開展工作。
推薦閱讀:
※專訪|高思教育創始人須佶成(下)【UncleW】
※【技術分享】幾維安全CTO:IoT時代LLVM編譯器防護藝術
※360商業化CTO胡寧:項目成功的秘訣, 技術產品雙頭負責制
※基鏈CTO受邀出席「亞洲人物高峰論壇 」
※台積電新任CTO曝光 | 半導體行業觀察