这篇实际上4年前就写了,但是一直没发在csdn上,是上一篇  如何写好项目规划和方案设计文档_colorant的专栏-CSDN博客_项目方案 的具体实践问题后续。 补发一下

上一篇,重点讲述的是撰写项目规划和方案设计文档的指导原则,要写成什么样子才能发挥它应有的价值。

具体如何做到,往往还需要实践经验和技术功底的支撑,仅仅知道方向,很可能也是心有余而力不足。

尽管如此,还是有一些在具体实践环节中通用的方法论和Checklist清单,可以帮助到大家。让大家在自己的能力范围内,将思考的过程变得标准化,体系化,尽量完成一篇无论在产品目标还是技术架构层面,都相对靠谱的方案设计文档。

需要注意的是,这个checklist一定是挂一漏万的,所以下面的内容,可能更多的是一些常规必要的点,或者容易被大家忽略的点,而非完整的需要考虑的问题列表(事实上,具体项目千差万别,所以也不可能有这样一个列表),希望能起到发散思维,查遗补漏,多角度评估方案完整性的作用

整体流程步骤方面的Checklist

  • 如果可能, 尽量从多个来源收集问题和需求,包括:系统自身架构角度,用户使用角度,开发者开发迭代角度,后续运行维护角度,过往历史问题总结的角度,还可以参考业内类似成熟系统方案的目标设定,需求列表等来拓宽视野,拓展思维。
  • 尽可能把自己套入到具体的使用场景中去,完整的从用户的角度端到端的思考一下整个业务流程中可能的需求和问题。
  • 从旁观者的角度换位思考,不要站在开发者的角度给自己找理由,先想问题和需求,后想困难。
  • 归类和整理上述需求,问题。思考对应可能的解决和实现方案的大致方向,同样及时纪录下来。如果暂时没有思路,也明确记下待定的内容,后续针对性的统一时间深入研究。
  • 将这些大致的方案逻辑,再次套入到具体的产品形态需求中,结合业务流程和整体架构框架,进一步思考和列举可能遇到的问题,需要攻克的技术/业务难点,并思考对应的解决方案。
  • 将上诉所有问题和方案统一放在一起,结合目标,优先级和可能的冲突,综合考虑,做出最后的取舍。
  • 如果需要,迭代上述步骤,直到对项目架构或流程可能造成影响的主要问题,你都有了大致的思路和解决方案。

上面是抽象的思考过程,下面再针对各个环节,列举一下注意事项和问题清单

需求和目标规划环节

这个其实更多的是对具体项目范围的一个确定过程,列一下需要考虑的点,防止遗漏。

  • 项目的相关业务方有哪些?项目可能的外部依赖方有哪些?

    • 是否找他们沟通过相关计划?
    • 是否需要找他们详细了解问题需求?
    • 这些需求和问题是否是他们真正关心的?
    • 是否有些问题和需求目标已经有替代解决方案?
    • 是否能和上下游达成协议,最好大家能为了一个目标共同努力,而不是单方面努力。
  • 当前项目目标解决的核心问题范围是什么?最终产出结果如何评估

    • 哪些要做,哪些不做,哪些优先,哪些可以后续考虑。
    • 针对这些问题,最终想要达到的效果是什么?
    • 如何检验目标的达成与否,有没有可量化的评估标准
  • 在规划阶段就需要引入一个明确的目标业务,作为(小)种(白)子(鼠)业务

    • 尽最大可能,沟通和服务好这个业务
    • 便于开发过程及时闭环反馈,有针对性的及时改进系统
    • 如果没有这样的种子业务,找到一个为止。找不到说明项目没有价值,趁早放弃。
    • 但凡可能,自己的狗粮自己吃,自己的系统自己要想办法重度使用,没有需求创造需求也要上。

概略方案设计和工作量评估

  • 确认项目方案涉及到的内容模块,各模块的责任人,分工细化
  • 产出各模块的技术要点,问题列表等
  • 产出具体内容的工作列表,资源和进度评估安排
  • 持续维护和完善各模块的具体方案设计文档。

上述内容,特别是模块级别的设计方案文档,不强求详细,但是得确保有。底限是在开始具体开发工作之前,得经过思考整理,而不是边做边想。

产品/技术方案中可能需要考虑的问题

以下的列表,即不可能面面俱到,也不代表每个项目都会包含所有这些内容。仅作参考用途,提醒和检验还有哪些事项或者问题角度需要考虑,大家因地制宜,不要为了回答这个问题而回答。

具体的内容组织方式,详细程度不限,以能把控住项目的走向和风险为目标

可控性和稳定性相关

  • 能否隔离业务,负载,减少并发或多租户环境下可能问题的相互影响
  • 是否需要支持流控,优先级等管控手段,提升系统可控性。
  • 上游数据源或外部依赖出现问题,如何应对?
  • 使用方或下游链路出现问题,负载过大,写入阻塞,消费延迟等等,如何应对?
  • 是否有故障或错误的恢复的手段?比如修复错误数据,修正错误行为等等。
  • 在故障无法快速恢复或者负载过高的场景下,是否有系统降级的方案,能够保证最低可用性。
  • 如何提高灾难恢复的速度?是否能做到系统无状态化,能快速重启?能自动恢复?能智能容错?

