Posted on 2009-06-18 09:40
mingj 閱讀(4144)
評論(0) 編輯 收藏 所屬分類:
agile 敏捷 、
PM 項目管理
(本文發表于《程序員》2009年第6期,轉載請注明。)
在軟件行業,大部分經理們都希望自己率領的團隊能像軍隊一樣具有鐵的紀律性。在一次敏捷培訓中,我們與眾多來自國內軟件公司的項目經理們討論了敏捷,以及他們現在各自的開發方法和問題。閑談中,一位學員冒出一句,“開發團隊應該像軍隊,不僅要整體陣法嚴密,而且每個兵都要紀律分明。”這次培訓主要是介紹敏捷的技術實踐,比如測試驅動開發、持續集成、用戶故事等,該學員認為這些敏捷實踐不僅可以提高員工的技戰術,還可以塑造團隊成員的紀律性。如果這些敏捷實踐在日常開發中都能落在實處,勢必將提高團隊成員的“戰斗素養”和“戰術素養”。一言以蔽之,相較于其他軟件開發模式,敏捷方法對團隊成員的紀律性提出了更高的要求,鼓勵團隊成員成長為項目經理心中的“合格軍人”。
其實,拋開敏捷方法,哪一種軟件開發方法又何嘗不強調團隊成員的紀律性?計劃驅動的傳統型開發方法給軟件過程制定了嚴格的計劃書和檢驗標準,希望能提高團隊的紀律性。它們的出發點是對的,但因為缺少了具體的技術實踐導致計劃書并不能匹配團隊的真實狀態;檢驗標準大多是著眼于與最終交付軟件無關的中間文檔,這些都使得成員在工作中對項目開發的約束力感受不深。比如,很多項目里面的規范說明書、WBS表和甘特圖都畫得非常詳細,但大多數時候這些東西與項目真實情況的落差太大,很難指導督促成員的日常開發工作。而且,這些文檔與需要交付的軟件產品的關聯性不強,也很難能讓成員和其他人通過這些文檔建立對軟件交付的信心。長期看到團隊的表現與計劃的不相符,項目經理們往往會感嘆團隊的紀律性不行。那么,為什么說敏捷方法能相對一定有效地提升團隊成員的紀律性呢?我們先來看看紀律的定義。
紀律
一般來說,紀律有三種基本涵義:1.紀律是指懲罰;2.紀律是指通過施加外部約束達到糾正行為目的的手段;3.紀律是指對自身行為起作用的內在約束力。這三層意思概括了紀律的基本內涵,同時也反映出良好紀律的形成過程是一個由外在的強迫紀律逐步過渡到內在自律的過程。從紀律的含義來看,達到自律是最終的目標,也是施加外部約束的目的所在。通過獎懲來達到一定的紀律性,比如程序員開發過程中的bug率等等,這是生活中最常見的一種形式。這種方法因為檢查的結果與具體生產過程差得太遠,而且評判標準還是比較粗放,所以應該是最低級的方式。施加外部約束,比如檢查列表,指導產品的具體生產,可以評判成員的各個環節是否符合標準,應該算中級方式。只有自律,真正讓成員把紀律的觀念貫穿在生產的每個環節,主動改進,從而改善生產。而這,也是紀律性的高級方式。
對比這個標準,我們可以看到:計劃驅動型的軟件方法學強調更多的是獎懲,也涉及到一些外部約束(代碼復審等),這也是為什么它們在培養團隊成員紀律性上難度比較大。而敏捷方法,通過強調承諾,強調每個成員都是“理性人”的事實,借助于成員的自律性來達到嚴明的紀律性。國內有一家業內非常有名的技術網站InfoQ,四月份在北京舉行的QCon
Beijing就是由InfoQ主辦。除了有限的幾位全職員工,大部分的中文編輯都是社區的活躍分子,他們走到一起,通過之間的承諾和信任維持著日常工作,也給全國技術愛好者傳播國內外的業界最新新聞和技術。撇開具體項目團隊而言,這就是敏捷團隊最好的寫照。但是,我們也應該看到,InfoQ類型的團隊是可遇不可求的。現實中,大部分的開發團隊還是良莠不齊,項目經理們很難去完全授權給手下的員工。為什么敏捷方法又能有效地提升成員紀律性呢?答案在于敏捷方法不僅僅強調承諾,也包含了豐富的技術實踐:不僅給個人帶來更短更頻繁的反饋,也給團隊和組織帶來了多層次較全面的反饋。而反饋的頻繁程度,則是外部約束發揮作用的重要基礎,也即提升紀律性的重要手段。
戴明環(PDCA)
我們來看看被認為是組織或團隊改進或解決質量問題的基本準則的戴明環。戴明環(PDCA)是由美國質量管理博士戴明在20世紀50年代提出,PDCA是英語單詞Plan(計劃)、Do(執行)、Check(檢查)和Action(行動)的第一個字母,PDCA循環按照“計劃-執行-檢查-行動”的順序進行,并且循環不止地進行下去,是一個立體多層級的螺旋式的演化過程。PDCA循環最開始是用在質量管理領域,但實際上它是有效進行任何一項工作的合乎邏輯的工作程序,是放之四海而皆準的指導性原則。下面我們就用它來說明外部約束對紀律養成是如何影響。
PDCA循環里面的Action是一個循環的關鍵,對Check的結果進行處理,成功的經驗加以肯定并適當推廣、標準化;失敗的教訓加以總結,未解決的問題放到下一個PDCA循環里,但它必須以上一環節的Check結果為基礎。如果Check不到位,不能具體到實際工作,Action的正確性和出發依據就很值得商榷。軟件開發是一個以不確定性為主要特征,強調知識的活動。為了采取的Action具有較高的正確幾率,更需要強調開發過程的Check比較頻繁、具體,不斷給團隊提出直接的反饋,這樣才能減少不斷累積的不確定性最后帶來成不可控制的后果。如此來看,短而頻繁的反饋對外來約束真正施加到個人的效果是非常重要的。
PDCA循環還有一個特點是多層級性:各層級質量管理都有一個PDCA循環,形成一個大環套小環,一環扣一環,互相制約,互為補充的有機整體。軟件開發通常會把個人、團隊和組織都牽扯進來:個人完成功能的開發,團隊完成軟件的開發,組織負責完成客戶需求的完成。傳統的軟件開發方法更多的是強調團隊、組織層級的計劃、圖表等文檔,關注于團隊與組織層級的反饋。對于真正創造產品質量的日常開發環節,則缺少必要的檢查和反饋。與之相反,支撐敏捷方法的敏捷實踐,就從“個人-團隊-組織”的幾個層面都提供了相應的反饋:低層次的反饋,為上一層次的反饋提供了依據,同時也作為上一層次反饋的落實和具體。
--未完待續--