半个月搞定中型复杂系统?不是梦!

203 阅读7分钟

作为一名后端工程师,你可能已经有了三到五年的工作经验,参与过一些项目的开发和维护,积累了一定的技术能力和项目经验。现在,你面临着一个新的挑战:如何从零到一构建一个中型复杂系统,并带领一个五人的团队完成这个任务?这个任务可能让你感到既兴奋又紧张,因为这不仅考验你的技术水平,还考验你的管理能力和架构思维。你可能会有很多疑问和困惑:如何确定系统的需求和目标?如何设计系统的架构和模块?如何分配和协调团队的工作?如何保证系统的质量和性能?如何应对需求变更和问题解决?等等。

如果你有这些疑问和困惑,那么恭喜你,你已经迈出了从技术专家向技术管理者转变的第一步。在这篇文章中,我将以技术管理者和架构设计者的角度,分享我在从零到一构建中型复杂系统的过程中遇到的问题和解决方案,希望能给你一些启发和帮助。

• 需求收集:通过与用户或利益相关者进行访谈、问卷、观察等方式,了解他们对系统的期望和需求,包括功能需求、非功能需求、业务规则等。

• 需求分析:通过对收集到的需求进行整理、分类、优先级排序、验证等方式,形成一个清晰、完整、一致、可度量的需求文档,用来指导后续的设计和开发。

• 需求变更管理:通过建立一个需求变更控制机制,用来处理在项目过程中可能出现的需求变化或冲突,保证需求文档的及时更新和一致性。

注:需求部分如果项目有产品经理,由产品经理进行把控,开发只需要参加需求评审和流程配合,开发可从以下流程开始介入

• 系统背景目标:详细描述系统的变更背景,为什么要做这个系统,当下遇到的问题是什么,变更的⽬标是什么以及应该怎样衡量结果。

• 系统方案概述:简要概括你的方案思路,包括方案优点,方案缺点,如果有多个方案,均须列出,并对比优缺点,以便技术评审时选择评定。

• 系统架构设计:通过对系统进行分解、抽象、封装等方式,定义系统的高层结构和组织方式,包括系统的组件或模块、接口、通信协议、数据流等。重点考虑:可行性、复杂性、完备性(逻辑、边界周全情况)、可靠性、可⽤性、可验证性、扩展性、维护性

• 系统接口设计:上下游以及本系统: 1. 有新增/更改接⼝的需要有接⼝定义的描述:通讯⽅式,报⽂定义(如api字段定义) 2. 接⼝幂等性、安全性(⽐如接⼝鉴权、敏感信息脱敏) 3. 新老接口兼容性

• 系统流程设计:通过对每个组件或模块进行进一步的细化和描述,定义其具体的功能、逻辑、算法、数据结构等。

• 系统测试设计:通过对系统的功能和质量属性进行测试用例的设计,定义测试的目标、范围、方法、工具、标准等。

• 系统上线设计:线上指标、监控、报警设计、上线升级/回滚方案、上线效果验证方案、上线风险点统计(安全风险:如是否违规收集用户数据等;系统风险:如数据不一致、系统容灾等;资源风险:当前CPU/内存资源是否够用(包含上下游)、人力资源是否有风险(如协作上下游开发资源)。

在进行需求分析和设计的过程中,我们需要使用一些工具和方法,来帮助我们表达和沟通需求和设计。例如,我们可以使用以下工具和方法:

• 时序图:用来描述系统的行为逻辑,以及对象之间的消息传递顺序。

• 状态图:用来描述系统的状态变化,以及触发状态转换的事件和条件。

这些工具和方法都是基于统一建模语言(UML)的标准符号和语法,可以使用一些专业的建模软件来绘制和管理。例如,这个因人而异,我常用的软件是这个:

Processon 是国人开发的一款在线流程图制作软件,它可以免费在线作图,并且支持实时协作,支持流程图、思维导图、原型图、UML、网络拓扑图、组织结构图等多种图表的绘制,可以轻松绘制工作中常用的各种图。

在完成需求分析和设计后,我们需要进行系统开发和测试。这是一个很关键也很艰巨的过程,需要涉及以下几个步骤:

• 系统开发:通过使用一种或多种编程语言,根据系统详细设计文档,编写系统的源代码,并进行编译、链接、打包等操作,生成可执行的目标文件或程序。

• 系统测试:通过使用一种或多种测试工具,根据系统测试设计文档,对系统进行各种类型的测试,包括单元测试、集成测试、功能测试、性能测试、安全测试等,并记录测试结果和问题。

• 系统部署:通过使用一种或多种部署工具,根据部署图和部署计划,将系统安装到目标平台或环境中,并进行配置、启动、运行等操作。

• 系统验收:通过与用户或利益相关者进行沟通、培训、演示等方式,验证系统是否满足需求和目标,并收集用户反馈和意见。

作为技术管理者,除了技术专业度,还有一个要搞定的方向就是技术管理了。其中不仅包含项目管理的硬实力,还包括领导力软实力。

项目管理:

我们的目标是用指定资源在有限时间内完成指定目标,首先要有管理意识:我就是项目唯一负责人,最终要拿到目标结果:

  1. 目标分解:目标-〉分解:三个维度:事、人、时间 事情:自身系统和外部系统,逐层拆解、模块拆解、注意前后依赖关系 角色:关键节点设置经验丰富开发、人尽其能 时间:明确时间节点,包含DDL及预留Buffer应对意外
  2. 监督体系:如定期会议同步进展和阶段性成果,若有风险及时发现解决
  3. 复盘总结:结束后复盘总结是否达到目标,哪些地方做得好,哪些地方需要改进

领导力:

组织协调:与同级同事协同任务、与上游业务协同需求、与下游协调开发、与领导及时汇报 资源整合:主要是人力、物力资源协调,如中间人力被占用如何解决、公司机器不能及时到位如何解决、上线后维护人力过多如何解决

在这篇文章中,我分享了我在从零到一构建中型复杂系统的大概流程,包括技术上项目立项、需求分析、系统设计、系统开发、系统测试、系统部署和系统验收等方面,和项目管理上注意点,让你在构建中型复杂系统的过程中少走一些弯路,多一些信心和乐趣。

当然,我也不敢说我分享的内容就是最佳实践或唯一正确的方法,每个项目都有其特殊性和复杂性,需要根据具体情况进行灵活的调整和应对。我也在不断地学习和进步,如果你有任何意见或建议,欢迎与我交流和分享。