架构图、流程图、时序图在技术文档里的地位,这几年被反复讨论过,但大多数团队对“图表设计”这件事依然停留在“能看懂就行”的阶段。直到最近我把内部一个代号为 diagram-design 的项目做完阶段性复盘,才意识到:图表本身不是目的,让别人几秒钟内建立正确的心理模型,才是目的。
diagram-design 不是一个复杂的技术项目,它更像是一套围绕“图表设计”展开的规范体系:从画布尺寸、网格间距、配色语义,到图形分类、连线条数、标注方式,甚至导出格式都做了统一。做完之后最大的感受是——以前最头疼的不是画图,而是每个人画出来的图长得完全不像同一个团队的作品。今天把这些经验拆开写一写,希望能给正在被技术文档图表折磨的人一点参考。
1. 为什么我把图表设计当成一个正经项目来做
1.1 图表在技术表达中的位置:从辅助材料变成核心资产
很多技术文档其实“读不进去”。一大段文字描述调用链、状态流转、模块依赖,读者的注意力会在第三行就耗尽。图表天然是压缩信息密度的工具,它把复杂的空间关系、时序关系、因果关系转化成视觉语言,让读者在几十秒内建立起一个大致的心理模型。
但这有个前提:图表必须设计得足够好。日常和“画图”绑在一起的词往往是“丑”“乱”“看不懂”。当一张架构图上堆了四十个方框、十几种颜色、七八种线型时,它的信息传递效率甚至不如一段平淡的文字。图表不是把内容画出来就结束,它需要被设计——这就是 diagram-design 项目存在的理由。
我在复盘时列过一个数据对比:同一套系统说明,纯文字版本大概需要三千字才能把模块归属和调用关系说清楚;用一张经过设计的架构图,配合两百字左右的图例说明,读者在五分钟内就能复述出核心链路。这种效率差距在评审会、新人 onboarding、跨团队协作时尤其明显。
1.2 diagram-design 想解决的五个具体问题
立项之前,我做过一次内部调研,发现团队在图表上反复踩坑的问题高度集中。如果你也在维护技术文档,大概率能对号入座:
- 风格不统一。有人用圆角矩形,有人用直角矩形,有人用圆形表示服务,有人用平行四边形表示队列,读者每次看新图都要重新学习符号系统。
- 颜色表达混乱。有人用红色表示核心服务,有人用红色表示异常链路,还有人用红色纯粹是因为好看。颜色一旦失去语义,就成为干扰信息。
- 信息层级缺失。所有方框都是同样的粗细和字号,看不出谁是核心模块、谁是周边依赖。
- 布局随缘。连线交叉严重,箭头方向不统一,读者要在图中“走迷宫”。
- 难以更新。原文件散落在个人电脑里,文档里的图只是一张静态图片,系统一变,图就过期。
diagram-design 的目标很直接:把这五个问题变成规范,让任何一个人接手已有图表时,都能在五分钟内理解设计意图并继续维护。这本质上是在做“图表的设计系统”,和前端团队维护组件库、设计团队维护视觉规范是同一个逻辑。
2. 图表设计前必须想清楚的三件事
2.1 看图的人是谁:读者视角决定信息密度
我第一次认认真真画图翻车,是在给一个核心交易链路的模块图画框图时。当时我用了非常细的颗粒度,把每个服务类、每个依赖组件都画了上去,结果评审会上没人能一眼说出主链路在哪。问题不是图错了,而是信息密度和读者的认知负荷不匹配。
后来我给自己定了一个规矩:动手之前先回答“这张图给谁看”。给决策者看,重点是边界、依赖关系和风险点,粒度要粗;给一线开发看,重点是模块职责、接口关系和调用方向,粒度可以细;给运维同学看,重点可能是部署拓扑和故障域,甚至图形要不要按机房维度分组都要重新考虑。
读者视角还决定了一个容易被忽略的细节:是否需要图例。如果读者大概率懂你的业务术语,图例可以极简;如果读者是从未接触过这套系统的新人,图例和标注就要承担解释作用。我在 diagram-design 的规范文档里专门写了“受众检查清单”:读者是谁、他们关心什么、他们已有的上下文是什么。画图前花两分钟回答这三个问题,比画完再返工省几倍时间。
2.2 图表承担的任务:解释流程、展示结构,还是暴露关系
图表不是只有一种,常见的分类至少包含架构图、流程图、时序图、状态图、ER 图、概念图。很多人在画图时没有区分这些类型,结果把流程图画成了架构图,把状态图画成了流程图,最后四不像。
架构图的重点是“系统由哪些部分组成,彼此如何连接”,它适合展示模块边界和依赖方向;流程图的重点是“事情按什么顺序发生”,适合展示分支和流转;时序图的重点是“参与者之间如何交互”,适合展示请求响应顺序和超时重试机制;状态图的重点是“一个对象在不同事件下的状态变化”,适合展示状态机的遍历路径。
我在 diagram-design 项目里做了一个决策表,根据“要表达什么信息、读者是否需要理解顺序、是否需要展示条件分支、是否需要体现归属关系”这几个维度,推荐图表类型。这个表最大的价值是逼着你在画图前做一次判断,而不是默认打开工具就开始拖方框。选错图表类型,后面细节再精致也很难补救。
2.3 确定图表的“叙事线”:别让读者自己找重点
一张好图表应该有一个明确的阅读路径。我把这个路径叫作“叙事线”。就像文章有总分总,图表也需要引导读者的视线:先看主区域,再看支撑区域,最后看辅助信息。
实际操作中,最有效的方式是“主链路居中加粗,支撑模块上下环绕,依赖外部系统放角落”。主链路可以是请求流、数据流或调用链,用粗实线加箭头强调;支撑模块与主链路之间的关系用次级连线和较浅的底色;外部的边界系统则做视觉降噪。
我见过很多人画架构图时把所有模块均匀排布成一个矩阵,这种图最像“教科书配图”而不是“工程沟通工具”。没有叙事线的图,读者只能靠猜来确定哪里是重点。你如果想让读者优先关注某个区域,就应该在尺寸、颜色、连线粗细上给这个区域更高的视觉权重。这不是玄学,是设计原则。
3. 实操:diagram-design 的关键设计规范
3.1 核心基础规范:画布尺寸、网格、间距
图表设计的第一步不是选颜色,而是确定基础度量体系。没有网格意识的图表,就像没有对齐的页面布局,看起来总是有种“差一点”的感觉。
我在 diagram-design 里定下的基础参数是这样的:
| 参数 | 推荐值 | 说明 |
|---|---|---|
| 画布最小宽度 | 1200px | 太窄容易导致布局挤成一团 |
| 网格步长 | 8px | 所有模块的定位以 8px 为基准 |
| 模块最小间距 | 16px | 保证视觉呼吸感,避免粘连 |
| 模块内边距 | 12px 或 16px | 文字与边框的最小安全距离 |
| 连线拐角半径 | 4px 或 8px | 让折线更柔和,不扎手 |
网格的意义不仅是对齐,更是为了减少心智负担。当所有元素的大小和位置都是 8 的倍数时,移动模块、调整间距都变得可预测。很多人用绘图工具时完全依赖“目测对齐”,结果放大后发现上下左右都差几个像素。真正到位的图表,是会让人在缩放时都觉得很舒服的。
间距控制还有一个容易被忽视的点:模块之间的联系强弱应该通过间距体现。关系越紧密,间距越近;关系越疏远,间距越远。这属于“静默表达”,不需要任何文字说明,读者自然能感觉出模块分组的边界。
3.2 色彩系统:色板怎么选、如何定语义色
颜色是图表设计里最容易被滥用、也最容易翻车的要素。很多图之所以显乱,往往不是线画得不好,而是颜色没有分工。我的建议是:把颜色从装饰工具变成语义工具。
diagram-design 的色彩规范大致分三层:
- 中性色层:背景、边框、文字,尽量克制,以灰阶为主。
- 功能区色层:一个大的分类领域一块主色,比如业务服务用蓝绿、基础设施用灰紫、外部依赖用橙黄。
- 强调色层:仅用于异常链路、核心调用链、高亮节点,使用饱和度较高的颜色。
此外还需要定义“语义色”:成功、失败、警告、禁用这些状态,在全团队所有图表中必须保持一致。这个语义色的定义最好和产品前端的状态色统一,避免同一套系统在文档配色是“绿=成功”,在监控面板里“绿=正常”,在代码注释里“绿=通过”而到处不一致。
我强烈建议在画图前先做一份不超过 8 个颜色的色板。颜色越多,读者需要记忆的映射就越多,信息识别速度就越慢。有人觉得“多色等于丰富”,实际上“克制的配色等于清晰的逻辑”。如果你实在不知道怎么选色,有一个土办法:先用灰阶把所有模块画完,确认布局和关系都对了,再逐步添加颜色。这一招能挡住百分之八十的配色翻车。
3.3 字体与标注规则
图表里的文字和排版往往是“最后才被想到”,但它对阅读体验的影响非常大。正文标注层级混乱、字体不统一、文字溢出方框,这些问题都会拉低整张图的质感。
diagram-design 里的字体规范分两级:一级是图形内标题,通常用中号字体加粗,表示模块名称;二级是说明性文本,如接口名、角色名、注释,用小一号的常规字重。标题类的文字不要超过两行,说明类文本不要超过四行,超长文本优先拆分或移入图例。
标注的摆放也有规则:模块名称放在矩形内部居中;对外依赖说明放模块下方或侧方;连线的文字标注放在线段中段的上方,且必须跟随连线方向,而不是随意飘在空白处。我看到最多的“业余感”就来自:一段说明文字距离它所解释的对象十万八千里,读者要猜这段文字是谁的解释。做 diagram-design 时,我强制要求标注文字与对应对象的距离不超过 8px,视觉上必须呈现“归属感”。
另外,中英文混排时记得给英文和数字使用等宽字体或半角空格,避免字距忽大忽小。细节看着小,但图表往往被嵌入到文档里反复阅读,这种细微的排版问题累积起来就是廉价感。
3.4 形状、图标、连线的语义标准化
技术图表最怕符号系统不统一。我在 diagram-design 里做了一个“图形字典”,把团队内部常用的图形都规定清楚:
- 服务、应用、模块:圆角矩形。
- 外部系统:直角矩形,并加外框或阴影。
- 数据存储:圆柱体,数据库专用。
- 队列、消息中间件:平行四边形或垂直堆叠图标。
- 决策判断:菱形,仅用于流程图。
- 起点和终点:圆角胶囊,仅用于流程图。
这套字典的最大收益是可预测性。团队内部不需要解释,读者不需要二次学习。如果你画的图经常被团队其他人修改,图形字典几乎是刚需。
连线方面,我规定了实线用于同步调用、虚线用于异步通知或回调、粗实线用于核心链路或主流程、细线用于次要关联。箭头的方向必须明确,不允许出现“一根线两端都有箭头”这种含糊表达。如果两个模块需要双向交互,就画两条分离的线,而不是一条双箭头。
图标的使用要克制,能用文字表达清楚的位置不强行加图标。图标是辅助识别不是装饰;如果图标风格不统一,比如一套是线性、一套是面性、一套是彩色插图,读者会把注意力放在“这图标是什么意思”上,而不是放在结构关系上。图标没有统一源,宁可不放。
4. 从 0 到 1 绘制一张架构图:完整过程实录
4.1 场景设定:一张内部交易系统的模块架构图
为了把上文讲的规范串起来,我用一个现场案例来演示。假设要给某内部业务系统画一张包含接入层、业务服务、数据层和外部依赖的架构图,读者是即将接手这个系统的新开发同学。
这张图需要回答三个问题:系统有几层;每一层包含哪些模块;模块与模块之间的调用关系是什么。按照 diagram-design 的流程,我先列模块清单:接入网关、会话服务、订单模块、支付模块、库存模块、消息队列、主库、缓存、外部支付渠道、外部物流渠道。
然后进行分组:接入层放网关;应用层放会话、订单、支付、库存;数据层放主库和缓存;外部依赖放支付渠道和物流渠道。分组完成后,开始确定主链路。
4.2 第一轮草稿:先定关系,不断视觉细节
我画草稿有一个原则:不碰颜色,不用图标,全部用灰阶方框加文字。这样做的原因是颜色很容易让人忽略结构问题,先把结构和布局确认清楚,后面再上妆才有意义。
第一轮布局采用从下到上的“层叠式”:底部是数据层,中间是应用层,顶部是接入层,右侧是外部依赖。主链路用加粗箭头表现:接入网关到订单模块,订单模块调用支付模块,支付模块调用外部支付渠道;订单模块随后扣减库存,库存模块写主库并同步缓存;支付回调通过消息队列异步通知订单模块。
这一轮会暴露出很多问题。比如库存模块和消息队列之间到底是同步调用还是异步通知;支付回调的路径有没有在主链路里体现清楚;数据层画了一个主库一个缓存,但读写路径没有标。这些问题如果不上草稿,直接在正式图里改,会非常痛苦。
草稿阶段不追求完美,但必须追求“关系正确”。我一般会标注每一个有疑问的线,留到下一轮统一处理。
4.3 第二轮整理:分层、布局、统一
关系定稿后进入整理环节。我先给每一层分配横向区域并统一高度:接入层在上,应用层居中,数据层在下,外部依赖放在右侧竖排。应用层内部再按业务领域分组:订单域、支付域、库存域,每个域一个微微不同的底色。
这一步需要考虑视觉平衡。主链路的四个节点放在画布中轴线附近,确保读者第一眼看到的是主链路。周边辅助服务放在两侧,但间距保持均匀。通过 8px 网格对齐所有模块和连线,让整张图呈现明显的行和列。
然后开始上色。按照前面定的规范:业务服务用蓝绿色系,数据层用灰紫色系,外部依赖用橙黄色系,强调核心链路用深蓝色加粗。主库和缓存虽然是数据层,但用了比普通数据服务更饱和的底色,因为它们承担核心持久化职责。
字体统一为 14px 加粗的模块标题和 12px 常规的辅助说明。每个模块内部的文字都做了垂直水平居中,边缘留白不小于 12px。连线上需要标注的接口名统一放在线段中段上方,使用 11px 灰色文字。
到第二轮结束时,这张图基本是可交付状态。但我通常不会立刻拿去用,歇一会儿再回来做第三轮检查。
4.4 第三轮交付:检查、导出、嵌入文档
第三轮是检查环节,我会从几个角度审视这张图:
- 结构正确性:是否所有模块都出现?依赖关系有没有漏掉?
- 信息层次:主链路是否一眼能看出来?辅助模块是否被过度强调?
- 连线质量:有没有跨越模块内部的线?有没有反弹路线?
- 文字质量:有没有文字溢出矩形?有没有含糊缩写?
- 视觉一致性:网格对齐了吗?颜色语义统一吗?图例需要吗?
检查通过后导出高清图。我的导出偏好是 SVG 优先、PNG 备选,同时保留可编辑源文件。如果你用桌面绘图工具,导出时注意选择“包含字体”或“转换为轮廓”,避免换机器后字体错乱。嵌入文档时,建议图片宽度控制在内容区域宽度以内并居中显示,同时把源文件的链接放在图片下方注释里,方便后续维护。
这一版架构图入文档后,新同学理解系统的速度明显比看文字描述快。核心链路一眼能看到头,模块归属也清楚,外部依赖没有混淆进内部服务。
5. 常见问题与逐个排查
5.1 问题一:信息过载,所有内容都塞进一张图
最常见也最致命的问题是想用一张图表达所有东西。结果图越画越大,字越来越多,最后谁都看不清。解决思路不是“缩小字体”,而是“拆图”。
我的经验是:一张架构图内模块数最好控制在 15 个以内。超过这个数字,就考虑拆分。拆分方式有两种:一是按层拆,接入层一张、应用层一张、数据层一张;二是按链路拆,主链路一张、支撑链路一张、异常链路一张。拆开之后的每一张图仍然遵循统一的视觉规范,并在文档中通过编号关联,读者不会迷失。
如果你必须在同一张图里表达大量信息,那就使用分区策略:把画布划分为主区域和附属区域,附属区域的信息做弱化处理,比如降低透明度、缩小模块尺寸、使用浅色线条。让读者先关注主区域,需要时再看附属区域,而不是同时面对所有信息。
5.2 问题二:颜色好看没用,语义混乱才是灾难
我见过太多一眼惊艳、再看迷茫的图。各种高饱和颜色铺满画布,艺术感拉满,但读者根本不知道蓝色跟绿色在图里有什么不同。好看是主观的,语义必须是客观的。
排查方法是:把图里的颜色全部替换成灰阶,看结构是否依然清晰。如果灰色版本结构依然清楚,说明颜色只是辅助,问题不大;如果灰色版本完全分不清模块边界和层次,说明你过度依赖颜色来区分信息,一旦印刷成黑白文档或出现在色弱读者屏幕上,整张图就废了。
修复方式是减少颜色的数量、增加非颜色维度的区分。例如:核心模块除了用特殊颜色,还可以加粗边框;不同层次除了底色不同,还可以通过纵向分区来区分。多一个维度,就多一层保障。
5.3 问题三:用错工具导致图表难以维护
有时图虽然画得漂亮,但源文件在个人电脑的某个临时文件夹里,其他人想改却无从下手。等到文档需要更新时,就只能重新画一张。这种“一次性的漂亮”其实性价比极低。
排查标准很简单:三个月后系统改版,你是否还愿意、且能够更新这张图?如果答案是犹豫,那就要换工作流。可维护的图表至少满足三点:源文件存放位置固定且可共享;导出格式高清;图中标注了生成日期和文档版本。如果从源工具里能轻松导出和嵌入 Markdown 文档,维护成本会更低。
我的建议是“按场景选工具”:快速概念沟通可以用手绘板或白板工具,正式文档配图用桌面绘图工具或文本型图表脚本,复杂交互图且需要多人协作的可以用在线协作画板。关键是不要让工具绑架你的设计习惯。
5.4 排查顺序和降级方案
如果一张图最终效果不理想,我通常按以下顺序排查:
- 先看结构:模块是否完整、关系是否正确。
- 再看层次:主链路是否清晰、辅助模块是否抢戏。
- 然后看配色:语义色是否统一、装饰色是否过多。
- 接着看布局:网格、间距、对齐。
- 最后看细节:字体、标注、连线方向、图标。
这个顺序是从“骨”到“肉”的递进。结构是最底层的问题,如果结构错,后面细节再精致也无法修复。用这个顺序排查的好处是,你可以及时止损:如果层次混乱,就不要继续纠结配色,先把主要矛盾解决掉。
降级方案也很重要。有些图因为信息量实在太大,无论如何都做不美观。这时我选择“退一步”:放弃完全直观,改为准确但朴素的表达。一张准确清晰但不够精致的图,好过一张精致却误导人的图。追求美之前,先保证不骗人。
6. 工具怎么选:记事本绘图和正式设计之间的平衡
6.1 工具偏好与成本考虑
图表设计工具没有“最好”,只有“最合适”。我分成四类来谈:
| 类型 | 典型场景 | 优势 | 要注意的坑 |
|---|---|---|---|
| 手绘/白板 | 头脑风暴、初步讨论 | 零门槛、快 | 信息量一多就失控 |
| 桌面绘图软件 | 正式文档配图、架构图 | 图形操作自由、模板多 | 源文件管理容易混乱 |
| 文本型图表脚本 | 嵌入代码仓库、随版本更新 | 可维护性最强、文本可 diff | 复杂布局需要学习成本 |
| 在线协作画板 | 团队实时协作、评审 | 多人同步、分享链路短 | 大图会卡、版权意识要做 |
现状是很多人在桌面绘图软件里手动拖了半年,图却没法版本管理;也有人把文本型图表脚本当成万能解,结果复杂布局画不出来。我的建议是不要“从一而终”:初稿、正式图、嵌入文档、维护更新,这几个阶段可以灵活组合不同的工具。
只要源文件能被团队访问、导出格式能满足文档需求、更新成本在可控范围内,工具就已经尽到了自己的职责。真正决定图表质量的是你在画图前有没有按规范思考,而不是软件里有多少个模板。
6.2 我现在的默认组合
经过 diagram-design 这轮实践,我个人的默认工作流是这样的:
- 信息收集和关系梳理:用文本列表列模块、列依赖,不用任何绘图工具。
- 快速草稿:用白板或纸笔,确认分层和主链路。
- 正式图:用桌面绘图软件按规范画,全程盯网格和配色。
- 嵌入文档和版本管理:导出 SVG 或高清 PNG,源文件放入团队共享空间并在文档里留链接。
- 后续维护:源文件被人修改时,回到第二步确认关系是否变化,再调整正式图。
这套组合的出发点很简单:文本列表和草稿阶段负责把“逻辑”理清,绘图工具负责把“视觉”做好,版本管理负责让图“活”下去。每个阶段用最顺手的方式,不要在一个阶段里干所有阶段的事。
如果你是个人开发者,维护自己的博客或开源项目文档,我的建议是优先考虑带版本管理能力的方案,尤其是文本型图表脚本。虽然初期多花一点时间学语法,但长期收益非常可观:改一行代码就能重新生成整张图,不用重新拖一遍所有方框。
7. 一些个人体会
diagram-design 做完之后,我最大的收获不是“团队图表变好看了”,而是大家开始把图表当成需要设计的对象,而不仅仅是随手画的附件。一张图的背后是思维方式:你清不清楚主链路,你重不重视读者,你有没有想过维护成本。这些看不见的思考,最终都会在视觉上显形。
过程中最让我意外的是“克制”的力量。定规范时被问得最多的是“我能不能换个颜色”“我能不能加个图标”,后来统一回答都是“可以,只要你解释清楚它在语义上代表什么”。没有人能给出合理解释,于是那些随意的个性化需求自然消失了。图表设计的本质不是限制创意,而是把创意用在一个更该用的地方——让信息更快更准地抵达读者。
如果只让我挑一个建议送给你,那就是:画图之前,先花两分钟写下这张图的主链路是什么,看图人是谁。这两个问题想清楚了,哪怕是黑白线框图,也已经是合格的图表设计。别急着让图好看,先让它准确、清晰,然后你会慢慢发现,“好看”的品质会自己长出来。
这个项目后续我还会继续扩展,方向是给图表加更多的动态视角,比如用可交互的方式展示状态流转和故障蔓延。但那是另一个故事了。现在,打开你的绘图工具,盯着网格,检查下一张图的间距吧。