软件架构的角色是什么,需要哪类技能,以及为什么编码、指导和合作很重要。
image.png

1. 架构驱动力

这个角色首先要理解业务目标和管理架构驱动力,其中包括需求(功能性需求和非功能性需求)和环境的限制。软件项目经常纠缠于询问用户需要什么功能,却很少问他们有哪些非功能性需求(或质量属性)。有时候利益相关者会告诉我们“系统一定要快”,这太主观了。非功能性需求和限制往往对软件架构有巨大的影响,因此明确地将其纳入软件架构的角色,可以保证它们被考虑到。

2. 设计软件

3. 技术风险

4. 架构演化

5. 编写代码

6. 质量保证

从开发者到架构师

经验是一个好的评价标准,但你需要看得更深

你需要从软件架构师身上寻找许多不同的品质,他们过去的经验往往能很好地评判他们承担这个角色的能力。既然软件架构师是一个变化的角色,你就要看得更深,才能理解参与度、影响力、领导力和责任感的水平,这些在多个不同领域都已经论证过。结合我对软件架构角色的定义,每个部分都能够且应该单独评估。毕竟,软件设计过程看起来相当简单,要做的就是搞清楚需求,设计一个能满足它们的系统。但在现实中可不是这么简单,人们承担的软件架构角色可能千差万别。比如下面这些。
1.架构驱动力:捕捉和挑战一套复杂的非功能需求,还是简单地假设它们的存在。
2.设计软件:从零开始设计一个软件系统,还是扩展已有的。
3.技术风险:证明你的架构能够工作,还是盲目乐观。
4.架构演化:持续参与和演化你的架构,还是把它交给“实现团队”。
5.编写代码:参与交付的实践部分,还是袖手旁观。
6.质量保证:保证质量并选择标准,还是反其道而行之或无所作为。
其中大部分可以归结为是承担寻找方案的责任还是推诿问题。