Agile Software Development: Why It's Hot!

MAR 15, 2002 By Jim Highsmith. Article is provided courtesy of Addison Wesley.

Agile軟體開發:為何這麼熱門!

翻譯:Areca Chen  校稿:何明遠

Agile ,如Jim Highsmith在這篇文章中指出的,在我們的周遭都可以看到它的影子 - 而且事實上已經存在一段時間了。但是為什麼忽然間變得如此熱門?

Jim Highsmith的其他文章

[譯註]Agile一般翻譯成『靈活』或『敏捷』。但作者在這篇文章中,賦予這個字有更多的意涵。故接受校稿何明遠先生的建議,在本文中全部保留不譯,以免讀者受翻譯的刻板印象,以致忽略了原作者想要傳遞的實質內涵。其他相對的Agility(靈活性)及Agilists(靈活的人)也都保留原文不譯。另外Chaordic這是一個合成字,意涵『亂中取序,序中求變』或『亂序平衡』 的關點; 這個合成字意近中庸之趣;故也保留原文不譯。希望各位讀者能用心體會原作者的心意。

在最近這幾年來,Agile 軟體開發(Agile Software Development, ASD),在XP迷孜孜不倦的推動下,猶如在軟體開發界引爆一枚炸彈。但是Agile 的這道好菜,在十幾年前,早就在台面下醞釀多時。在過去幾年,有關Agile 的文章,不斷出現在ComputerWorld, Software Development, IEEE Computer and Software, Cutter IT Journal, CIO之中,甚至連Economist這類經濟性報紙也加以報導。我認為Agile 突然名聲暴漲,基本上有兩個因素:

在我們的專業中,熱烈爭論著這種趨勢,而我們可以使用三個關鍵問題來作為評估:

在未來,我們的資訊時代經濟屬於Agile —屬於那些能夠構築變動(create change)(甚至可能是有一點點混亂(chaos)),用於抗衡其競爭者的公司。如果你可以不斷的革新,使你變得更好更快,你就是構築變動抗衡你的競爭者。如果你可以主動地快速回應競爭 、新的技術及客戶的需求,你就是構築變動抗衡競爭者。如果你是牛步化,缺乏革新,反應遲鈍—那你便注定沈淪在茫茫大海,在競爭對手的壓迫下,苟延殘喘。 變動幅度的決定權是在你的公司,還是你的競爭對手?在我們的資訊時代經濟,一家公司決定變動幅度的能力,構築變動的能力,端賴其開發軟體的能力。在變動的世界中,傳統上嚴格依循常規的(rigorous)軟體開發方法,是完全無法成功的。

什麼是Agility

如果動盪及混亂是問題的本質,那麼Agility便是解決問題的金鑰。

Agility並不是一種『一擊中的』的方法,可以用來檢查組織的主動性。Agility是一種生活的方式—不斷的找出事實與改變,以回應商業上的動盪情況。對於持反對意見的人而言,他們可能會挑剔說;「Agility只是等待不好的 事發生,然後再去回應。那不過是一種花俏的名稱,缺乏事先的計劃,是一種非正式的作法。」其實不然,Agile 的組織仍然需要做計畫,只不過他們知道計畫的有限性。下面三個特徵,有助於我們定義Agility。

Agility是構築及回應變動的能力,以便能在動盪的商業環境中獲取利益。

主動多於被動

Agility不僅僅是被動,更應該是主動。首先也是最重要的,Agile 的組織構築變動—構築可以對競爭對手產生強大壓力的的變動。構築變動需要革新—建構可以提供商業價值的新知識。其次,Agile 的組織有回應的能力;快速而有效的回應商業環境中,不管是可預測或不可預測的變動。

探險

