知易行难,软件架构设计到底要解决什么问题,说起来容易做起来难。架构师必须理清各利益相关方并了解他们的需求。换位思考(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%的采购成本)因为(他不想消减其它基础服务的预算)
架构师应与产品经理或其它业务相关方合作,确定系统的业务目标。如果他们也不能清楚地描述业务目标,架构师要与他们一起搞清楚,他们也要对项目负责。