壹、作為技術領導者
壹名好的軟件架構師需要明白,作為領導者並不壹定要告訴開發人員做什麽。相反,好的架構師就像壹個導師,帶領開發團隊向同壹個技術願景前進。好的架構師會借助於講故事、影響力、引導沖突、構建信任等領導技能,將他們的架構願景變成現實。壹個好的領導者,同時也是壹個好的架構師。他/她會仔細聽取每個參與者的意見,通過與團隊的反饋互動調整他們的願景。
二、作為開發人員
壹個架構師同時又是壹個好的開發人員。通常,做出壹個良好的架構選擇需要權衡理想的架構狀態與軟件系統的當前狀態。例如,如果壹個問題更適合采用關系型數據庫來解決,那麽將文檔數據庫引入到系統中的做法是毫無道理的。壹個架構師如果不考慮技術選型與問題域之間的匹配度,那麽會很容易受到各種技術的誘惑——這也就是常見的“象牙塔式架構師”行為模式。
緩解這種情況的最佳方式是架構師多與開發人員待在壹起,花壹些時間在代碼上。了解系統的構建方式及系統的約束將幫助架構師在當下環境做出正確的選擇。
三、聚焦系統
經驗豐富的開發人員明白代碼只是軟件的壹個方面。為了讓代碼可運行,他們還需要了解代碼在生產環境中運行良好所需的其他重要質量屬性。他們需要考慮部署過程、自動化測試、性能、安全和可支持性等方面。開發人員可能以臨時的方式來實現這些質量屬性,而架構師不僅需要專註於了解代碼,還要了解並滿足不同利益相關者(如支持、安全和運營人員)的需求。壹個好的架構師需要專註於尋找那些能夠滿足不同利益相關者需求的解決方案,而不是選擇針對某壹個參與者的偏好或風格進行優化的工具或方法。
四、企業家思維
所有的技術選型都有相關的成本和收益,壹個好的架構師需要從這兩個角度考慮新的技術選型。成功的企業家願意承擔風險,不過也會尋求快速學習和快速失敗的方法。架構師也可以用類似的方式做出技術選型,收集真實世界中有關短期和長期成本的信息,以及他們可能意識到的好處。
這方面壹個很好的例子是,架構師避免承諾立即使用壹個在閱讀新文章時看到的工具或某壹會議上聽過的工具。相反,他們試圖通過架構調研來了解工具在其環境中的相關性,以收集更多信息。他們對於工具的選擇不是基於銷售量,而是考慮他們需要什麽以及這個工具所提供的價值。他們還會尋找這些工具背後的隱性成本,例如工具的支持情況(如文檔化程度、社區使用情況),工具可能帶來的約束或長期來看可能引入的額外風險。
五、權衡策略思維與戰術思維
許多團隊由壹些獨立的開發人員壹起構建軟件,而每個人都傾向於選擇自己最舒適或最有經驗的工具和技術。好的架構師持續關註可能有用的新技術、工具或方法,但不壹定立即采用它們。技術采用往往需要長期的考量。架構師將在團隊和組織層面尋求敏捷度(允許團隊快速采取行動)和對齊(保持足夠的壹致性)之間的良好平衡。建立自己的技術雷達這樣的練習是用戰略思維探索技術的壹個有用工具。
六、良好的溝通
架構師需要知道,有效溝通是建立信任和影響團隊以外成員的關鍵技能。他們知道不同群體使用不同的詞匯,而使用技術術語和描述與業務人員溝通將會變得比較困難。與其談論模式、工具和編程概念,架構師需要使用聽眾熟悉的詞匯與之交流,諸如風險回報、成本和收益等。這比單純使用技術詞匯進行溝通來得更好。架構師還需要認識到團隊內部溝通與外部溝通同樣重要,可以使用圖表和小組討論的方式來建立和完善技術願景,並書面記錄之。