知易行難,軟體架構設計到底要解決什麼問題,說起來容易做起來難。架構師必須理清各利益相關方并了解他們的需求。換位思考(Empathy,同理心)是推動設計的引擎。隻有站在利益相關方的角度思考和處理問題,才能開發出更好的軟體。
5-001 找合适的人交談
利益相關方通常與軟體有商業利益關系,可能會為軟體付費或者從中獲利。利益相關方往往不止一人,與團隊合作不同于與個人合作。來自同一利益相關方的兩個人可能會提供不一緻甚至沖突的資訊,架構師需要了解整個團隊的想法,甚至需要幫助他們達成共識。本書中,作者給出其所開發的名為Lionheart項目的利益相關方及其想法如下圖所示:

5-002 建立利益相關方關系圖
利益相關方關系圖呈現了與軟體系統有關聯或受其影響的人,它将人與人之間的關系和互動進行可視化呈現。還能大緻展示不同利益相關方的動機,可利用它确定需要溝通的關鍵人物。
架構是為客戶服務的,如何確定架構能夠為客戶帶來價值呢?通用電氣的軟體架構師的辦法是運用 “ 以客戶為中心 ” 的設計流程。先搞清楚誰是客戶,他們想做什麼;然後将系統按照客戶的任務進行劃分。架構師需要了解每項任務的啟動步驟,以及哪裡容易出錯。這樣,由表及裡,確定深層結構能實作客戶價值,通用電氣将其稱之為 “ 客戶體驗架構 ”,設計流程如下:
1)觀察客戶在正常流程下如何完成任務,向對方提問,确定對客戶至關重要的事項,包括功能需求和品質屬性需求。
2)圍繞客戶需求設計系統并記錄在原型裡。原型應盡可能具有互動性,而不僅僅是流程圖。
3)盡早與客戶一起評審原型,確定對方真正了解新系統的變化,以及這些變化對他們的影響。
4)根據客戶評審會上的回報修改調整架構設計。
運用以上四個步驟,就能通過架構為客戶創造價值。作者在書中給出Lionheart項目的利益相關方關系圖如下:
右圖中可以看出:誰為軟體付費、誰使用軟體、哪些人處在關系圖的中心(有許多指入或指出的箭頭)、有哪些潛在的利益沖突,這些都是首先應該見的人。
5-003 了解業務目标
業務目标是利益相關方希望通過軟體實作的東西。系統的品質屬性、權衡取舍、技術債務都要以業務目标為基礎,常見的業務目标如下表所示:
主體 | 目标 |
個人 | 增加收入,擴大知名度,享受生活,擷取知識 |
組織 | 增加營收,實作利潤最大化,發展業務,成為市場上司者,提高穩定性,進入新市場,擊敗競争對手 |
員工 | 獲得工作意義,擷取知識,幫助使用者,成為專家 |
開發團隊 | 提升指定的品質屬性,降低成本,增加新功能,實施标準,縮短上市時間 |
國家/政府 | 安全,福利,社會責任,公民遵紀守法 |
5-003-01 記錄業務目标
業務目标應是可衡量的,有明确的成功标準。這樣的業務目标至少包含三個方面:
1)主體:特定的人或角色。如果利益相關方有名稱,就加上名稱。
2)結果:用可衡量的結果表達利益相關方的需求。如果系統成功,會帶來哪些變化?
3)背景:背景資訊有助于我們進一步了解利益相關方的需求。
本書作者基于Lionheart項目的利益相關方關系圖給出該項目的業務目标如下:
大多數系統隻要三到五個業務目标。目标太多難以了解和記憶。與多個利益相關方合作時,一定要标注目标的相對重要性,如:必須有(must have)或者最好有(nice to have)
5-003-02 幫助利益相關方描述業務目标
架構師應準備一些簡單的模闆,幫利益相關方用可衡量的方式表達需求。一種類似使用者故事的觀點填空模闆如下:
(利益相關方) + (利益相關方的需求) + (背景)
(雲頓市長)希望(降低30%的采購成本)因為(他不想消減其它基礎服務的預算)
架構師應與産品經理或其它業務相關方合作,确定系統的業務目标。如果他們也不能清楚地描述業務目标,架構師要與他們一起搞清楚,他們也要對項目負責。