構建之法階段小記六
本周學習了構建之法的第8、9章,總算是接觸到了久聞未見的軟件工程中的重中之重——項目需求分析,以及對需求和團隊進行管理的重要角色——PM
我們都知道軟件是由人手一行行代碼寫出來的,軟件的存在也是為了滿足人工作生活中的各種需要。如果軟件開發沒有目標,那寫出來的代碼不過就是26個字母及其大小寫加上空格和一些特殊符號的隨機組合罷了,沒有實用意義。所以,代碼的誕生一定是為了實現某個或某些具體的目標,也即這些代碼最終成型後要實現怎樣的功能。為了確立這樣一個目標,我們就需要對最終使用到這些代碼的人做需求分析,通過分析這些人的需要來訂立滿足這些需要的目標,進而推進項目的構成。
書中通過幾個實例介紹了軟件需求到最終確立目標間的一系列過程,從獲取和引導需求開始,獲取後對需求進行分析和定義,再到驗證需求並在軟件產品的生命周期中不斷管理需求、更新需求。需求按照不同角度又可分為:對產品功能性的需求、對產品開發過程的需求、非功能性需求及綜合需求。需求來自軟件產品的利益相關者,如用戶、客戶、市場分析師、監管機構甚至軟件團隊本身。獲取用戶需求也有很多種方法,書中著重介紹了用戶調研並列舉了一些常見的調研方法:焦點小組,深入面談,卡片分類,用戶調查問卷,用戶日誌研究,人類學調查,眼動跟蹤研究,快速原型調研以及A/B測試。互聯網給我們帶來了用戶和數據,我們能夠方便的分析其中的規律以確立用戶需求,但過分強調數據的作用也可能產生負作用,因此要註意合理應用。同時,書中還介紹了競爭性需求分析NABCD框架,從N(Need需求)到A(Approach做法),再說明這樣做會產生的B(Benefit好處),以及與同類產品的競爭性C(Competitors),再到實際的推向用戶群體D(Delivery推廣)。
確認需求後進行開發時,也要註意各個功能的優先順序及其定位,最簡單的可分為必要需求和輔助需求,顧名思義很好理解。以及常在各種科技博文中能見到的名詞——殺手功能,與之相對的則是外圍功能。產品的核心競爭力往往來自殺手功能和必要需求,而輔助需求和外圍功能的優劣則很大程度上能影響用戶體驗並決定用戶粘性。
項目開發中另外一項非常重要的成分就是計劃和估計。我們的產品什麽時候能達到預期進度?什麽時候能夠交付使用?為此我們可以確立一個目標,並對進度進行大概的估計,並且抱有必要的決心。
而在具體的開發中,對一項任務進行分割並分配的水平如何往往能在很大程度上決定項目開發的效率和質量,此即“分而治之”思想。早期的項目開發大多針對的功能比較小,團隊成員數量也較少,成員間交流也比較簡單,因而沒有專門的人員負責任務分配及對內/外交流這一方面。隨著產業的發展,開發和交流的矛盾日益凸顯,因而產生了PM——“項目經理”這一專司任務分配和團隊管理、交流的職位。PM最重要的任務就是正確地做產品、做流程,保證一個項目順利地、按計劃結項,並在一定層面上確保產品的長期發展和市場推廣。普通的程序員的任務成果一般是具體的代碼,而PM的任務成果則更多的是規格說明書(Spec),同時PM需要處理與客戶交談、組織用戶調研發現用戶需求、了解和比較競爭產品、分析如何讓軟件變得可用、有用以及如何高進團隊流程等任務。按照不同的任務職責,PM也可以分為幾類,書中第9章以微軟公司內部的組成為例向我們介紹了諸如做功能設計的PM、對商業和客戶有很強了解能力的PM、具有廣泛的經驗和知識面及商業拓展能力的PM、驅動流程的PM、專門深入某一領域的PM以及和研究人員合作、將前沿技術引入主流產品做技術轉化的PM。
在很多時候,PM作為項目的領導對項目進展起著控制方向的作用。在軟件開發過程中還要面臨很多不確定的風險,對風險進行分析、規避和管理也是PM的職責之一。書中在介紹了PM諸多的工作任務的同時也介紹了幾點PM應該具備的能力要求,如:觀察、理解和快速學習的能力、分析和管理的能力、一定的專業素質、自省和改進的能力。總的來講,PM在一個項目中的具體任務一般可以歸為以下幾點:帶領團隊形成團隊目標,管理軟件的具體功能的生命周期,創建並維護軟件的規格說明書,代表客戶和用戶的利益、主動收集用戶反饋、預期用戶新的需求、協調並決定各種需求,分析並帶領其他成員對缺陷/變更需求形成一致意見並確保實施,帶領其他成員確保項目保持功能/時間/資源的合理平衡並跟蹤項目進展、確保團隊能夠發布零客戶滿意的軟件,收集各類數據、客觀分析項目實施過程中的優缺點並推動項目成員持續改進、提振士氣。同時,PM也要具有發現身邊成員閃光點、說服他人的能力。
構建之法階段小記六