敏捷開發的靈魂—小跑精神
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
近來寫了不少敏捷開發的系列文章,如《敏捷開發中如何開發高質量產品》,《敏捷開發的架構設計》,《我的敏捷開發實踐》,《敏捷開發中的code review》等,這些都是關乎方法的。方法固然很重要,但還有另外一部分筆者覺得非常的重要,而且不容易被人關注,也是這篇文章想和大家一起探討的內容,這就是敏捷開發的“精神”。筆者認為敏捷開發的“精神”是敏捷開發的核心,也是敏捷開發之所以稱為敏捷開發之所在。
方法和精神,孰重孰輕,是仁者見仁智者見智。但缺少精神的方法,長久以往,便形似而神不似,缺乏核心和靈魂,猶如 “行尸走肉”。君不見,美國的民主模仿者不在少數,民主民權,三權分立,權力制約,方法可謂一套一套,有best practice(最佳實踐)可循,但強大富強如美國者也僅此一家,如鐵桿小弟墨西哥卻是遠不如,偷渡到美國倒是積極有余。想起前陣有一部電視劇——《士兵突擊》,受到廣大觀眾的喜愛,假如我們做一個問卷調查,問一些觀眾:什么是“鋼七連”?答案有:鋼七連是超強的作戰能力,鋼七連是紀律嚴明的團隊,鋼七連訓練刻苦,鋼七連是“不拋棄、不放棄”的一種精神。我想很多觀眾都會說,鋼七連是“不拋棄,不放棄”的一種精神。所以,作者認為方法之外,還有超乎方法的所在,就是精神。敏捷開發也是如此,方法之外(迭代、測試驅動、重構、結對編程等),還有超乎方法的精神存在。 記得前兩年敏捷開發流行之始,在公司上下掀起了一股敏捷之風,尤為壯觀的是“一夜”之間所有的團隊都敏捷了,全都號稱自己團隊正在敏捷開發,全部裝備了“敏捷開發”的光環。了解之后,發現其中大部分團隊的確是開始使用一些敏捷開發被推崇的方法,比如,一些團隊使用了迭代開發,還有一些團隊使用了結對編程,還有一些團隊開始使用測試驅動開發。當然,我們團隊(包括我本人)也是其中的一員。這倒讓我認識到,從眾心理不僅在人與人之間存在,在團隊之間也是存在的。 這里倒不是去點評這些團隊的做法,開始使用敏捷是值得鼓勵和贊賞的。只是這樣的現象引發了我當時不少的困擾和思考:到底什么是敏捷開發?是否真是“神說,要有敏捷,于是就有了敏捷”?是否一夜間大家就由于使用了一個迭代開發的方法(盡管一個迭代里面還是用瀑布),大家就都敏捷了? 直到前幾天去上地的“小肥羊”吃火鍋,又觸動了心中一直在思考的什么是敏捷開發的問題。在“小肥羊”里現在也能看到和“海底撈”一樣拉面條的小弟,也有免費送豆漿的服務。但是雖然這些方法都類似,卻還是覺得和“海底撈”不太一樣。后來覺得二者確實不一樣,不一樣的是人,是氣氛,是那種服務的精神。 所以,總而言之,筆者認為:敏捷開發之所以為敏捷開發,不是因為其方法(雖然方法也很重要),而是因為敏捷的精神存在,我稱這種敏捷的精神為“小跑精神”。下面讓我們一步一步去看看,到底敏捷開發的“小跑精神”是什么? 敏捷開發的“小跑精神” 不知諸位讀者是否都注意到一個現象,不管在哪個行業,餐館也好,酒店也罷,甚至飛機上的空乘服務,總有一些好的服務人員,他/她們在服務時總是滿懷熱情地,“小跑”著為大家服務。他/她們總能注意到客人的需求,總能給客人提供及時的服務,而且總是在尋找“金礦”似的尋找自己可以貢獻的地方。他/她們或許沒有那種所謂的禮儀方法,滿口的“您好”,“您辛苦了”,“謝謝”,“謝謝光臨”這些方法,但他們的態度和精神,無時不刻地體現她們的熱情,無時不刻不在感染顧客。 這就是我稱之為“小跑精神”名字的來源。“小跑精神”是一種主人翁態度,是一種自動服務的熱情,而不是表面的方法和寒暄。現在太多的公司和團隊,都太注重所謂表面的形式,而往往忽略了內在的精神。如在任何銀行的電話中心,撥打進去后都是機器的寒暄“您好,歡迎光臨某某銀行電話中心……”,但是如果沒有真的傳遞“小跑精神”的服務給客戶,這樣的話語只不過是浪費顧客的時間和顧客電話費而已,不能感染顧客,并提高的客戶滿意度和忠誠度。 敏捷開發中“小跑精神”也是這樣的一種精神和態度,一種對產品,對項目的由內而外的熱愛,樂于貢獻的主人翁精神。每個個體都可以按照組織的最高利益,自我驅動的完成組織的目標。 小跑精神可以體現在下面幾點: 1. 人找問題,而不是問題找人 問題找人,是一個極其普遍的現象。在組織協調中,一個很常見的現象是“責任分散”。當一個問題由一個人負責時,猶如個體戶經營,那這個個體肯定是盡心盡責,因為這是他一個人的“責任”。當組織逐漸壯大,特別是近幾年全球化的經營方式,一個任務由多人負責,甚至多個不同國家的人負責的情況,已經司空見慣,這樣的團體協作中,容易滋生“責任分散”的現象。 什么是責任分散?比如,在街頭,四周只有你一個人,當你看到旁邊有個小孩躺在地上哭,你一定會過去扶起小孩,然后提供你的愛心和幫助。但是,換另外一個場景,在一個繁忙的街邊,四周都是匆忙而過的人群,當你看到旁邊有個小孩躺在地上哭時,你可能會隨著人群走過。這就是責任分散,當人越多時,大家都覺得,一件事情可能是別人會去做,所以自己就不去做了,而且自己不去做內心收到的譴責也不會很大。因為,所有的責任都分散到了所有的個體上,收到的內心的譴責也都分散到了所有的個體。 在軟件項目管理中,也是經常問題找人,而不是人找問題。下面的場景大家肯定不陌生: 在產品開發早期,由于代碼開發過快,代碼混亂,需要重構。但開發人員覺得還沒發生問題,無需重構。所以一拖再拖,最后索性不重構了。 今天有個defect開給了某個開發人員,測試人員在defect里面的描述寫的不是很清楚,導致無法重現defect。開發人員一直等著測試人員,測試人員等著開發人員,一拖就是兩天過去。 今天是code review deadline,但沒找到會議室開review會議,就延遲到了明天,明天還是沒找到,就延遲到了后天,最后就是由于會議室,導致sign off延期三天。 類似這些人找問題,而非問題找人的現象缺的不是技術、也不是條件,缺的正是一種“小跑精神”。一種不斷主動發現問題,積極解決問題的精神。 敏捷開發中的“小跑精神”下應該是人找問題,只要是對組織和項目有幫助的,都要積極主動的去思考和提高,并積極的采取行動,不要等到每次問題找你頭上了再開始消極的去回應。 2. 自我決策,而不是事事等待命令 “小跑精神”崇尚流程與靈活的平衡,科學管理與情感精神的統一。當今商業環境快速變化,唯一不變的就是變化。沖在一線的“開發人員”是最了解系統架構和技術、開發工作量,某一件改動對項目影響的人。“小跑精神”的團隊成員,應該擁有在一定范圍內的自我決策的能力,充分靈動的為產品創造最大價值。 如果把項目比作從北京到廣東自駕旅游,那除了項目目標、方向和主要的匯合點外,團隊在哪個路段開什么速度行車,由于堵車走哪個小路,哪天在哪個加油站加油這些具體的執行層面,完全交由團隊自身決策。這樣既能下方復雜度,又能充分發揮團隊的“小跑精神”,選擇最佳方式實現組織的目標。 所以,“小跑精神”是在大方向和策略不變的情況下的自我決策,而不是事事層層匯報,等待上級命令(當然在影響大方向和戰略的情況下,還是應該向上匯報)。 敏捷開發“小跑精神”的管理方式 精神,是一個藝術性的事物,無法像科學一樣定量衡量。敏捷開發的精神,是隨著團隊文化和管理方式孕育而生。軟件開發的團隊文化,大體可以分為下面這兩個維度。一個是自上而下的計劃與控制,一個是自下而上的靈活與主動。他們二者的關系如下: 計劃、控制意味著從需求,到架構,到設計,到開發,測試的完全的控制和計劃,代表就是傳統的瀑布開發了。在軟件開發管理中,總是喜歡把軟件工程和另一個領域做比較:建筑工程。而且最早的軟件工程的思想來源就是受到了建筑領域的深刻影響,《建筑的永恒之道》一書估計是軟件從業者人盡皆知了。這對計算機軟件工程的發展起到了很大的積極作用。因為軟件和建筑有很多的相似性,如組件,設計,分工,計劃等等。所以,早期的軟件工程,強調“瀑布”開發,需求、架構、設計、開發,規劃和設計好一切。這在軟件出現的最初的一段時間,是被很好的應用并推廣,為軟件行業起到了很大的促進作用。 但隨著社會的發展,企業信息技術的成熟,以及越來越變化的客戶需求,建筑式的瀑布開發,已經不能符合軟件團隊的需求。以前,企業只要能有個網站可能就很滿足,也沒有太多的需求訴求,現在就不一樣了,每個企業的各個部門都有信息化的需求,而且需求不斷變化,不同部門之間需求有時還有沖突。這時完全計劃、控制式的軟件開發方式,就不能滿足商業發展需求了。 此外,軟件研發是管人,是管理人腦力創造性的產出,是知識密集型產業管理。管死物,可以規劃計劃的很詳細,然后根據規劃優化資源,因為事物是死的,不會產生波動和變化。猶如,泰勒用秒表對的生產的每個操作步驟進行了精密監測之后,才有了精確的工作度量方法,才能衍生大規模流水線生產,因為只有絕對的穩定,才能有絕對的控制和規劃,才有了流水線的批量大規模生產和資源優化,這在管理高度勞動密集型工作時是常見的。所以,泰勒的秒表試驗,量化的工作時間是是福特流水線的基礎。而軟件行業,是一個創造力的腦力活動過程,人的產出是波動的,變化的,很難用秒表精確(大家應該都認識到一個現象:即高產出的研發人員是一般產出研發人員的好幾倍),所以知識密集型行業和人的積極性和主動性等精神方面是緊密相關。所以試圖用管死物優化控制的方法去管人的大腦,是會出問題的。現在的軟件行業,許多的經理和企業,都有把人當作機器般對待的傾向,大量的控制與規劃,規章制度,匯報會議,審核流程,這樣的企業文化和團隊中,是很難出現員工的主動創造,主動貢獻,更不可能出現“小跑精神”的企業文化和好員工,不鉆流程的空子偷工減料就算不錯了。所以敏捷開發是在計劃控制的基礎上,把上圖的中間線向右邊移動的過程。敏捷開發注重靈活主動,更加注重人的作用,而不是以控制、流程管死物的方法來限定人的積極性,這樣的管理方式更容易產生精神產物,也就是敏捷開發“小跑精神”的基礎。 中國人向以以德服人、無為而治的管理方式而著稱,這是上圖中偏右的管理方式,而西方則擅長量化的科學管理方式,是偏向左邊的管理方式。而敏捷開發則是一個中間的一個平衡。計劃和控制,是科學;靈活、主動是藝術,敏捷開發是科學與藝術的統一。 計劃和控制是冰冷的,沒有情感的,沒有活力的;靈活主動是火熱的,是洋溢熱情的,是突出主動貢獻的。絕對的靈活,也是要出大問題的,組織會變得失控,失去章法,最后慢慢衰退。很多國內的小型軟件公司,很多就是過度靈活,軟件生命周期沒有良好的定義和流程,沒有良好的質量控制,也沒有開發流程和測試流程,如此企業規模一大,就很容易出現問題。所以一些民營企業軟件公司,想要做大做強,就必須要有章法,要有控制和規劃,引進科學的管理方法來管理軟件研發過程。絕對的計劃和控制,組織就會僵化,沒有創新力,失去激情,如一些大型的國企,過度的規章制度和控制,使得組織缺乏激情和創造力。所以,這二者,沒有絕對的好,也沒有絕對的壞。上圖中,中間的虛線是軟件管理的方式,那么敏捷開發,是從以往的絕對控制的科學管理開發方式,逐漸向右移動。當然,這就導致敏捷開發中控制和規劃的元素少了一些,藝術管理的意味大了一些,但藝術這東西,說不清道不明,這也難怪大家用方法來衡量敏捷開發。 敏捷開發更加注重管理藝術的成分,而不是把軟件工程當作絕對的科學。強調靈活、主動、熱情的“小跑精神”。融合了人性化的管理和科學的方法,這不能不說是軟件業管理方法的一大改進。 敏捷開發的“陰陽之道” 前不久,和一位資深的架構師談天,他說了一個形象的比喻來形容組織中的“老化現象”,他說道;組織就像一棵樹,組織變得越來越大,樹干、樹枝就越多,而樹枝和樹干逐漸失去活力,而最新加入公司的員工,就猶如一顆大樹上的新葉,迸發著青春和激情,但隨著工作時間增長,也就慢慢的老化,失去往日的激情,慢慢成為組織的“朽木”。任何組織和團隊,如果這樣的朽木越來越多,終有一天會枯竭。 敏捷開發正是這樣一種軟件管理方法,崇尚組織和人的精神,它的靈魂是靈活、熱情、主動的“小跑精神”。敏捷開發是計劃控制到以人為中心的一個轉變,是“中間線”向右一直移動的過程。至于那根線該移到哪個位置,應該靈活到什么程度,就沒有絕對定量的衡量。管死物還可以是科學方法,用project工具、甘特圖等方法規劃,加以定量;而精神層次則帶有藝術成分,是難以科學量化,而敏捷開發就是這樣科學與藝術的結合管理方法。它們二者之間難以去量化,你無法去確定他們的比例是什么樣的,也無法量化哪個多、哪個少。所以,用下面這張圖來描述敏捷開發我覺得更為合適。 上圖是中國古代的太極陰陽魚,形象化地表達了陰陽輪轉,相反相成是萬物生成變化根源的哲理。對敏捷開發而言,也正適合深刻表達出計劃控制和靈活主動,科學管理與藝術管理之間的互相轉化,相對統一的關系,所謂動極而靜,靜極復動,一動一靜,互為其根,而這就是敏捷開發的管理之道。 精神是藝術層面的產物,比較困難去定量的衡量和引導。如何去建立和加強敏捷開發團隊的“小跑精神”,又如何去衡量團隊成員的績效評估呢?下一篇文章,我們將繼續這個話題。 該文章在 2010/7/25 2:26:59 編輯過 |
關鍵字查詢
相關文章
正在查詢... |