介绍项目前期调研、需求分析阶段的工作

立项阶段

所谓立项就是公司内部进行研究、讨论决定要不要做这个事情,通常立项分成两个大类:

项目立项

相对比较简单,需求比较明确,就是客户提出来的这些需求,成本有人负担,因为他来找你做这个项目,是要付钱的,也就是承担了这部分费用。所以说在项目立项时考虑的东西就相对少一些,主要是考虑技术可行性,输出一个可行性的报告。当然也要综合考虑用户要求的,比如说技术、性能和工期,也会考虑公司的人力资源,能不能在客户要求时间段内如期完成。

产品立项

相对项目立项要复杂一些,成本由公司自己来负担,它的需求来源是多方面的,可能来自于市场的研究总结、业内人士业务的经验、产品经理对业务的研究和公司高层的一些战略规划,总之需求来源会比较广。把这些需求汇总之后才能提炼出产品真正的需求,一般来说对于业务功能要具有前瞻性。另外由于是公司自己承担成本,所以一定要去判断市场化可行性,也就是说推出这个产品市场是否买账,会有人付费,包括付费的规划有大,大概会是怎样的节奏。

还需要有市场竞争力的报告,研究很多的竞品,对手的一些研究,会有很多方面的内容,把这些内容综合起来之后,公司会组织相关的专家、领导去研判这个事情要不要去做。因为一但决定去做,就会涉及到人力、物力的投入。

架构师要做什么?

技术可行性研究

不是钱到位事情就一定干的了,受限于环境、技术储备以及人力成本等因素的考虑,总会有一些需求是目前暂存做不了的。

技术咨询

可能会有一些跟技术相关的疑问或问题,需要架构师做出咨询,给出一些明确的判断。这些疑问可能来自于客户,也可能来自于内部参与这个项目的同事。

概要技术方案

很多时候可能是客户需要,对方需要看我方能否有实力去做这个项目,这个时候就需要架构师输出概要的技术方案。另外公司产品去规划功能的时候也会需要这份技术方案。

架构师产出和匹配的能力

- 产出 能力
技术可行性研究 技术Demo、《技术可行性报告》 业务重难点识别能力、问题抽象能力、技术开发能力、业务和技术设计经验和文档编写能力
技术咨询 技术解答、技术讲解PPT 沟通能力、技术宣讲能力、业务重难点识别能力、问题抽象能力、技术开发能力、业务和技术设计经验以及文档编写能力。
概要技术方案 概要的技术方案说明 沟通能力、问题抽象能力、技术设计能力和文档编写能力。

前期调研阶段

架构师要做什么?

基本上跟立项阶段差不多,可能会增加:

  • 技术选型
  • 技术预研
- 产出 能力
技术选型 选型结果、选型对比说明和技术Demo测试报告 技术的广度和深度、技术研判断能力和文档编写能力。
技术预研 技术Demo 技术开发能力、新知识学习能力和技术研究能力。

需求调研阶段

简单点来说是产品人员去到客户那边了解真正需求,理解客户真实业务的阶段。在这个过程中会把客户提到的业务知识通过文档记录下来,回到公司后把这些资料传递给项目组其他成员。很多公司常常忽略这个阶段,实际上很多项目失败根源其实就在于需求调研没有做好。需求调研是整个项目的根,如果这个阶段做不好,那后续其实是在瞎做。因为在这个阶段决定了整个系统到底要做什么,挖掘客户需求的质量、多少决定了整个项目的成败,所以说这是一个非常重要的阶段。

派到客户那边的人员一定要业务经验丰富,最好有跟这个项目业务相关的背景,这样能够跟客户引起共鸣。沟通能力要好,不能简单的只当作一个传声桶。技术能力要比较好,以便引导客户采用最合理的方案。

架构师要做什么?

  • 技术咨询,偏重于多种方案比较,用于引导客户。
- 产出 能力
技术咨询 业务重难点识别能力、问题抽象能力、业务和技术设计能力。

需要分析阶段

有一部分架构师没有参与这个过程,从而导致了一些问题,比如说对业务理解不够,很多业务细节及要求不明确。在做架构设计时容易忽略很多东西,这样会造成后续对架构的反复修改调整,浪费人力物力。这个阶段对架构师来讲是一个非常重要的阶段。当产品人员从客户那边拿回来收集的资料后,需要在公司内部召集干系人一起分析需求。

架构师要做什么?

  • 理解业务,要深入、全面,要有场景化思考能力。
  • 识别重难点业务
  • 识别非功能需求和质量约束
  • 业务架构,尽量让产品去做
- 产出 能力
理解业务 业务经验、沟通能力和理解能力。
识别重难点业务 业务经验、沟通能力、理解能力和洞察力。
识别非功能需求和质量约束 《非功能需求和质量约束说明》,也可以放到《需求分析报告里面》 业务经验、技术设计经验和洞察力
业务架构 《业务架构说明》,参与或主导 业务经验和能力、沟通能力和文档能力。

高层架构设计阶段

架构设计往小了说可以当作是概要设计的一部分,在软件工程里面设计包含概要设计和详细设计,而架构设计是概要设计中的一个重要组成部分。要做好高层架构设计需要提前做好:技术预研、技术选型和系统业务分析。

这个阶段是从高层来设计系统的组成与结构,包含基本架构、技术架构、部署架构、安全架构等等。一般来说我们只要针对这些做概念级别的设计就可以,不需要做的特别细。

业务架构

从上面示例的图上可以看到:从上到下有一个依赖的关系,从左到右会有一些贯穿的关系。

技术架构

部署架构

安全架构

架构师需要做什么?

输出业务架构、技术架构、部署架构和安全架构等方案。

- 产出 能力
业务架构 《业务架构说明》,参与或主导 业务经验和能力、沟通能力和文档能力
技术架构 《系统整体技术架构说明》 技术经验、技术知识等广度和深度、技术前瞻性、决策能力、文档能力。
部署架构 《系统部署架构说明》 计算机软硬件和网络的综合知识、系统部署和运维能力、文档能力
安全架构 《系统整体安全架构说明》 处理安全问题方面的技术经验、计算机安全方面的知识、文档能力

概要设计阶段

在拿到需求分析报告之后一般要做技术预研和选型,要确定系统主要用一些什么样的技术,大概由哪些技术组合起来形成一个完整的技术框架。另外也要对整个业务结构梳理比较清楚,这些其实是前面阶段,也就是概要设计之前应该完成的工作。

架构师需要做什么?

划分服务、分层、划分包结构、开发架构设计、API设计、数据结构设计等。

- 产出 能力
划分服务 《系统服务划分说明》 业务经验和能力、技术设计能力、文档能力
分层 《XX业务实现层次划分说明》 技术实现经验和能力、技术设计能力、文档能力
划分包结构 《XX业务包架构说明》 技术实现经验和能力、技术设计能力、文档能力
开发架构设计 《开发规范说明》、《代码规范说明》、《XX示例Demo》 技术实现经验和能力、技术设计能力、文档能力
API设计 《API接口说明》、JavaDoc 技术实现经验和能力、API设计能力、文档能力
数据结构设计 《数据结构说明》、或《数据库设计说明》、E-R图等 技术实现经验和能力、数据库设计能力、文档能力