在我們易變的經濟環境中,公司必須增強他們組織中每一個階層的『探險(exploration)』技能。好的探險家都是Agile 的探險家—他們知道如何入境隨俗且隨機而變 (juggle and improvise)。印第安那瓊斯(法櫃奇兵)是一個優秀的探險家,往往總是能在未知的危境中化險為夷。Agility義務意味著快速、輕裝而行、及機敏—迅速行動的能力,以最少必要的行動完成工作的能力,及自我適應變動情況的能力。Agility也需要革新及創造性—前瞻新產品的能力,及運用新方法處理商務的能力。特別的是,IT組織在探險及最佳化的需求上, 往往無法取得平衡。

即興而作

Agile 的人是可以即興而作;他們知道規則及界限,而且他們也知道手上的問題,何時已經進入未知的領域。他們知道如何延伸他們的知識,以便進入無法預測的疆界,他們會去探險,他們會去學習。當碰到關鍵的事需要解決,盡他們最大的能力即興而作。

即興而作造就了許多偉大的爵士樂團。僅憑一些關鍵的結構規則,爵士樂團海闊天空地即興演奏。紮實的基礎,增強了他們本身寬廣的彈性,而不至於讓他們的音樂淪為荒腔走調。商務再造工程及軟體工程方法論的提倡者,可能都是從即興創作得到啟示,而不是從周密的程序獲得啟示;這正是成功的關鍵。更何況處於現代的動盪環境中,企業員工能夠擁有好的協調力、判斷力、及即興而作的技能,都是無價之寶。

Agile的真諦在於,信任從事者的應變能力,而非其規劃的能力為何。

什麼是Agile 軟體開發生態系統?

我已經著手撰寫一本有關Agile 軟體開發方法論(methodologies)的書籍,但是 我對於方法論這個名詞斟酌再三,因為方法論這個名詞並不符合Agile 開發的焦點—人、關係、及不確定性。除此之外,使用方法論這個名詞,Agile 的實務作法立即與傳統的軟體開發方法論形成對比—因此也導致使用錯誤的量度來比對。因此我開始使用『Agile 軟體開發生態系統』來描述一個整體的環境;而在這個環境中,包含三個互相交互作用的元素:

對於支持ASDEs的人,我使用『Agilists』這個名詞來區隔。

有些人認為Agile 代表著更少的程序,更少的繁文縟節,更簡短的文件,但有更寬廣的遠景;這就是為什麼使用『生態系統』,而不使用『方法論』的主要原因。雖然有更少的程序及 制式活動,可以降低開發的成本,但這樣仍不足以稱為『Agility』。側重於人及他們之間的互動,並且讓個人皆有權快速地作決定,而且自我調適個人的程序,才是Agile 生態系統的關鍵。

生態系統這個名詞,給人的印象是活的事物,以及事物之間的互動。因此在組織的背景中,生態系統可視為動態、不斷變動的環境;在這樣的環境中,人們及組織不斷地創新,以及回應其他人的活動。生態系統這個名詞,將我們的目光集中在所有人與團隊的動態互動,而非組織圖中的靜態連 繫。

Chaordic觀點

要完整瞭解ASDEs,我們需要瞭解這三個元素,以及這三個元素之間 如何關連。首先,Agilists共同的看法是,組織是chaordic—亦即每一個組織顯然包含混亂秩序兩種屬性,經由使用線性 的預測性規劃及執行作法挑戰管理。將組織視為chaordic意味著,認知到傳統專案管理及開發生命週期的作法,是依據可預測性,並據以建構這些作法,乃是導致客戶、管理、及開發組織功能不良的根源。chaordic的觀點影響到,如何回應變動,及我們如何管理專案團隊及組織。

在日常的專案工作中,chaordic的觀點產生兩個結果,這兩個結果與嚴格依循常規的方法論,有著180度的差異:

