所谓的“开始就是结局”,要达到什么样的结局取决于什么的开始。 结局就是开始的地方。
——T.S.爱洛特,《四个四重奏》
佛说:人之所以痛苦,在于追求错误的东西
架构师是人不是神,尤其对新手而言。如果一开始就遗漏了功能或者制定了错误的质量属性目标,将面临的痛苦可能是客户的不满,项目的返工、同事的抱怨…,甚至导致项目的失败。
架构失败的因素有哪些?
一、关键性功能缺失
追求技术至上的架构师认为“架构师是不需要懂需求的”。在需求分析阶段,架构师未参与或者不重视需求分析和评审;或者,“这不就是个XX系统”,设计阶段过于轻敌,导致对需求不重视、理解不到位,没有完全把握客户的重点需求、质量要求、关键性约束。架构师一定要谨记“技术是为业务服务的”。
二、遗漏关键约束、非功能需求
在系统架构设计的过程中,架构师紧盯着功能列表而忽略了或没有考虑非功能性需求系统约束方面,从而导致架构的失败。
三、缺少关键实践及方法论
需求在不同的行业领域、不同的用户场景的重要性往往是不同的。用户需求的复杂性、多样性,导致架构师在做架构设计的时候,凭借经验决策,缺乏方法论的指导。
四、未验证架构的可行性并作出调整
整体的架构方案并没有进行充分的评审及实践验证。俗话说实践是检验真理的唯一标准,这需要架构师在架构设计完成后准备各视图场景下的验证方案,确保整体架构的可行性,一旦在过程中发现遗漏及风险及时干预并调整架构设计方案,如果已经进入到开发阶段,需要制定平滑的设计方案,尽可能的规避工作量损失并保证系统功能的全面支撑。
除了上述导致架构失败的因素外,在软件架构设计过程中,架构师也应该避免一下失败的因素:
- 理想与现实需要折中
- 为虚无的未来埋单而过度设计
- 过早做出关键性决策
- 客户说啥就是啥成为传话筒
- 埋头干活儿缺乏前瞻性
- 架构设计还要考虑系统可测性
- 架构设计是一个过程,不要企图一步到位