如何写好技术方案

2023-10-28

一、 前言

作为一个技术开发者,特别是高级、资深开发、架构师等,往往会遇到根据需求撰写技术方案。那么如何撰写一篇好的技术方案设计,我们今天就来聊一聊这个话题。

二、 技术方案是否有必要

答案是肯定的。

我见过太多由于前期规划不到位(甚至是没有技术方案设计,开个技术讨论会口头沟通一下,就直接评工期开干的),这其中不乏很重要,工期很长的项目。而最后呢,到联调阶段各组串不起来,更可笑的是,产品和产品同学之间都没沟通清楚。导致最终很被动,到处挖坑补洞,而且花费了更多的时间和精力,甚至导致项目延期,后续扩张性不强等等问题。 

所以我认为,技术方案是必不可少的一个环节。往往很多坑在这个阶段就可以避免的。 

古人云:"磨刀不误砍柴工",技术方案就是磨刀的过程。

方案设计

三、 如何写好技术方案

  1. 要贴合需求,满足需求是大方向。

  2. 可实施。要考虑当前条件下是否可落地,如:

    • 团队人员接受能力:技术选型的时候,要考虑团队成员接受能力,盲目引入新技术,可能造成不可预知的问题。

    • 时间成本:  一般来说Java 或者 PHP 后端项目(c语言项目可能会做一年甚至更长时间),3个月时间周期算是比较长的了,假如按照此方案,需要半年甚至更长时间,那可能也不切实际。

    • 资源成本: 例如,项目可能需要引入Redis,Mysql,ES, MongoDB 等基础资源,那公司是否能提供这些资源(服务器是要钱的)。如果不能,在写技术方案时候,可能就需要考虑是否有替代方案。

  3. 应急处理&可靠性保障 只要人能想到的问题,就一定会发生,不能有侥幸心理。所以要做好出现问题的应对策略,这里就必须做好如:

    • 灰度方案

    • 降级方案

    • 异常处理

    • 容量评估

四、技术方案模板

下面是我总结的技术方案设计模板,希望对大家所有帮助。

1、背景

目前的背景现状,简要说明以往业务所遇到的问题,给出本次项目迭代的原因,解决的技术痛点或业务痛点

2、目标

通过次方案要达到什么样的业务指标,例如,支撑多少QPS,性能相比现在提升多少倍,为后期水平扩展做铺垫

3、整体方案

1)架构图 2)流程图 3)时序图 4)调用链路图

4、存储设计

如Mysql表结构设计,缓存设计,ES存储设计等等,说明Schema、字段类型、默认值、描述信息等。

5、接口定义

列举出接口的结构,参数,返回值等

6、灰度方案

按什么方式灰度,如何做灰度方案,用表格的形式列出分几个阶段灰度,每个阶段大概时间多长。

7、降级方案

当出现问题如何降级操作,如何回滚。将风险降到最低程度。

8、关联系统(功能)影响

重点需要各组注意的地方,相关人员需要特别关注,一一确认到位

9、资源分配情况

  • 人力资源: 实现方案需要多少人力投入(开发人力,测试人力,运维人力)等。

  • 硬件资源: 实现上述方案,列举需要哪些物理机器资源,运维人员需提前准备。

10、预估工期及时间节点

列举出工期及关键时间节点,如,什么时候联调,什么时候提测,什么时候开始灰度上线,以及后续的迭代完善计划等。

五、温馨提示

我也给大家总结了我之前做系统重构写的技术方案设计文档(线上真实版本,已脱敏)

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何写好技术方案 的相关文章

  • 数字水印技术的原理、实现及其应用

    概述 数字水印 是指将特定的信息嵌入数字信号中 数字信号可能是音频 图片或是视频等 数字水印可分为浮现式和隐藏式两种 明水印 visible watermarking 其所包含的信息可在观看图片或视频时同时被看见 盲水印 blind wat
  • 计蒜客T1461——校验信用卡号码

    如题 本题需要解决的本质就是多个字符串转换为整型数据的过程 主要的考点在于如下3个 1 循环输入多个字符串并不间断 2 将字符串处理为整型数据 3 完成对整形数据的检验 上述三个要求通过STL可以很轻松地解决 具体做法写在了代码注释之中 i

