前一陣子看了《阿波羅與酒神:工作型態變動下的個人與組織》,這本書探討四種不同型態的組織工作文化。有趣的是,當時在同人參與的專案,發生了兩件事讓我思考開發團隊工作文化的調適。
這兩件事都和使用者驗收測試的系統配置(deployment)有關。第一件事是程式開發者發現系統突然配置失敗,原因是因為配置程序增加檢查資料查詢條件所指定的欄位名稱是否存在於資料庫表格。這個檢查需求是由另一個系統提出來,我們的系統和他們的系統共用同一個配置程序。為了防止查詢條件指定的欄位錯誤,增加這段檢查似乎是合理的,但因為這個改變並沒有通知我們,於是當發現系統配置失敗時,馬上讓負責整合測試的系統分析師措手不及,他們提出希望等驗收測試之後再加入這段檢查的要求。
長官出面協調問題,但他也注意到了如果沒有加入這段檢查,即使系統可以成功配置,那也會在驗收測試時出現一堆錯誤而使測試失敗,這樣只是延後發生問題而不是真的解決問題。面對長官的質疑,系統分析師堅稱他們測試過功能不會出錯,這種說法實在讓人大惑不解,因為看起來好像不合邏輯。
後來同人研判這其中有一種可能,那就是那些欄位名稱錯誤的查詢條件還沒有被任何的功能所使用,所以測試不會有錯誤,但卻被查詢條件的欄位名稱的檢核阻擋而配置失敗。然而如果等到配置失敗才依照錯誤訊息來改正錯誤,那實在是太曠日費時,於是大家協調出解決方案是配置程序暫時先不檢查欄位名稱,並且馬上開發出可以一次檢查所有欄位名稱錯誤的工具,供程式開發者檢查與修正錯誤,等到工具開發完成之後,才在配置程序之中,加入欄位名稱的檢查。
第二件事則是驗收測試需要開發一個功能,那個功能是用來填補被遺漏的需求,程式開發者需要建立新的資料表的定義,但不是負責該功能的系統分析師們卻反對簽入(check in)新增的資料表,他們擔心資料模型(Data Model)的變動會影響到既有功能的運作。由於運作中的系統的資料庫版本很舊,為了順利測試已凍結資料表的變更簽入,如果現在簽入新增的資料表,勢必會連帶變動到其它資料表而產生蝴蝶效應,這會造成驗收測試極大的風險。
系統分析師們認為雖然不簽入新增資料表,那個功能將無法驗收,但一旦簽入新的資料表,卻很可能會造成大量的資料模型和程式不匹配而造成全面的災難。因此當長官質疑當發現 BUG 需要改資料表綱目(schema)才能修正問題時,系統分析師要不要異動資料庫,有一位系統分析師反問:「你是要死一支功能,還是整個系統全死?」。
看到雙方僵持不下,同人表示或許我們可以想到兩者都不會死的折衷方案。後來經過大家充分與熱烈的討論之後,才發現原來系統分析師們是多慮了,其實在驗收測試的系統簽入增加的資料表格綱目並不會影響系統的運作。
負責佈版的管理者證實他有記下當時的資料庫版本,所以他會比對和新版本差異部分來配置系統,而不會以最後版本整個覆蓋資料庫。然而很多人都誤會他會把整個資料庫最後的狀況覆蓋到系統上,所以希望凍結資料庫的更新,但如果不是因為需要解決兩難而進行溝通,可能沒有人能夠把事情做對,即使每個人都認為在自己工作本份上採取最好的行動。
多虧團隊成員透過相互協調與充分溝通,而讓這兩件事有圓滿的處理結果,但同人深刻地體認到在過程中的處理實在是很辛苦,也需要花費相當多時間。我想到在《阿波羅與酒神:工作型態變動下的個人與組織》這本書,作者韓第提到任務型文化和角色型文化的對比。
這本書提到希臘神話眾神來代表不同的工作文化:眾神之王宙斯代表強調個人領導魅力的俱樂部文化,圖示為放射狀的蜘蛛網,但重點不在網的放射狀而在於中央的蜘蛛、太陽陽神阿波羅代表重視組織結構的角色型文化,圖示為神廟象徵重視工作的規律與預知未來變化、智慧女神雅典娜代表以解決問題導向的任務型文化,圖示為方格狀的漁網象徵集合不同專業以解決複雜問題、至於酒神則代表沒有特定規則及章法的存在型文化,圖示為幾個不規則排列的黑點象徵工作強調存在的價值。
宙斯和酒神代表的工作文化偏向個人特色,宙斯強調領導中心的力量、酒神則強調按照個人認同展現自我存在的價值。而阿波羅和雅典娜代表的工作文化則牽涉了群體的分工合作,兩者不同的地方的是雅典娜強調任務在問題解決的靈活彈性,而阿波羅則是重視角色在達成目標盡到組織所賦予的責任。
雅典娜適合開發的工作,強調讓各領域專業能力的發揮,但需要花費大量的人力物力是其缺點。阿波羅適合明確計劃、較少不確定性因素的工作,強調以預測來規劃資源的有效利用以展現高效率,但對複雜環境的變化卻缺少適應的彈性。
從雅典娜的任務型文化和阿波羅的角色型文化來對比,軟體專案開發的工作適用雅典娜的工作文化,因為它需要技術的專業領域來處理問題,而且需要組成跨領域的專業團隊來面對各種突發狀況。雖然以工程的角度來看軟體開發工作,大致會區分為需求、分析、設計、實作、測試等角色的開發活動分工,但在現實的開發過程中,角色責任的定義通常會因為環境的變化與複雜性而模糊不清,因此很難能夠讓阿波羅完全施得上力。
這是因為軟體開發是解決問題的過程,適應性比穩定性或效率更重要。不能適應解決問題所需情境的穩定或效率,只是徒增浪費-亦即不精實、與品質不良-亦即不敏捷,而無法解決問題。故軟體開發團隊應該採用效法雅典娜的精神,致力充實精良的技藝來完成任務,講求整體目標的達成,而非只是盡義務完成個體角色的責任。因為這樣很容易讓人因為不明究理而犯錯,強調阿波羅習慣的做事常規,容易使團隊僵化而形成官僚特性。
不過雅典娜解決問題的作事風格需要很多溝通,很容易把時間浪費在成員彼此互動的協調,而顯得效率不彰。為了提高效率,雅典娜解決問題需要靠阿波羅協助來維持穩定和提高效率,但需要注意不能因為角色與責任的限制而阻礙行動的節奏與創造力。
就像在使用者驗收測試過程,系統分析師阻止簽入可能會影響整體系統運作的建構項目(configuration item),基於責任的角色觀點來說是正確的行為,但在解決問題的任務觀點來說,卻是不能不讓整個團隊產生對話,而共同思考如何在不影響現有系統的情況下,採取適當行動而成功解決問題而達到雙贏。
同人認為開發團隊工作文化的調適最關鍵的地方,是要讓每個角色為解決問題而行動,而不是因為命令或規範而不明究理在做事,因為這樣很容易因為官僚而成災。因此,不要因為覺得浪費時間或為了避免衝突而不溝通,往後團隊將會因為沒有解決問題而付出更大的代價,更嚴重的是成員受到文化的感染,將會變得缺乏承諾、規避責任、甚至最後導致忽視成果,團隊不再擁有專業的雅典娜,而阿波羅的計劃也永遠趕不上變化呀。
自動引用通知: 狡兔死必然走狗烹? « 同人的生活派對
自動引用通知: 突破團隊效能的瓶頸 « 同人的生活派對