如何做 Feature Design

假装这里有一张图片

优秀的程序猿用80%的时间思考,20%的时间编码

在设计一个功能的时候,我们会先花比较多的时间用文字+图片的形式把如何做描述清楚,并且把系统中的相关功能点都考虑清楚,这就是程序猿常说的功能设计 / Feature Design


以下是我目前常用的模板,仅供参考,其实Feature Design本身并没有一定的格式要求,可以根据实际业务场景调整

Introduction / 介绍

  • 背景介绍,简单说下这个功能是用来做什么的,用户场景是如何如何之类的,用来建立整个文档的上下文

Overall Architecture / 总体架构

  • 所谓一图胜千言,这个部分一般会放上一张架构图,把各个主要模块梳理清楚,相互之间的调用关系一目了然
  • 架构图不能局限于功能本身,要考虑到这个功能模块和整个系统的关系,涉及到多少其他模块,如何交互,有什么影响,都要考虑进去

Technical Details / 技术细节

  • 这部分用文字来描述在图中不容易表述清楚的一些技术细节,可多可少,把需要解释清楚的点讲清楚就可以

Sequence Diagram / 时序图

  • 用时序图清楚的表明业务逻辑,不用废话,直接上图,还是那句话:一图胜千言

Database Schema / 数据库表结构

  • 如果涉及到数据库的改动,在这里写明数据库的结构定义

UI/UX Design / 界面交互设计

  • 如果有界面设计,交互设计的话,放在这个部分

Dependency Analysis / 依赖分析

  • 这是对于总体架构中对于系统其他模块依赖的详细分析,一般可以整理一个表格,清晰明了

Security Enforcements / 安全须知

  • 如果有安全相关的内容,在这里扩展

Telemetry and Metrics Details / 监控指标

  • 对于该功能的运转情况,提供可以量化的关键指标,并说明测量的方法

Performance Analysis and Capacity Guidance / 性能分析

  • 涉及到比较重量级的功能,一般都需要做性能测试,并且给出关键指标的官方推荐值

Disaster Recovery and High Availability Strategy / 容灾与高可用策略

  • 程序永远无法保证100%工作正常,在异常发生时,我们需要有应急策略,保证 1. 用户数据的完整性 2. 服务尽量的高可用

Testing Guidance / 测试指南

  • 关于如何测试该功能的一些细节

Other Regulations and Compliance / 其他内容

  • 其他的无法被包含在以上各项中的内容

当完成以上这些部分的梳理之后,接下来的编码步骤反而是很简单的,只需要花比较少的时间,而且这样基本上杜绝了返工的可能

反过来如果不预先统筹考虑,上来就开干,边写边想,往往会发现顾此失彼,很多地方考虑不周,到最后可能还要推倒重来,反而浪费了很多时间

所谓的“慢即是快”讲的就是这个道理

看完了,回到目录