随机推荐

  • Unity3D 4.0新功能:Mecanim动画系统基础教程

    作为Unity4 0的主要更新功能 Mecanim动画被寄予了很多的期望 系统有先进的地方 也有不足的地方 这些我们留到最后再来总结 阿赵粗略的学习了一下 写下以下的教程 这篇教程简单的说明了Mecanim系统的用法和控制方式 里面用到的资
  • electron-vue中报错 Cannot use import statement outside a module解决方案(亲测有效!!!)

    错误 Cannot use import statement outside a module 不能在模块之外使用导入语句 原因 安装的某个依赖包里使用了import语法 因为我们打包输出的是commonjs规范 所以不识别import语法
  • 学习笔记 React(一)Hello React例子及创建虚拟DOM的两种方式

    React官网地址 React库 最基础的例子 官网 1 英文官网 https reactjs org 2 中文官网 https react docschina org React库 babel min js ES6 gt ES5 JSX
  • C++中函数原型和函数定义

    C 中函数原型和函数定义 C 函数原型指的是函数声明的语法形式 它告诉编译器函数的名称 返回类型和参数列表 函数原型的语法形式如下 return type function name parameter list 其中 return typ
  • 什么是强制缓存?什么是协商缓存?cache

    强制缓存和协商缓存是用于在Web浏览器和服务器之间进行缓存控制的两种机制 强制缓存 强缓存 强制缓存 强制缓存是通过设置HTTP响应头来实现的 它告诉浏览器在一定时间内直接使用缓存的副本 而不需要再向服务器发起请求 常见的强制缓存相关的响应
  • PHP Filter伪协议Trick总结

    PHP Filter伪协议Trick总结 前言 最近在学习的过程中碰到了很多的filter协议的小trick 在此做一个总结以及对filter协议的一些探索 PHP Filter协议介绍 php filter是php中独有的一种协议 它是一
  • 题目0010-数据分类

    数据分类 题目描述 对一个数据a进行分类 分类方法是 此数据a 4个字节大小 的4个字节相加对一个给定值b取模 如果得到的结果小于一个给定的值c则数据a为有效类型 其类型为取模的值 如果得到的结果大于或者等于c则数据a为无效类型 比如一个数
  • SpringBoot配置文件

    1 springboot提供两种配置文件类型 properties和yml yaml 2 默认配置文件名称 properties 3 在同一级目录下优先级为 peoperties gt yml gt yaml YAML定义 三种配置文件写法
  • java基于HuTool工具类ExcelWriter合并单元格

    HuTool工具类ExcelWriter合并单元格 基于HuTool工具类ExcelWriter合并单元格并且使用 jdk1 8 lambda表达式 效果如下 创建注解 import java lang annotation Element
  • 内核篇加载内核模块(Android10)

    一 开发前期准备 本文中使用的是linageOs源码中下载的oneplus3 安卓10内核源码进行研究测试 交叉编译链使用的是linageOs源码中的交叉编译链 lineageOs源码中oneplus3内核源码位置路径 home qiang
  • WebGIS开发入门

    目录 一 WebGIS 二 GIS背景 三 如何入门webgis开发 1 gis数据处理 2 gis数据服务发布 3 gis数据服务调用 4 gis数据渲染 四 WebGIS核心价值 五 webgis发展方向 六 gis开发就业方向 1 数
  • Javascript设计模式-06-代理模式

    Javascript设计模式 06 代理模式 简介 代理模式就是为其他对象提供一种代理 代用品或者占位符 以控制对这个对象的访问 代理对象角色内部含有对真实对象的引用 从而可以操作真实对象 同时代理对象提供与真实对象相同的接口 以便在任何时
  • 离散型制造企业如何选择MES系统?

    随着MES系统越来越被企业重视 并被运用到很多制造业中 MES对于制造企业来说 其所需要的要求是各不相同的 比如离散型制造企业 该如何选择MES系统呢 什么是离散型制造企业 离散型制造企业的产品往往由多个零件经过一系列并不连续的工序的加工最
  • EFM32 硬件I2C通讯案例

    前言 最近项目上用到了EFM32HG222F64G芯片中的硬件通讯 i2c通讯不稳定问题 导致花了很长时间去解决 走了不少弯路 最终还是解决了 在此写一下 做个记录 也方便给后面做产品的攻城狮 少走一些弯路吧 好了 进入正题 来个直接点 直
  • dayjs时间处理库的基本使用

    1 获取当前时间 let a dayjs 2 时间格式化 let endTime dayjs format YYYY MM DD 3 获取当前时间之前的时间 day js可以轻松获取N小时 天 月 年前等时间 如以下代码获取的是14天前的时
  • java连接数据库的查询方法(一个方法查任意表,任意字段)

    目录 前言 1 普通查询方法 1 1实现步骤 1 1 1预加载 1 1 2通过驱动管理器获取Connection对象 1 1 2通过Connection对象来创建命令对象 1 1 3通过命令对象获取结果集 2 不普通的查询方法 2 1获取类
  • 原型的价值与注意事项

    原型的价值 对于产品经理来讲在工作中原型的价值主要体现以下三个部分 在原型设计阶段花费的时间 可以避免额外的工作 节省总体时间 精力和成本 原型是展示 讲述 体验之源 常用于做早期评审 以确保你的想法符合目标市场 相对于文档 产品原型更加有
  • codemirror 部分配置信息 中文解释

    介绍 CodeMirror是一款在线的支持语法高亮的代码编辑器 官网 http codemirror net 下载后 解压开到的文件夹中 lib下是放的是核心库和核心css 模式下放的是各种支持语言的语法定义 主题目录下是支持的主题样式 一
  • r语言练习题3

    r语言练习题3 选择题练习 1 创建R 的数据框的函数 2 R中和 或非分别表示为 3 round 3 475 digits 2 返回值为 4 用R语言绘制直方图的命令 4 1用R语言绘制柱形图的命令 4 2用R语言绘制饼图的命令 5 R中
  • 如何写好技术方案

    一 前言 作为一个技术开发者 特别是高级 资深开发 架构师等 往往会遇到根据需求撰写技术方案 那么如何撰写一篇好的技术方案设计 我们今天就来聊一聊这个话题 二 技术方案是否有必要 答案是肯定的 我见过太多由于前期规划不到位 甚至是没有技术方