可维护性

  • 系统如果后续更新升级,可能遇到的问题有哪些,如何降低对业务的影响?
  • 系统迭代,可能的API和数据结构的兼容方案?
  • 系统是否可以通过配置等手段,动态调整行为?降低维护成本

可扩展性相关

可拓展性是一个无底洞,不需要过度设计,但是适当的考虑还是必须的,可以根据实际情况酌情考虑以下方面内容

  • 从代码的设计模式的角度,能否方面拓展,复用,重构
  • 从系统架构模块化,插件化的角度,能否在核心架构不调整的情况下,具备一定的定制化能力
  • 从数据结构定义,和存储方案的角度,是否留下拓展空间。是否要预留拓展字段? 怎么设计预留拓展字段? -> 比如json格式, 位图格式等等
  • 和上下游系统的对接方式,能否封装和抽象底层逻辑,不要暴露太多实现细节。尽量做到上下游系统之间的松耦合。

易用性相关

  • 是否有/能够提供必要的文档?架构思想,接入步骤,用户手册等等?
  • 是否应该提供一些分层的简化抽象,便于满足不同用户的需求,在易用性和功能性,灵活性方面取得更好的平衡。
  • 用户使用过程中可能遇到的问题,错误等,是否能提供足够明确和及时的信息反馈,尽量让用户知道下一步该怎么办。
  • 能否提供配置工具或者接口,让用户能自主定制业务或系统行为。
  • 对用户常见问题,能否提供辅助工具,标准化处理过程,沉淀最佳实践,降低解决难度。

性能相关

性能相关的考虑点,大都需要结合实际例子考量,这边只是泛泛的列一些大家可能容易忽视的点,后续有重点需要关注的,再持续补充。

整体上:

  • 这个项目中,性能重要吗,哪个环节的性能最重要?
  • 性能衡量指标是什么?如何评估?最低要求是什么?
  • 不仅是具体技术实现,从大的业务流程,系统框架的角度,哪些地方可能会影响性能的?
  • 必要的代价和收益的分析,性能够用就好,做到什么程度能相对最大化投入产出比?
  • 有没有性能压力测试方案?

除了代码工程实现,性能问题,在很多场景下是一个“算法与数据结构”的问题。所以从数据的角度可能需要考虑的点有:

  • 数据存储方案如何选择?

    • 主要的读写模式是什么?批量还是随机,采用那种存储系统存储更合适?
    • 是否需要压缩,是否需要根据特定的业务需求做预处理。
    • IO效率重要还是计算效率重要?如何平衡取舍?
    • 表结构如何设计,响应速度和吞吐率要求能否满足。
    • 是否单一存储方案能够满足,还是需要混合方案。
  • 数据采集和获取方式,有什么和性能相关的点需要考虑的
  • 数据的加工过程,能否/需不需要分层递进处理,提升数据复用能力,减少重复处理工作量?

监控告警相关

  • 如何监控系统自身的运行状态,如何判断系统功能行为是否正常?
  • 需要监控哪些数据或指标,如何埋点和获取这些数据?
  • 监控相关数据,如何加工和展示?如何呈现给终端用户?
  • 能否将监控结果和业务流程进行闭环,更好的发挥作用?
  • 监控相关数据的重要性和必要性梳理,不是监控信息越多越好
  • 考虑报警收敛,如何避免无效报警,或者不能采取行动的报警的生成。

具体实践

  • 在一开始,就尽可能罗列问题,快速形成文档,不要停留在口头上或者脑海里,便于大家沟通讨论
  • 步骤上可以先总结问题,后续再补充构思,增加解决方案,最后细化设计文档。避免出现遗忘,反复,议而不决等情况。
  • 沟通和反馈过程,尽可能以文档为载体,提前发送给相关同学,事前熟悉和反馈,提高讨论效率,
  • 相关文档,争取和项目本身同步维护,比如在同一个git仓库内,进行版本管理,避免文档和具体工程实现脱节。

小结

方案目标定得多高,范围圈得多大,会不会太过草率,会不会过度设计,如何平衡,并没有绝对的衡量标准。但前期在时间允许的情况下,把问题尽量考虑周全,做好整体目标路径规划,通常总是好过边做边看的模式。

何况,事实上,多数设计方案通常是欠思考的居多,却要号称敏捷号称测试驱动开发?而所谓的过度设计通常也只是抓不住重点,或者目标跑偏而已,不少同学其实并不具备过度设计的能力和觉悟,所以压根没有必要替自己操这个心 ;)

至于具体方案该定得多细,问题想得多全面,根本上还是取决于项目的价值产出和风险的大小。但没有经验的同学可能很难评估风险的大小,或者压根就没有意识到有些风险的存在。这时候,当然就需要有经验的同学来帮忙讨论和评估。而一个问题checklist清单,也能起到一定的帮助作用,平时注意积累常见的问题,更新自己的清单,才能发挥它的最大价值。

