本節書摘來自異步社群《靈活軟體開發:原則、模式與實踐(c#版.修訂版)》一書中的第1章1.2節 原則,作者【美】robert c. martin , micah martin,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。
1.2 原則
靈活軟體開發:原則、模式與實踐(c#版.修訂版)
從上述的價值觀中引出了下面的12條原則,它們是靈活實踐差別于重型過程的特征所在。
(1) 我們最優先要做的是通過盡早地、持續地傳遞有價值的軟體來使客戶滿意。《mit sloan管理評論》雜志刊登過一篇論文,分析了對于公司建構高品質産品方面有幫助的軟體開發實踐1。該論文總結了很多對于最終系統品質有重要影響的實踐。其中一個實踐表明,盡早傳遞具有部分功能的系統和系統品質之間具有很強的相關性。該論文指出,初期傳遞的系統中所包含的功能越少,最終傳遞的系統的品質就越高。該論文的另一項發現是,以逐漸增加功能的方式經常性地傳遞系統和最終品質之間有非常強的相關性。傳遞得越頻繁,最終産品的品質就越高。
靈活實踐會盡早地、經常地進行傳遞。我們努力在項目剛開始的幾周内就傳遞一個具有基本功能的系統。然後,我們努力堅持每幾周就傳遞一個功能漸增的系統。如果客戶認為目前的功能已經足夠了,客戶可以選擇把這些系統加入到産品中。或者,他們可以隻是選擇再檢查一遍已有的功能,并指出他們想要做的改變。
(2) 我們歡迎需求的變化,即使到了開發後期。靈活過程能夠駕馭變化,為客戶創造競争優勢。這是一個關于态度的聲明。靈活過程的參與者不懼怕變化。他們認為改變需求是好事情,因為那些改變意味着團隊已經學到了更多如何滿足客戶需要的知識。
靈活團隊會非常努力地保持軟體結構的靈活性,這樣當需求變化時,對于系統造成的影響是最小的。在本書的後面部分,我們會學習一些面向對象設計的原則、模式和實踐,這些内容會幫助我們維持這種靈活性。
(3) 經常傳遞可以工作的軟體,從幾個星期到幾個月,時間間隔越短越好。我們傳遞可以工作的軟體,并且盡早地、經常性地傳遞它。我們不贊成傳遞大量的文檔或者計劃。我們認為那些不是真正要傳遞的東西。我們關注的目标是傳遞滿足客戶需要的軟體。
(4) 在整個項目開發期間,業務人員和開發人員必須朝夕工作在一起。為了能夠以靈活的方式進行項目的開發,客戶、開發人員以及利益相關者之間就必須要進行有意義的、頻繁的互動。軟體項目不像發射出去就能夠自動導航的武器,必須要對軟體項目持續不斷地進行引導。
(5) 依靠鬥志高昂的人建構項目。給他們提供所需的環境和支援,并且信任他們能夠完成工作。人是項目取得成功的最重要的因素。所有其他的因素(過程、環境、管理等)都被認為是次要的,當它們對人有負面的影響時,就要對它們進行改變。
(6) 在團隊内部,最有效率也最有效果的資訊傳達方式,就是面對面的交談。在靈活項目中,人們之間互相交談。首要的溝通方式就是人與人之間的互動。書面文檔會按照和軟體一樣的時間安排進行編寫和更新,但是僅在需要時才這樣做。
(7) 可以工作的軟體是進度主要的度量标準。靈活項目通過度量目前滿足客戶需求的軟體量來度量開發進度。他們不是根據所處的開發階段、已經編寫的文檔總量或者已經建立的基礎設施代碼的數量來度量開發進度。僅當30%的必需功能可以工作時,才可以确定進度完成了30%。
(8) 靈活過程提倡可持續開發。出資人、開發者和使用者應該總是保持穩定的開發速度。靈活項目不是50米短跑;而是馬拉松長跑。團隊不是以全速啟動并試圖在項目開發期間維持那個速度;相反,他們以快速但是可持續的速度行進。
跑得過快會導緻團隊精力耗盡、抄捷徑以緻崩潰。靈活團隊會測量他們自己的速度。他們不允許自己過于疲憊。他們不會借用明天的精力來在今天多完成一點工作。他們工作在一個可以保證在整個項目開發期間保持最高品質标準的速度上。
(9) 對卓越技術和良好設計的不斷追求有助于提高靈活性。高的産品品質是擷取高的開發速度的關鍵。保持軟體盡可能幹淨、健壯是快速開發軟體的途徑。因而,所有的靈活團隊成員都緻力于隻編寫他們能夠編寫的最高品質的代碼。他們不會制造混亂然後告訴自己等有更多的時間時再來清理它們。如果他們在今天制造了混亂,就會在今天把混亂清理幹淨。
(10) 簡單——盡量減少工作量的藝術是至關重要的。靈活團隊不會試圖去建構那些華而不實的系統,他們總是更願意采用和目标一緻的最簡單的方法。他們并不看重對于明天會出現的問題的預測,也不會在今天就對那些問題進行防衛。相反,他們在今天以最高的品質完成最簡單的工作,并深信如果在明天發生了問題,也會很容易進行處理。
(11) 最好的構架、需求和設計都源自自我組織的團隊。靈活團隊是自我組織的團隊。責任不是從外部配置設定給單個團隊成員,而是配置設定給整個團隊,然後再由團隊來确定履行職責的最好方法。
靈活團隊的成員共同來解決項目中所有方面的問題。每一個成員都具有項目中所有方面的參與權力。不存在某個團隊成員僅對系統構架、需求或者測試負責的情況。整個團隊共同承擔那些職責,每一個團隊成員都能夠影響它們。
(12) 每隔一定時間,團隊都要總結如何更有效率,然後相應地調整自己的行為。靈活團隊會不斷地對團隊的組織方式、規則、約定和關系等進行調整。靈活團隊知道團隊所處的環境在不斷地變化,并且知道為了保持團隊的靈活性,就必須要随環境一起變化。
1“product-development practices that work: how internet companies build software”mit sloan management review, winter 2001, reprint number 4226。
本文僅用于學習和交流目的,不代表異步社群觀點。非商業轉載請注明作譯者、出處,并保留本文的原始連結。