81. 精心選擇有效技術,絕不輕易拋棄
軟體架構師工作很大的一部分,是要選擇用以攻克難題的合適技術。精心選擇熟悉的武器,不到萬不得已,不要輕易排序它們。
選擇新技術雖然有風險,但其價值在於往往能為你帶來質的飛躍。不過仍然要謹慎選擇。
82. 客戶的客戶才是你的客戶!
想象你的客戶並不是你的客戶,而你客戶的客戶才是你的客戶,這樣你的客戶的客戶贏了,你的客戶也就贏了。
例如,你為某個機械開發一個網站,你要想到使用這個網站的終端使用者!
如果你的客戶有意無意的忽視他們的客戶所看重的重要事項,這個時候你就需要考慮與你的客戶溝通、甚至放棄這個項目。
83. 事物發展總會出人意料
設計是一個不斷髮現的過程,不要開始試圖把設計做的很完美。在開發過程中,可能不斷有一些微小的變化,這些變化積累起來就需要對設計進行一次大的變更,如果還是試圖維持住已經走樣的設計,就會越破壞原設計。
84. 選擇彼此間可協調工作的架構
軟體架構是軟體系統的基礎,選擇架構時,不僅要考慮每個架構自身的品質和特性,還要關注共同構成系統的各個架構之間是否能和諧共處。而且後面是否方便地向其中加入新的架構。即選擇彼此之間沒有重疊,而且開放、簡潔、精專的架構。
比較好的架構專註於解決某個獨立的邏輯領域,且不會侵入其他必須架構的領域關注面。精簡、包容、靈活。
85. 著重強調項目的商業價值
利益相關人士往往缺乏軟體工程方面的知識,給他們講軟體架構,經常是對牛彈琴,他們認為架構是虛無縹緲的,所以,在為項目爭取資金時,要著力強調項目的商業價值,利益相關者一般對這個比較感興趣,而且更容易達成一致。
將架構提案打造為典型的商業項目步驟:
a)形成價值陳述。即你的決策摘要,用以說明組織的業務為何要採用特定的軟體架構。重點要放在該架構如何提高生產力、改進業務效率等。不要強項這種技術如何高明。
b)建立量化的度量標準。量化越具體,項目也將越具有說服力,越能讓人相信好的架構可以帶來豐厚回報。
c)回過頭來關聯傳統商業的衡量方式。如果能將技術分析轉化為財務資料,則更有說服力。
d)知道該在哪裡停止。準備好一張路線圖,用以捕獲遠景目標,清楚地知道每一個裡程碑將帶來的價值。讓利益相關者自己決定在哪裡停止。如果每處的商業價值都十分顯著,就可能獲得持續不斷的資金支援。
e)尋找恰當的時機。
86. 不僅僅只控制碼,也要控制資料
在架構規划過程中,資料移轉部分經常被架構師忽略。最後資料移轉往往是作為一項事後補救描述,而且整個過程由手工完成,相當脆弱。對資料方案和資料內容的管理,應當儘早無縫整合到自動化的構建和測試過程中,還必須提供回退功能.
87. 償還技術債務
當已投入實用的項目出現了問題,往往會出現兩個選擇:
a)花合適的時間進行“一次做對”,可能包含一些重構之類的工作
b)走“捷徑”,完全為了滿足當前的bug而填的一些代碼,可以很快的推出修改的產品。
應該盡量選擇第一個方案,第二個方案會不斷的積累技術債務,越往後就越難以改變。
不過如果時間很緊迫,可以採用第二個方案,但改完之後,不能就此止步,後續仍然要考慮這個技術債務,在適當的時候清理了它。
88. 不要急於求解
首先看看是否可以改變問題。
89. 打造上手的系統
我們是工具製造者,我們製造的系統一定要協助人們做事,否則就推動存在的意義。
“上手”即容易使用的工具。
90. 找到並留住富有激情的問題解決者
優秀的團隊是項目成功非常重要的原因!也要保持團隊的穩定!
打造健康的工作環境。好的開發人員,常常能從認可中獲得強烈的激勵。
提防批評過度,批評過度可能會扼殺開發人員的創造力,降低其生產力。可以提出建設性的批評建議,但不要強求每個解決方案看起來好像都出自你手。
以正確的方式經營Team Dev。如同團隊成員並肩作戰,對他們一視同仁,培養團隊精神等。
91. 軟體並非真實存在
軟體是我們創造的虛擬物,相對於物理世界中的對應物,更易於改變。所以產品的需求可能會不斷髮生變化,計劃不斷調整。
92. 學習新語言
語言套件括各方面的,如與業務人員交流的語言,與程式員交流的語言,以及擴大自己的知識面需要瞭解的語言等。
93. 沒有永不過時的解決方案
今天的解決方案一定會成為明天的問題,沒有“永不過時”的解決方案。
94. 使用者接受度問題
去瞭解與衡量接受度問題帶來的威脅,並朝能減輕這些威脅的方向開展工作。比如找代表使用者利益的項目擁戴者,與使用者進行直接的溝通並影響使用者的接受度。(接受度:如使用者不想接受一個新的系統,人們不願意實施新的系統等)
95. 清湯的重要啟示
清湯是不斷精練與濃縮才成的,軟體架構也應該學習清湯的製作方法。
96. 對終端使用者而言,介面就是系統
要讓介面易用,好的介面能協助使用者提高生產力,使用者會因此更加喜歡我們的產品。
使用者互動實際和健壯性、效能等一樣重要的。
97. 優秀軟體不是構建出來的,而是培育起來的
從小的可工作系統開始,逐漸把它推向成功的目標。