雖然ASDEs包含細心的規劃,但基本的假設仍然是 在動盪的環境中,計畫不是可以預測的—至少在專案範圍、進度及成本的層次是如此。計畫只是作為驗證的前提,而非要去實現(realized)的預測。然而, 產品的商業目標是可以達成的,主要是因為Agile 的人們不斷的調適。這些人們可以在進度、範圍、或成本目標這三個向度,透過三者相互比較衡量選擇,進而調適出一個清晰觀點,及進度、範圍、或成本目標。固然程序有助於將人們結合起來,在易變的的環境中,這種透過衡量及修正—統計性的程序控制—的方式驅動程序變動的想法,便成為無法實行的假設。在專案中,變動成為獲取知識的來源—知識是沒有辦法在專案的初期識別出來—程序需要能夠回應變動,而不是要抑制變動。

Peter Senge(彼得.聖吉)使用心智模式(mental model)定義這個觀點,在你我的腦裡有一組假設、故事、及信仰,提供了我們思考的背景/脈絡(第五項修練:學習型組織的藝術及實務作法(The Fifth Discipline: The Art and Practice of the Learning Organization, Currency/Doubleday, 1994))。在組織中,心態模式的集合定義一個整體的文化背景。極度銷售導向的公司與極度工程導向的公司不同。其策略由客戶關係驅動的公司與由產品生產創新力驅動的公司也不同。心態模式 是線性(linearity)、因果關係(cause and effect)、層級架構(hierarchy)、可預測性(predictability)、及控制(control)的公司與心態模式是合作網絡(collaborative networks)、緊急(emergency)、分權化(decentralization of power)、及接受不可預測性(acceptance of unpredictability)的公司不同。一個是牛頓定理,另一個則是chaordic。

合作的價值觀及原則

定義ASDEs的內部溝統網絡,其第二部分說明的是合作的價值觀及原則(collaborative values and principles)。然而,要以簡單的一個詞,表達Agile 宣言(Agile Manifesto)的特性,卻不是那麼容易的。而合作似乎是可以用來表達的最佳單一形容詞。合作的價值觀及原則使得生態系統得以成型。沒有一組明 確的價值觀及原則,那麼生態系統便是死氣沈沈的,其顯示的外貌只是一些作法,而不是在其中互動的人。

合作的文化,包括人們在開發團隊中的互動關係,以及與客戶、管理階層、及公司內部或外部的合作團隊之間的互動關係。人的動態性、溝通、及合作可以認知為『軟』的科學,但是在實務上,卻是最難(hardest))掌握的。原則及價值觀有助於定義一個文化—也就是人們願意在其中工作的環境。

剛剛好夠用的方法論

ASDEs最後一個元素就是方法論(methodology)。傳統方法論的定義包含的事項如:角色(roles)、活動(activities)、程序(processes)、技術(techniques)、及工具(tools)。Alistair Cockburn 在定義方法論時,將這些元素綜合起來成為「我們同意的協議」—人們在一個專案中共同工作的方式(Agile 軟體開發(Agile Software Development), Addison-Wesley, 2001, ISBN 0-201-69969-9)。

在資訊的社會生活(The Social Life of Information)一書中,John Seely Brown及Paul Duguid (Harvard Business School Press, 2000)說明程序(process)(如應用在商業程序再造工程活動中)與實務作法(practice)的主要差異在於:

ASDE模型提供的方法論,是一種以實務作法為核心的方式,而非以程序為核心的方式。

追求剛剛好夠用的方法論,有兩個原因:價值及革新。

