本周通過對開發管理的學習和思考,反思了在以往的開發流程中存在的問題和不足,我把整個開發流程分解成了四個部分,分別是需求處理、目標拆解、時間預估、進度把控,并依次分析了各個部分中存在的問題。
1 需求處理
在軟件開發的過程中我們會遇到各種各樣的需求,這些需求有來源于產品經理的、客服人員的、運營人員的,甚至是直接來源于用戶的,同時這些需求的信息載體和表達方式同樣也各種各樣,而這些原始的需求表達并不能直接用于技術開發,因此必須對這些需求進行統一的處理,使其轉化成可執行的任務,在此過程中有兩方面需要特別注意:1 需求識別 2優先級排列。
1.1 需求識別
需求識別包含識別需求的真正主體和識別需求的應用場景,需求的傳播路徑有可能是十分復雜的,作為技術人員如果只站在自身的角度上思考需求,沒有向上溯源發現需求的真正主體,必然導致大量的無用功,其次,拋開應用場景單純的討論需求本身也是沒有價值的,必須結合需求主體和應用場景思考需求的本質和邏輯。
1.2 優先級排列
凡事必有輕重緩急,需求亦是如此,因此需要從重要程度和緊急程度兩個維度上對需求進行劃分,同時,針對某一個具體需求的軟件開發過程越緊密越流暢效率越好,如果在多個需求之間頻繁切換,總體的效率必然是下降的,因此也需要在需求優先級和開發效率之間找到平衡點,找到最為適合的開發節奏。
2 目標拆解
凡事預則立不預則廢,沒有拆解的目標大多數都沒法完成,就如同行軍打仗一樣,如果連行軍地圖都沒有結果必然失敗,在進行目標拆解的時候我認為至少有兩個緯度:1 空間緯度2 時間緯度。
2.1空間緯度
從空間緯度上的拆分我認為包含兩個方面,其一是對開發的問題域的拆分,例如,某一個需求可以被拆分成幾條流程線,而每一條流程線又能被拆分成幾個功能點,最終能夠把需求本身拆分成一個樹狀圖,其二是人和任務之間的匹配,需要對每一個人的優缺點進行分析,尋找每個人工作效率最高的擅長領域,并以此為基準對開發任務進行拆分,讓正確的人做正確的事,提升總體的開發效率。
2.2時間緯度
從時間維度上對任務進行拆分最重要的是需要識別任務和任務之間的相互關系,是串行的?還是并行的?開發流程的并行性越高效率越高,反之越低,同時,在時間維度上對任務進行合理的拆分也會有效的降低每個人在開發周期內負載的劇烈波動,也就是說可以避免有時累死有時閑死這樣的情況發生。
3 時間預估
“結果”這個詞的本意是:在一定的時間和空間范圍內,事物發展的最終狀態。因此對時間的把控本身就是結果導向主義的重要組成部分,軟件開發管理最容易出現問題,最容易失控的也是時間預估,軟件開發的特殊性導致其在時間預估上也越加復雜多變,目前我認為應該將所有的開發任務分成兩大類:1 陌生任務 2 常規任務,對待不同的開發任務有不同的時間預估方案。
3.1陌生任務
陌生任務是指以前沒有實現過,解決方案不成熟,實現路徑模糊的任務,這類任務往往由于“坑”比較多導致時間預估失敗,因此對于陌生任務需要從三方面入手:1 在允許的范圍之內為試錯預留充足的時間 2 找出任務實現中的難點和盲區并提前進行技術儲備和方案制定 3 梳理流程,加強復盤,總結文檔,讓復雜的東西簡單化,讓陌生任務成為常規任務。
3.2常規任務
常規任務是指那些實現過多次,解決方案成熟,實現路徑清晰的任務,這類任務時間預估往往比較準確,因此,對于常規任務來說最重要的是不斷地細化標準,優化流程,實現簡單的東西流程化,直至達到流程的東西自動化。
4 進度管控
進度管控我認為可以分為兩個方面,一個是進度追蹤,一個是進度調整,進度追蹤的目的在于時刻了解當前的開發進度,其中可以細化成某個功能點的開發進度,某個人的開發進度,某一天的開發進度,并且以此自底向上匯集出整個開發流程的開發進度,進度調整則是基于當前的開發進度并綜合當前的時間、人力、物力等種種資源對下一步的規劃方案進行調整,這就像一個在荒野徒步的人,他不僅隨時隨刻要知道自己身處在荒野的哪個位置,還必須綜合自己所有的可用資源制定下一步的方向和規劃,如若像一只無頭蒼蠅一樣亂跑亂撞必然會死在荒野中。