今年5月,參加了林銳博士和華章圖書組織的免費講座“如何管理軟件企業”。林銳博士身兼多職,是公司負責人也是企業咨詢師,見多識廣又經驗豐富,所言精要皆切中要害。在談到企業學習時,他提到除了學習先進企業和行業規范,更重要的是學習本企業發展過程中的經驗教訓。其要點是“不二過”,即所犯過的錯誤絕不再犯第二遍。
“不二過”對于軟件開發者而言不是新概念。Scrum要求在每個迭代(iteration)結束后,實施反思(retrospection),以總結經驗教訓,提出改進方案。嚴格的代碼審查(code inspection)集體評審所發現的問題,并記錄缺陷。在這一過程中,參與者可以學習缺陷特征,以避免再犯。嚴格的缺陷管理系統(defect management system)會要求開發人員在修復(resolve)缺陷時填寫錯誤的根本原因(root cause);如果這是一個在產品環境中發現的缺陷,缺陷管理系統會要求測試人員在關閉(close)缺陷時填寫與測試漏洞(test hole)相關的信息:為什么在發布前沒有發現該錯誤、應該如何增強測試等。這些都有助于實現“不二過”。
以上列舉的開發實踐,我的組織都實施過,但是效果差強人意。技術細節上,一些共性的問題總是反復出現;開發水平上,“螺旋式上升”似乎退化成“原地打轉”。為什么始終沒有進步?林銳博士用下面一個故事給出了他的解答。
有一次,林銳在步步高做企業管理的咨詢。某天,他對總經理說:“我建議企業內部學習的時候,所有的經理都表示同意。但是,具體實施的時候,他們總說很忙,沒有時間。直到今天,內部學習也沒有展開。”總經理的回答很干脆:“忙永遠沒有結束的時候,但是學習必須從現在開始”。于是,當天晚上組織所有經理和員工,加班召開全員會議。
在會議上,總經理要求每一位員工提交10條他們曾經犯過的工作錯誤。有一個專家小組會評審每一個錯誤。如果一個錯誤是有價值的、值得組織學習的,就會獎勵提交者100元人民幣。受到獎勵的鼓舞,大多數員工都踴躍地提交錯誤。結果,當晚就發放獎金7萬多元。林銳問總經理:“發這么多錢,心痛嗎?”總經理笑答:“這些小錢算什么!”
相比冠名”非誠勿擾“每期百萬的支出,7萬元對于步步高確實只是小錢。不過,即便是小錢,也要獲得切實的回報。在員工大會之后,步步高對錯誤進行了”再處理“,整理出一批詳細的培訓教材。教材內容針對每一個錯誤給出了解決和預防的方法。之后,公司利用這些教材對所有員工進行了再培訓,并約法三章:如果在開發階段再次犯已經培訓過的錯誤,員工要受到批評。如果在上市的產品中發現已經培訓過的錯誤,相關員工要受到經濟處罰。
經過一段時的運作,”不二過“的流程運轉順利。崗上培訓提供了學習資料,工作中的反復練習和糾錯鞏固了學習質量。進而,開發流程和產品質量都有穩固的提高。
這是一個很有啟發的故事。從中我領悟到幾個”內部學習“的要點。
領導支持。所有領導都會在口頭上支持內部學習,但是只有真正的支持者才會抽出時間來身體力行,才會拿出真金白銀來鼓舞士氣,才會改變流程來促成改變。不要以為7萬元是小錢,許多時候領導的支持不會超過700元。
內部培訓。許多公司會請培訓師做技術培訓,會組織員工做新技術報告。只有少數公司會評審缺陷數據庫中的缺陷,發現那些有教益的錯誤,進而編寫成教材,實施內部培訓。這些以”不二過“為宗旨的內部培訓,切合工作實際,能夠激發員工的思考,能夠以很小的成本快速獲得成效。
案例為重。內部培訓的教材來自具體的案例,它們是培訓的核心價值所在。要分析一個一個具體的錯誤,挖掘它們的原因,探究如何更好的構造,從根本上避免再犯。
形成制度。培訓只是起步,要在工作中反復地實踐,才能真正掌握。要對制度作出改變,使它支持團隊向新目標前進。步步高的做法是在開發階段引入持續糾錯,當員工犯已知錯誤的時候,能夠獲得批評反饋,從而避免錯誤泄漏到最終產品中。
獎懲分明。有了制度,就要嚴格執行。犯錯誤是難以避免的(在某些場景下,是值得鼓勵的),但是一再犯相同的錯誤且最終危害到產品,就要被懲戒。那些提供有價值的素材、編輯教程、實施培訓的員工應該獲得相應的回報。
”不二過“強調的是從錯誤中學習。作為發現錯誤的主力,測試人員應該注意日常的積累,分析總結那些有代表性的錯誤,與整個團隊分享。雖然這一過程很可能沒有物質獎勵,但是它有助于更有趣的工作,因為你遇到低級錯誤的可能性在降低,你會有更多的時間去探索隱蔽的高級缺陷。