写一篇靠谱的方案设计文档-之实践问题清单相关推荐

  1. 如何写一篇好的职场文档

    声明:本篇文章的主要内容本非笔者本人写述,而是来自一位笔者的一位导师,真的写的很棒,在原有的基础上笔者进行了一定的调整和融入,希望可以让更多朋友能有所帮助. 写在前面 • 以终为始,心中一定要有&qu ...

  2. SEO网站站长如何写一篇高质量的软文

    大部分做SEO的站长不知道如何去写一篇高质量的软文!其实掌握了这些技巧,写高质量软文很简单,也能让网站优化做起来更加的容易. 1.标题选择 在这个行业永远是初级用户看文章的比较多,而有一定经验的SEO ...

  3. 嵌入式方案设计文档该怎么写?

    关注+星标公众号,不错过精彩内容 作者 | strongerHuang 微信公众号 | 嵌入式专栏 俗话说,不会写文档的工程师不是好的工程师! 如果你只会写代码,而从不写文档,迟早有一天会" ...

  4. 项目规划和方案设计文档的编写

    引言 在工作中,很多时候,我们都需要就一个问题提出一个解决方案,这时候,我们很可能需要产出一个文档来供大家讨论,并指导下一步工作计划.这个文档便是所谓的设计文档. 问题可大可小,形式上是否叫它为一个项 ...

  5. 写好一份软件开发设计文档

    如何写好一份软件开发设计文档 转载: 设计文档 - 也被称作技术规范和实现手册,描述了你如何去解决一个问题,是确保正确完成工作最有用的工具,其目的是迫使你对设计展开缜密的思考,并收集他人的反馈,进而完 ...

  6. ElasticSearch入门 第五篇:使用C#查询文档

    网址:http://www.cnblogs.com/ljhdo/p/4550135.html 这是ElasticSearch 2.4 版本系列的第五篇: ElasticSearch入门 第一篇:Win ...

  7. 写一个可以一键统一调整word文档格式的程序

    要写一个可以一键统一调整 Word 文档格式的程序,可以使用 Microsoft Office Word 的 VBA 功能来实现. 步骤如下: 打开 Word 文档,在菜单栏中点击"开发人员 ...

  8. 【轻松上手postman】入门篇:如果根据接口文档写postman接口用例

    在我们平时的测试工作中除了最基本的网页测试外,也会遇到没有页面但需要验证内部逻辑正确性的接口测试任务,在遇到没有网页的测试任务时,我们就要使用到接口测试工具来模拟对程序代码触发. 在接到接口测试任务时 ...

  9. 一篇好的技术方案文档需要注意的细节

    简介: 在架构方案或技术方案评审前,想必大家否非常的苦恼,来来回回修改许多版后,依旧无法表达方案的意图,这里就分享一下常用的一些技术方案和架构方案的招式. 我们为什么需要写技术方案?总结下来无非是几点 ...

  10. Java写手机专题分析接口_jeesite学习文档API-内容管理模块

    内容管理模块功能说明ThinkGem 2014年6月17日 目录 1.管理功能 1.1.内容管理 1.1.1.内容发布 1.1.1.1.概述 栏目列表:以树结构方式显示网站整体设置的栏目,点击在右侧可 ...

最新文章

  1. java mongodb存base64_阿里JAVA面试分享经验【文末有福利】
  2. 设计点击左侧切换页面进出_Axure教程:(初级)导航中的页面切换
  3. Cordova项目怎样获取项目版本号
  4. python学习(函数)
  5. border-边框的形状
  6. 如何使用SAP Cloud for Customer OData服务创建Lead
  7. 感谢有你们,架构师修行之路!
  8. JGroups:无需额外基础架构的领导人选举
  9. 快速入门:OpenShift上的Spring Boot和WildfFly 8.2
  10. spring-framework-5.1.x 源码编译 环境搭建 [ idea:2020.1 ]
  11. matlab 动画_MATLAB作图实例:51:表面动画
  12. 对方服务器未响应,重新投递中 postfix手心,我配置的Postfix邮件服务器邮件发不出去,在mail.log里显示如下~请求帮助...
  13. contentsize and frame
  14. 《PRML.Translation》pdf
  15. 到底什么是SPA、SEO、SSR?
  16. 二或四 通道USB数据采集卡如合通过CMI耦合,构成USB高速多通道数据采集卡
  17. 2021 编程语言排行榜出炉
  18. c语言加加运算符是什么意思,c语言*p++是什么意思?
  19. mongodb之快速入门
  20. javascript 夯实基础

热门文章

  1. python模拟登录163邮箱_使用python模拟登录网易邮箱网站
  2. 量子计算与通讯的基本原理(量子纠缠)
  3. 短视频软件开发,抖音源码,美颜SDK,提供开放API接口
  4. 记一次 “HTTP 405 Method Not Allowed”的解决方法
  5. excel导出设置自动列宽
  6. 11010011计算机二进制,11010011B二进制转换成十进制,八进制,十六进制是多少?
  7. 使用android studio设置签名信息
  8. Thoughtworks
  9. CPM、CPC、CPA、PFP、CPS、CPL、CPR等广告术语是什么意思
  10. 域名申请、解析和备案