每一個軟件系統都提供兩個價值給利益相關者:表現和結構。軟件開發者應的確保這兩個價值儘可能高負責。然而很不幸,程序員不少只關心其中一個而忽略另外一個,甚至更不幸,他們可能關注的不是這兩個價值,留下沒有價值的系統程序員
軟件的第一個價值是他的表現,程序員被僱傭來幫利益相關者讓服務器來掙錢或省錢,實現這個的方式是依照功能規範或寫需求文檔,來寫代碼實現這些需求。當程序出問題時,程序員修bug。不少程序員相信這就是他們工做的所有,他們就是爲了實現功能和修bug而工做,但這是錯誤的。服務器
第二個價值必須和軟件這個詞一塊兒處理--一個由soft和ware組成的複合詞。ware意味着產品,soft就是第二價值--」架構「的所在的地方
軟件具備柔軟的特性,他打算用一種簡單的方法改變機器的行爲。爲了達到目的,軟件必須柔軟,可以很輕鬆地改變,當利益相關者想要改一個需求,改變就須要簡單而且能夠輕鬆實現,改需求的困難應該僅僅是改變的範圍,不是改變的形態。
範圍和形態都能驅動軟件開發成本上升,可是二者是不一樣的。這就是成本不隨需求改變的比例上升的緣由,這也是開發一年比一年更便宜的緣由。來自利益相關者的觀點,開發者僅僅只提供了一些形態上的粗略改變,來自開發者的觀點,老闆的需求愈來愈難。
問題固然是系統的架構,架構很差,後面的需求將會愈來愈難適合如今的架構架構
功能或架構,誰能提供更大的價值,誰在軟件開發中更重要,或者誰在添加需求中更能輕鬆修改系統。若是你問業務經理,他們可能以爲功能更重要,輪流問開發者,不少人也贊同這觀點,可是這是錯誤的,我能用一個極端的邏輯工具測試他是錯的。
若是你給我一個能運行,但不可能改變的系統,改需求就不能運行,這個系統將無用。
若是給我一個不能運行,但可以輕鬆修改的系統,我可讓他適應需求,而後運行起來。這個系統就有用了
你可能以爲這個例子不能讓人信服,畢竟沒有不能改變的項目,然而有些系統基本不可能改變,由於改變的成本超過了改變的好處。運維
爲了實現架構這一責任,咱們須要加入戰鬥,我也許該用奮鬥這個詞。坦白地說,基本上都是這樣說的。開發團隊必須爲能讓公司發展最好的東西而奮鬥。管理團隊,市場團隊,銷售團隊,運維團隊也是如此。都要奮鬥。
有效率的開發團隊迎面奮鬥。記住,做爲一個開發者,你就是利益相關者,你須要維護的軟件裏有你的利益。這是你任務的一部分,責任的一部分,也是爲何你被僱傭的主要緣由
若是你是架構師,這個挑戰將會是雙倍難度。架構的主要責任是系統的結構,,而不是開發功能,架構師創造一個容許快速開發,修改,擴展功能的架構。
記住,若是架構來晚了,系統將變得更難維護,修改對於部分或者整個系統最終將變得不可能。若是上述狀況發生,那說明軟件開發團隊沒有爲必要的東西付出足夠的努力。工具