产品与架构
# 立项阶段
所谓立项就是公司内部进行研究、讨论决定要不要做这个事情,通常立项分成两个大类:
# 项目立项
相对比较简单,需求比较明确,就是客户提出来的这些需求,成本有人负担,因为他来找你做这个项目,是要付钱的,也就是承担了这部分费用。所以说在项目立项时考虑的东西就相对少一些,主要是考虑技术可行性,输出一个可行性的报告。当然也要综合考虑用户要求的,比如说技术、性能和工期,也会考虑公司的人力资源,能不能在客户要求时间段内如期完成。
# 产品立项
相对项目立项要复杂一些,成本由公司自己来负担,它的需求来源是多方面的,可能来自于市场的研究总结、业内人士业务的经验、产品经理对业务的研究和公司高层的一些战略规划,总之需求来源会比较广。把这些需求汇总之后才能提炼出产品真正的需求,一般来说对于业务功能要具有前瞻性。另外由于是公司自己承担成本,所以一定要去判断市场化可行性,也就是说推出这个产品市场是否买账,会有人付费,包括付费的规划有大,大概会是怎样的节奏。
还需要有市场竞争力的报告,研究很多的竞品,对手的一些研究,会有很多方面的内容,把这些内容综合起来之后,公司会组织相关的专家、领导去研判这个事情要不要去做。因为一但决定去做,就会涉及到人力、物力的投入。
# 架构师要做什么?
技术可行性研究
不是钱到位事情就一定干的了,受限于环境、技术储备以及人力成本等因素的考虑,总会有一些需求是目前暂存做不了的。
技术咨询
可能会有一些跟技术相关的疑问或问题,需要架构师做出咨询,给出一些明确的判断。这些疑问可能来自于客户,也可能来自于内部参与这个项目的同事。
概要技术方案
很多时候可能是客户需要,对方需要看我方能否有实力去做这个项目,这个时候就需要架构师输出概要的技术方案。另外公司产品去规划功能的时候也会需要这份技术方案。
# 架构师产出和匹配的能力
- | 产出 | 能力 |
---|---|---|
技术可行性研究 | 技术Demo、《技术可行性报告》 | 业务重难点识别能力、问题抽象能力、技术开发能力、业务和技术设计经验和文档编写能力 |
技术咨询 | 技术解答、技术讲解PPT | 沟通能力、技术宣讲能力、业务重难点识别能力、问题抽象能力、技术开发能力、业务和技术设计经验以及文档编写能力。 |
概要技术方案 | 概要的技术方案说明 | 沟通能力、问题抽象能力、技术设计能力和文档编写能力。 |
# 前期调研阶段
# 架构师要做什么?
基本上跟立项阶段差不多,可能会增加:
- 技术选型
- 技术预研
- | 产出 | 能力 |
---|---|---|
技术选型 | 选型结果、选型对比说明和技术Demo测试报告 | 技术的广度和深度、技术研判断能力和文档编写能力。 |
技术预研 | 技术Demo | 技术开发能力、新知识学习能力和技术研究能力。 |
# 需求调研阶段
简单点来说是产品人员去到客户那边了解真正需求,理解客户真实业务的阶段。在这个过程中会把客户提到的业务知识通过文档记录下来,回到公司后把这些资料传递给项目组其他成员。很多公司常常忽略这个阶段,实际上很多项目失败根源其实就在于需求调研没有做好。需求调研是整个项目的根,如果这个阶段做不好,那后续其实是在瞎做。因为在这个阶段决定了整个系统到底要做什么,挖掘客户需求的质量、多少决定了整个项目的成败,所以说这是一个非常重要的阶段。
派到客户那边的人员一定要业务经验丰富,最好有跟这个项目业务相关的背景,这样能够跟客户引起共鸣。沟通能力要好,不能简单的只当作一个传声桶。技术能力要比较好,以便引导客户采用最合理的方案。
# 架构师要做什么?
- 技术咨询,偏重于多种方案比较,用于引导客户。
- | 产出 | 能力 |
---|---|---|
技术咨询 | 无 | 业务重难点识别能力、问题抽象能力、业务和技术设计能力。 |
# 需要分析阶段
有一部分架构师没有参与这个过程,从而导致了一些问题,比如说对业务理解不够,很多业务细节及要求不明确。在做架构设计时容易忽略很多东西,这样会造成后续对架构的反复修改调整,浪费人力物力。这个阶段对架构师来讲是一个非常重要的阶段。当产品人员从客户那边拿回来收集的资料后,需要在公司内部召集干系人一起分析需求。
# 架构师要做什么?
- 理解业务,要深入、全面,要有场景化思考能力。
- 识别重难点业务
- 识别非功能需求和质量约束
- 业务架构,尽量让产品去做
- | 产出 | 能力 |
---|---|---|
理解业务 | 无 | 业务经验、沟通能力和理解能力。 |
识别重难点业务 | 无 | 业务经验、沟通能力、理解能力和洞察力。 |
识别非功能需求和质量约束 | 《非功能需求和质量约束说明》,也可以放到《需求分析报告里面》 | 业务经验、技术设计经验和洞察力 |
业务架构 | 《业务架构说明》,参与或主导 | 业务经验和能力、沟通能力和文档能力。 |
# 高层架构设计阶段
架构设计往小了说可以当作是概要设计的一部分,在软件工程里面设计包含概要设计和详细设计,而架构设计是概要设计中的一个重要组成部分。要做好高层架构设计需要提前做好:技术预研、技术选型和系统业务分析。
这个阶段是从高层来设计系统的组成与结构,包含基本架构、技术架构、部署架构、安全架构等等。一般来说我们只要针对这些做概念级别的设计就可以,不需要做的特别细。
# 业务架构
从上面示例的图上可以看到:从上到下有一个依赖的关系,从左到右会有一些贯穿的关系
# 技术架构
# 部署架构
# 安全架构
# 架构师需要做什么?
输出业务架构、技术架构、部署架构和安全架构等方案。
- | 产出 | 能力 |
---|---|---|
业务架构 | 《业务架构说明》,参与或主导 | 业务经验和能力、沟通能力和文档能力 |
技术架构 | 《系统整体技术架构说明》 | 技术经验、技术知识等广度和深度、技术前瞻性、决策能力、文档能力。 |
部署架构 | 《系统部署架构说明》 | 计算机软硬件和网络的综合知识、系统部署和运维能力、文档能力 |
安全架构 | 《系统整体安全架构说明》 | 处理安全问题方面的技术经验、计算机安全方面的知识、文档能力 |
# 概要设计阶段
在拿到需求分析报告之后一般要做技术预研和选型,要确定系统主要用一些什么样的技术,大概由哪些技术组合起来形成一个完整的技术框架。另外也要对整个业务结构梳理比较清楚,这些其实是前面阶段,也就是概要设计之前应该完成的工作。
# 架构师需要做什么?
划分服务、分层、划分包结构、开发架构设计、API设计、数据结构设计等。
- | 产出 | 能力 |
---|---|---|
划分服务 | 《系统服务划分说明》 | 业务经验和能力、技术设计能力、文档能力 |
分层 | 《XX业务实现层次划分说明》 | 技术实现经验和能力、技术设计能力、文档能力 |
划分包结构 | 《XX业务包架构说明》 | 技术实现经验和能力、技术设计能力、文档能力 |
开发架构设计 | 《开发规范说明》、《代码规范说明》、《XX示例Demo》 | 技术实现经验和能力、技术设计能力、文档能力 |
API设计 | 《API接口说明》、JavaDoc | 技术实现经验和能力、API设计能力、文档能力 |
数据结构设计 | 《数据结构说明》、或《数据库设计说明》、E-R图等 | 技术实现经验和能力、数据库设计能力、文档能力 |