方法論與組織模型也有關係。Agile 方法論中包含最少量的程序及文件,同時也降低繁文縟節(制式化)。Agile 方法論號稱『剛剛好夠用(Cockburn)』或『比足夠少一點點(a little bit less than just enough)(Highsmith, Adaptive Software Development: A Collaborative Approach to Managing Complex Systems [Dorset House, 2000])』或『最小的(minimal)(Bob Charette's Lean Development Guidelines)』。但是這種方法論的高效率,並不僅僅是以降低工作 量為基礎;最重要的是,以瞭解chaordic的世界觀作為基礎—這種混亂的世界觀,也就是在『混亂的邊緣』,是危機(革新)最佳的產出;座落於混亂與秩序的中間。

實務作法(或技術)是方法論的命脈。不管是否採用雙人組程式設計(pair programming)、站立會議(scrum meeting)[譯註:如球隊圍成一圈的小會議]、以客戶為核心的群體(customer focus groups)、或自動測試(automated testing),如果是由有才能及技能的人們來實現,ASDEs的實務作法是可以產生效果的。

Agility解決哪類問題最有效?

在最近幾年來,軟體技術已經從過去的支援商業運作,轉變成商業策略最關鍵的元素。軟體技術驅動新的產品開發,從汽車中包含上百個內嵌軟體的晶片,到行動電話,及其他許多無線裝置,這些在在都擴充了『分散式』系統的定義。

Agile 軟體開發(Agile Software Development, ASD)促使革新及回應的協調—建立新的知識以提供商業的價值,並且快速地回應競爭的挑戰。嚴格依循常規的軟體方法論(Rigorous Software Methodologies, RSMs)是有用的,但對於一些問題領域其效用正在縮減中。由許多來自RSMs的技術,可以有效地應用在ASD方式上,但這兩者的框架及哲學則有所差異。Agile 的方式在探索新的領域上特別有用,並且對於那些以革新及創造力為核心的團隊具有增強的作用。

對於Kent Beck在XP首部曲Extreme Programming Explained: Embrace Change (Addison-Wesley, 2000, ISBN 0-201-61641-6)這本書的標題中,一般人都只是看到主標題,而忽略了其副標題。這些人,尤其是在大型組織中的管理階層,被extreme(終極、極端、極限)這個字嚇到了;而這個字的言外之意 :寫程式,就好像拿起他們的滑雪版,奮勇地往前衝。或者,他們管理的方式,是 迫使他們自己跳過extreme這個字,批評Programming這個字,並將其中的內容,貶為怪胎才會做的『機械性』動作。雖然在Kent書中,這些字,可能說的是程式設計,同時他也倡議這些extreme的實務作法,如測試自己的程式碼,環繞在XP周圍的策略議題,及所有其它的ASDEs,在在關心的都是『擁抱改變』。

Agile 的組織建構混亂,以抗衡其競爭者;首要的就是快速地建構變動,讓它的競爭對手沒有喘息的機會;其次,是快速地回應競爭對手改變市場的意圖。想想看,如果競爭對手的產品開發生命週期是12個月,而你卻需要18個月,此時你的感受會是如何?更甚者,每次你有了一個新的突破,競爭對手在他們的下一個產品週期立即追上,你的感受會如何?競爭對手一直在攻擊,而你只能採取守勢,你的感覺會如何?這是Agile 組織的本質—建構可以讓你生存,而讓你的競爭對手無法生存的變動。Silicon Graphics的 CEO Ed McCracken如此說「業界中的競爭對手,是我們在混亂環境中管理能力的來源」,「我們非但要構築變動, 實際上我們在一開始便積極地創造混亂—亦即藉此將潛在的競爭對手屏退在外。」(請參閱Marco Iansiti, Technology Integration: Making Critical Choices in a Dynamic World, Harvard Business School Press, 1997.)

Agile 的組織不只是回應變動,而是產生變動!

Agile 軟體開發的未來是什麼?

那麼,未來將會如何?某一程度而言,未來的商業環境勢必是維持動盪的狀態,我想嚴格依循常規的文化會面臨嚴峻的挑戰。不是有多少程序的簡化或文件的消減才能Agile 的問題—Agile 是種態度,一種認知:體認到世事是如此的錯綜複雜。然而,某一程度而言,執行者與管理者,仍然 希望世界是可以預測及規劃的,如此Agile 的文化及ASDEs將會很難落實。最終的分析結果,商業將逐漸但無可避免地集中在可以讓他們成功的作法上,而ASDEs將會逐漸在成功的軟體專案中貢獻更多。 嚴格依循常規的方法還是會持續存在,但是在這五年內,將會有更少的公司採用。