敏捷開發智慧敏捷系列之三:做不做架構設計?
緣起
甲:“敏捷不應該寫架構設計,應該每個迭代都是相同的,才能達到自相似性(這是Ken Shweber說的)。”
乙:“如果不寫架構設計,很容易返工,早晚還得重來。”
甲:“大不了重構,這是敏捷開發重要的實踐。”
乙:“重構?重構的成本很高的,做幾個迭代,後面重構都重構不過來了。”
甲:“架構設計寫了很容易過度設計,而且在編碼的時候還很容易全部推翻重來;。”
……
這個架構文件要不要寫呢?寫,為什麼?不寫,為什麼?寫,怎麼寫?不寫,怎麼不寫?
為什麼敏捷不做架構設計?
先把話說絕點,敏捷就是不寫架構設計。那為什麼不寫架構設計?
還是為了減少浪費。
敏捷有兩個理由認為寫架構設計是浪費時間。
第一,業務需求是多變的
第二,架構設計很難判斷是否正確、完備。這個本人也很有體會,本來以為很好的設計,到了編碼的時候發現不是那麼回事,這時候就得從頭翻騰。評審一下如何?可惜,除了最終的軟體,多數需求、架構、測試用例……都很難評審,評審半天,問題還是很多。
敏捷的這些假設,整體上非常普遍,可以說是在嘗試“做好架構”而不得之後的妥協。
不在那些總是改來該去,還不知道是否可行的東西上浪費時間,是敏捷不做架構的出發點。
怎樣寫這個架構文件?
但是如果徹底不寫架構設計,又可能返工,怎麼辦呢?當然是本著“最小浪費”原則來做架構設計
下面是一些寫和不寫的內容:
寫:相對穩定不變的,重構成本很高的,能看出對錯的
不寫:概念性的那不太準的,很容易擴充套件的,說不清對錯的
具體要寫什麼不寫什麼,很大程度上要受到業務穩定性、技術的先進性、人員能力等各方面的影響。
所以,所有架構文件的所有寫法,在每個企業都不相同,不應該問“敏捷開發應該怎樣寫架構文件?”,而是應該問“如果我的業務、技術、人員如此,應該怎樣寫架構文件?”,而若能這樣發問,答案肯定可以自己找到了。
智慧敏捷的一個本質方法,是要去理解敏捷這樣做的目的是什麼,而不是敏捷應該怎樣做。
倘若日後出現了先進的架構方法,或許架構就變成一種很容易做、很容易評審、很容易變動的東西,那時候就是另外一種說法了。但敏捷在架構設計這件事情上的本質目標卻永遠不變:減少浪費。
相關推薦
敏捷開發日常跟進系列之三:故事板,看板
這是敏捷開發日常跟進系列的第三篇。 (欄目目錄)故事板和看板其實不是一個東西,前者是最初的敏捷開發裡邊的東西,受到了後者的啟發產生的;而後者是製造業的東西,具體內容請參考末尾的百度百科。但是在敏捷開發裡邊提到這兩樣東西,可以認為大致相同。故事板簡單說,故事板是展示迭代中的使用
敏捷開發日常跟進系列之三 故事板 看板
這是敏捷開發日常跟進系列的第三篇。 (欄目目錄)故事板和看板其實不是一個東西,前者是最初的敏捷開發裡邊的東西,受到了後者的啟發產生的;而後者是製造業的東西,具體內容請參考末尾的百度百科。但是在敏捷開發裡邊提到這兩樣東西,可以認為大致相同。故事板簡單說,故事板是展示迭代中的使用者
敏捷開發產品管理系列之七:Product Owner團隊
目的在之前的《Product Servant》一篇中曾經提到,作為產品經理或產品總監,都應該有自己的方式來根據市場和使用者情況來管理產品的走向,其中前者更傾向於具體的功能,而後者則更傾向於市場方向的競爭力;前者要求細節,後者要求高度。那麼,這兩個人到底誰是傳統意義上的Pro
敏捷開發使用者故事系列之四:優先順序排序
這是敏捷開發使用者故事系列的第四篇。(欄目目錄)優先順序排序聽起來是一個很簡單的工作,一個欄位無外乎“重要/一般……”,調整一下然後按排序,就出來了。但其實裡邊有不少名堂:誰應該負責排序工作?誰最終拍板?研發因素要不要考慮?需求依賴關係導致的順序如何處理?持續交付的考慮?商業
敏捷開發使用者故事系列之五:使用者故事的分類
這是敏捷開發使用者故事系列的第五篇。(欄目目錄)引子在之一、之二、之三中,我們曾經提到了“作為一個……可以……以便……”的使用者故事描述方式,還提到應該如何描述使用者故事,才能更好地反映客戶價值。下面請嘗試一下描述這兩個故事:1. 如果把“儲存按鈕”統一放在頁面上端而非下面,
敏捷開發績效管理系列之八:阿米巴經營之序言
李彥巨集將狼性文化定義為敏銳的嗅覺、不屈不撓奮不顧身的進攻精神,群體奮鬥。他同時表示將淘汰小資,他將小資定義為有良好背景,流利英語,穩定的收入,信奉工作只是人生的一部分,不思進取,追求個人生活的舒適才是全部的人。“要讓所有員工更明確如果想找一個穩定工作不求有功但求無過的混日子,請現在就離開,否則我們這一艘大船
大數據系列之三:大數據體系架構的重要裏程碑
park con 再次 data 設計 src 分享圖片 http 豐田 歐凱慣例:引子 世界上唯一不變的就是變化,大數據的架構也不例外。 這次變化的推動者,多是一些大的商業公司! 首發地址 --- Teradata 美國天睿 Teradata這家公司其實挺陌生的,但
敏捷開發智慧敏捷系列之三:做不做架構設計?
緣起 甲:“敏捷不應該寫架構設計,應該每個迭代都是相同的,才能達到自相似性(這是Ken Shweber說的)。” 乙:“如果不寫架構設計,很容易返工,早晚還得重來。” 甲:“大不了重構,這是敏捷開發重要的實踐。” 乙:“重構?重構的成本很高的,做幾個迭代,後面重構都重構
敏捷開發智慧敏捷系列之五:定不定流程和模板?
這是敏捷開發智慧敏捷的第五篇。(之一,之二,之三,之四,之五,之六)緣起(立項時)甲:“你們的設計文件打算怎麼寫?”乙:“到時候再說。”甲:“應該有規範的開發流程和模板,才能寫好設計文件。”乙:“預先定義的流程和模板未必適用,敏捷開發崇尚推遲決策,只有在具體工作之前才能決定是
初識Redis系列之三:Redis支持的數據類型及使用
ted print 數據類型 eight 排序 sorted ring hang 無序 支持的數據類型有五種: string(字符串)、hash(哈希)、list(列表)、set(集合)及zset(sorted set:有序集合); 下面分別對這幾種類型進行簡單的Redis
緩存系列之三:redis安裝及基本數據類型命令使用
pytho children tile 指令 sed eject 檢測 install 文件的 一:Redis是一個開源的key-value存儲系統。與Memcached類似,Redis將大部分數據存儲在內存中,支持的數據類型包括:字符串、哈希表、鏈表、集合、有序集合以及基
Dapper系列之三:Dapper的修改與刪除
幫助 一個 。。 講解 復制 upd font 希望 update Dapepr的Update和Delete 上兩篇文章我們介紹Dapper中添加和查詢。本篇文章我們繼續講解修改和刪除。。。。。如果本篇文章看不懂,請看閱讀上兩篇Dapper系列相關文章Update
Https系列之三:讓服務器同時支持http、https,基於spring boot
signed 默認 gfs proc idl clas 兩種方法 .... gpg Https系列會在下面幾篇文章中分別作介紹: 一:https的簡單介紹及SSL證書的生成二:https的SSL證書在服務器端的部署,基於tomcat,spring boot三:讓服務器同時
Office 365 系列之三:Office 365 初體驗
office365 註冊office 365 試用office 365 在上一章節中我們已經成功申請註冊全球版微軟 Office 365 E5版本了,試用期為 30 天。接下來跟大家一起檢查下具備哪些服務和訂閱,怎麽去查看並確保各種服務是正常的。登陸 Office 365 管理中心,如下
Exchange 2013系列之三:網絡及先決條件準備
Windows Exchange AD 這裏僅以ExchCas01服務器舉例。打開網絡和管理中心,右鍵Manage網卡,選擇屬性;選擇IPV4,點擊屬性;輸入IP地址、子網掩碼及網關,DNS指向域控服務器,點擊確定;右鍵Heart網卡,點擊屬性;選擇IPV4,點擊屬性;因為心跳網絡只用於虛擬機之間
spring boot 系列之三:spring boot 整合JdbcTemplate
closed com context boot pin pan url wired ace 前面兩篇文章我們講了兩件事情: 通過一個簡單實例進行spring boot 入門 修改spring boot 默認的服務端口號和默認context path 這篇文章我們來看下怎
Java分析系列之三:jstat命令的使用及VM Thread分析
前面提到了一個使用jstack的shell指令碼,通過命令可以很快地定位到指定執行緒對應的堆疊資訊。 目錄 [隱藏] 1 使用jstat命令 2 JVM記憶體模型 3 JVM記憶體引數設定 3.1 堆記憶體設定 3.2 非堆記憶體設定
Kubernetes系列之三:部署你的第一個應用程式到k8s叢集
部署你的第一個應用程式到k8s叢集 看到這裡,求知慾飢渴難耐的你一定在想,怎麼部署的我們應用程式到叢集裡面去呢?來個簡單的,只需要兩步:(這裡本文使用nginx映象當我們的應用程式,因為nginx 簡單,執行起來後直接可以用瀏覽器訪問網頁了。) 第一步:在master 節點上建立一個
Java開發公眾號系列教程(三):微信js-sdk多圖片上傳,支援預覽,刪除
用過微信的人都知道,日常發表朋友圈圖文動態時,可以選擇多圖片,圖片右上角有個灰色的刪除圖示,可以對即將要發表的照片資訊進行預覽和刪除。今天筆者通過微信js-sdk介面給大家把這個實現過程分享出來。 一、主體思路 微信js-sdk上傳介面支援單次最多選擇9張圖片,我們要實現的就是跟微
Docker入門系列之三:如何將dockerfile製作好的映象釋出到Docker hub上
這個系列的前兩篇文章,我們已經把我們的應用成功地在Docker裡通過nginx運行了起來,並且用dockerfile裡製作好了一個映象。 Docker入門系列之一:在一個Docker容器裡執行指定的web應用 Docker入門系列之二:使用dockerfile製作包含指定web應用的映象 本