1. 图表设计:从“画出来”到“讲清楚”
这些年我看了不少技术文档、项目方案和系统说明,发现一个共性问题:大部分人根本不把图表当“设计”来做,而是当“画图”来应付。打开绘图工具,拖几个方框,连几条线,标注一下文字,完事。结果就是,图看起来该有的元素都有了,但读者拿到手里一脸茫然,不知道先看哪里,也不知道这条线为什么存在。
“diagram-design”这个主题,想解决的恰恰就是这个痛点:一张图,怎么才能让人一眼看懂?我做了多年技术方案和文档相关的工作,画过流程图、架构图、时序图、ER图、思维导图,也带过不少新人。一个很深的体会是:画图本身不难,难的是把复杂的逻辑关系压缩到一张图里,还能让不同背景的人快速达成一致理解。这背后其实有一套方法论,包括图的类型选择、信息层级划分、布局技巧、视觉引导、标注规范、工具选型,甚至还包括图和文字、图表和代码之间的配合。
这篇文章就围绕“diagram-design”展开,把我实际工作中总结的经验、踩过的坑、验证过的方法全部写出来。适合正在做技术文档、系统设计、方案汇报、教学材料的朋友参考。不管你是初学者,还是已经画过不少图但总觉得不太对劲的从业者,这篇文章都能给你一些可落地的思路。
先说一个核心观点:图表设计不是美术问题,是沟通问题。一张图的成功标准不是“好看”,而是“对方不需要你解释就能看懂”。这个标准看起来简单,实际操作中能达标的人非常少。
2. 图表设计前的需求拆解:先想清楚三件事
很多图表画得乱,根源不是画图水平差,而是动笔之前没想清楚。拿到一个画图需求,我会先问自己三个问题:这张图给谁看?要传达什么?在什么场景下使用?这三个问题决定了一张图的类型、信息量、抽象程度和视觉语言。跳过这一步直接开画,返工几乎是必然的。
2.1 受众决定抽象层级
给老板看的图,重点在决策链路和全局结构;给开发同事看的图,重点在模块边界和交互协议;给新员工看的图,重点在业务流向和关键节点。同一套系统,至少有三张完全不同的图画法。我看过很多人犯一个错:把同一张图既给老板看又给开发看,结果两边都嫌图不够清楚。老板觉得细节太多,开发觉得关键接口没画出来。
抽象层级的把控原则其实很简单:图中的每个元素,都必须落在受众的“认知舒适区”内。老板认知舒适区是业务模块和成本收益;开发认知舒适区是服务边界和数据流;测试的认知舒适区是输入输出和异常路径。你越了解受众,就越知道哪些细节必须画出来,哪些细节必须藏起来。好的图表设计,很多时候是做减法。
2.2 目标决定图表的“叙事线”
一张图本质上是一个信息叙事。流程图的叙事线是“时间先后”;架构图的叙事线是“层次归属”;时序图的叙事线是“对象间的交互顺序”。如果一张图同时想讲两条以上的叙事线,基本就会乱。我自己的经验是:一个图表只讲一件事。如果一个系统的设计信息量太大,那就拆成多张图,每张图有一个清晰的标题和定位,而不是把所有内容塞进一张图里。
举个例子,我曾经画过一张系统架构图,一开始想表达:系统分哪些层、每层有哪些组件、组件之间怎么通信、哪些组件依赖哪些外部服务、每个服务部署在什么环境。画到一半发现图面爆炸,怎么排都排不下。后来拆成三张图:一张部署视图,一张逻辑架构视图,一张通信依赖视图,每张都清晰了不少。这就是目标先行带来的效果。
2.3 场景决定图表的生命周期
还有一个很多人忽略的问题:这张图是一次性汇报用的,还是要持续维护的?一次性汇报的图,追求信息密度和视觉效果,甚至可以牺牲一些准确性;需要持续维护的图,则必须考虑可编辑性、规范化和工具选型。很多团队的项目文档里放着一张半年没更新的架构图,就是因为画图时用的是一次性思维,导致后续没法低成本维护。
我见过一个比较典型的方案:某团队的所有架构图、流程图全部统一用同一种文本绘图语言编写,存储在代码仓库里,随代码变更一起走评审和更新流程。这样图表的生命周期就和代码绑定在了一起,不会出现“图和代码已经对不上”的问题。这种做法非常值得参考,后面会在工具选型章节详细展开。
3. 核心视觉规范:让人眼舒服的是秩序,不是装饰
图表设计经常被误解为“排版美化”,但实际上,它的核心是建立一套视觉秩序,让读者能够沿着你预设的路径浏览信息。好的图表设计跟路标系统很像——你看的时候根本不会注意到路标的设计,但每一步该往哪走都会很自然地知道。如果读者看了图之后反馈“有点乱”“不知道先看哪个”,那就是视觉秩序没有建立起来。
3.1 网格对齐:秩序感的基础
首先要做的是网格对齐。我见过非常多不专业的图表,元素之间的间距忽大忽小,模块边界参差不齐,连线穿过无关区域。这不仅仅是美感问题,它直接干扰大脑对信息分组的判断。人类视觉系统对“对齐的元素”会天然归组,对“不对齐的元素”则倾向于视为不同类别。如果你的模块之间在视觉上不对齐,读者的大脑就会产生微妙的困惑:这两个东西到底是不是一个层级?
解决方式非常朴素:所有元素放到网格上,严格使用固定间距。比如模块之间横向间距统一为20像素,纵向间距统一为30像素,模块的左右边界要么对齐、要么按照明确的层级缩进关系排列。很多绘图工具自带对齐辅助线和吸附网格,但默认设置不够严格,需要自己调整网格大小。我的习惯是:页面网格设置为10px,所有元素尺寸和间距都取10的倍数,这样在视觉上最容易形成秩序感。
3.2 颜色数量的控制与语义统一
颜色是最容易翻车的地方。很多图表颜色过多,看起来五彩斑斓,但信息传达效率极低。我看到的优秀图表,通常只用2到3种主色,加上深浅变化和中性色(灰、黑、白)来区分层级。
颜色在图表里必须承担语义功能。比如:蓝色代表业务模块,绿色代表公共基础能力,橙色代表外部依赖,灰色代表待建设模块。一旦建立语义,整篇文档里所有图表都要遵守同一套颜色规则,读者只要看过一张图,后续所有图都更容易理解。我最常用的套色方案是:
- 主色(通常是一种,比如蓝色系)用于常规模块
- 强调色(比如橙色)用于需要读者特别关注的节点
- 危险色(比如红色)仅用于异常路径、失败分支或关键告警
- 中性色(灰色)用于背景、辅助信息、占位模块
这里有一个很关键的禁忌:不要让颜色成为信息的唯一载体。因为文档可能会被黑白打印,或者读者有色觉障碍。所有通过颜色传达的信息,必须同时通过形状、文字、边框样式等另一种维度来传达。比如除了红色,关键节点还可以加粗边框或加一个警示图标。
3.3 字号分层与文字密度控制
图表里的文字是很多人的重灾区。一方面字号太大导致模块装不下,另一方面文字太多导致模块变成小作文。我的经验是:图里的文字应该高度精炼,每个节点不超过4到6个字。如果文字实在多,那就说明这个节点本身承载了太多概念,需要拆分。
字号层级推荐三档:图标题用最大号,图中一级模块名称用中号,节点内说明和连线标签用小号。层级差要足够明显,我一般会让一级字号比三级字号大3到4号。此外,同层级的文字大小必须统一。一处大一处小,读者会自动认为小的那个比大的那个低一级,哪怕你在逻辑上没有这个意图。
4. 图表类型选型:不是所有问题都适合用流程图
选错图表的类型,后面怎么设计都救不回来。我经常看到有人在介绍系统架构的时候画了一张巨大的流程图,有人表达时序关系的时候用了一堆箭头乱飘的结构图,还有人把组织结构图画成了思维导图。每一种图都有自己的表达优势和适用范围,选型错了,读者天然就难以理解。
4.1 六种常用图表类型及适用场景
我把日常工作中使用频率最高的图表类型及适用场景整理了一个比对表,方便按需选型:
| 图表类型 | 表达重点 | 典型场景 | 核心元素 |
|---|---|---|---|
| 流程图 | 时间顺序、条件分支 | 业务流程、逻辑处理 | 开始/结束、判断、处理步骤、箭头 |
| 架构图 | 层次结构、模块归属 | 系统设计、技术方案 | 分层容器、模块框、依赖连接 |
| 时序图 | 对象交互、消息顺序 | 接口调用、分布式协作 | 生命线、激活块、消息箭头 |
| ER图 | 实体关系、数据模型 | 数据库设计 | 实体框、关系线、键标识 |
| 状态图 | 状态流转、事件触发 | 订单状态、设备状态 | 状态节点、转移箭头、事件标签 |
| 思维导图 | 主题发散、结构梳理 | 头脑风暴、需求梳理 | 中心主题、分支、子主题 |
一个比较实用的经验是:当你觉得一个熟悉的需求用什么图都不太对劲的时候,很可能是你在试图用一张图承担两种以上的表达目标。比如把架构图和流程图混在一起,既要表达模块是怎么分层的,又要表达调用过程是什么顺序的,这时候就该拆成两张图,而不是在一张图里用横七竖八的线硬凑。
4.2 连接线的画法:直连优于交叉
连接线是图表设计里最容易被忽略、也最能暴露功底的细节。很多人画连线喜欢用自由曲线,觉得好看;但从信息传达效率角度,直线永远优于曲线,水平/垂直连线永远优于斜线。原因在于人类视觉系统处理直线和正交线(横平竖直)的成本最低,斜线和曲线会增加读者的认知负担。
如果连线必须交叉,尽量避免“十”字交叉,因为人的视线在交叉处容易判断错方向。处理交叉的常规手段包括:把反向连线绕到模块外侧走线;通过调整模块位置消除交叉;或者把一个端点的连接位置换到另一个方向。当连线很多的时候,还可以适当减少图中的模块数量,把某些模块合并成组,或者用编号代替连线——比如在模块A里标“详见模块B”,比画一条穿过三个模块的长线更清晰。
4.3 容器和分组的使用
图表中需要表达“这些模块属于同一个子系统”的时候,应该用容器(一个大的背景框)把模块圈起来,而不是通过颜色或线型暗示。容器内部通常要标注子系统的名称,位置放在容器的左上角或顶部居中。这里有个常见错误:容器太小,导致内部模块的间距比外部的间距还宽,视觉上完全看不出归属关系。正确的做法是,容器内部保持紧凑,内部间距远小于外部间距,这样读者的眼睛才能直接“看到”分组关系。
容器还支持嵌套。比如最外层是一个云环境,里面是服务集群容器,再往里是单服务模块。嵌套层级不要超过三层。超过三层之后,视觉上的框套框就开始产生“迷宫效应”,读者容易迷失。这时候应该考虑拆成多张图,或者用拓扑结构来替代部分容器表达。
5. 实操过程与核心实现:从零到一画一张合格的架构图
前面讲了很多原则和理论,这一章来一个完整的具体过程演示。我拿一个常见的模拟场景来走一遍:某跨平台系统,包含客户端、服务端、数据库、缓存、消息队列等模块,需要画一张逻辑架构图用于技术方案评审。
5.1 第一步:明确内容清单和目标
动笔之前先列出一个内容清单。这个清单包括:这张图要出现哪些组件?组件之间的关系是什么?图里必须出现的重要标注是什么?
以模拟场景为例,清单是这样:
- 客户端层:桌面客户端、移动客户端
- 接入层:网关服务(负责鉴权、限流、路由)
- 应用层:用户服务、订单服务、支付服务
- 数据层:MySQL主库、Redis缓存、消息队列
- 外部依赖:短信服务、对象存储服务
关系说明:客户端通过HTTPS访问网关;网关路由到各应用服务;应用服务读写MySQL和Redis;支付服务异步通过消息队列通知订单服务;短信服务和对象存储作为外部依赖被用户服务、订单服务调用。
清单列完之后,还要定义目标:这张图用于评审,受众是项目组同事,需要展示整体结构、分层关系和关键技术点(网关作为统一入口,消息队列用于削峰)。明确了这些,后面每一步都有据可依。
5.2 第二步:布局规划与网格设计
打开绘图工具的页面设置,先把画布大小确定。不建议用无限画布,因为无边界会导致元素摆放随意,最终图面松散。我一般把画布设为16:9的宽屏比例,比如1920x1080,这样导出图片用于文档和投屏都比较合适。
布局顺序是“从整体到局部”。先确定整个图的分层结构是上下式还是左右式。架构图我个人强烈推荐上下式:从上往下依次是客户端层、接入层、应用层、数据层,外部依赖放最右侧或最下方。上下式符合人类阅读时的自然地心引力方向,读者从入口开始往下读,非常自然。
网格设置建议为10px,所有模块的起始坐标尽量取整。先大致摆放每一层的位置,不要急着拖连接线。层的间距至少保留80到120px,给连接线留出足够的走线空间。模块之间的水平间距保持在20到40px,垂直间距保持在20到40px。
5.3 第三步:绘制模块和容器
先从最外层的容器画起。每一层用一个大容器圈起来,容器左上角标注层名:客户端层、接入层、应用层、数据层。容器内的模块用圆角矩形绘制,宽度保持一致,比如统一为160px宽、40px高;如果需要承载不同职能,可以通过形状差异来区分。例如:常规服务用圆角矩形,数据库用圆柱体,消息队列用队列图标,外部服务用云朵形状。
这里有个细节要提醒:一个图里尽量不要出现三种以上形状体系。形状是仅次于颜色的视觉语义载体,形状种类多了,图表会变得杂乱。我常用的规则是:服务用圆角矩形,数据存储用圆柱体,外部系统用矩形加虚线边框,其他特殊角色(如入口、告警中心)用六边形或圆形点缀。
模块内文字的对齐方式要统一。推荐全部左对齐或者全部居中,不要混用。文字字号统一,超出模块宽度的文字要么缩小字号要么缩短文案,不要强行换行把模块撑高。
5.4 第四步:连接线的绘制与路径规划
连接线是本项目实操中最体现水平的环节。我的策略是:先画主流程线,再画次要线,最后处理交叉和绕线。
主流程线是从客户端到网关再到各应用服务再到数据库的这条链路,用最粗的线型,颜色为主色。次要线包括:应用服务之间的调用、服务到Redis的访问、支付服务到消息队列的投递,用中等粗细。外部依赖用虚线加灰色,明确表达“不在系统内部”。
画线的时候,尽量让线条走水平或垂直方向,拐弯处使用圆角而不是直角。线的标签文字放在线段的中间位置,和线本身保持一致的阅读方向。如果一条线上要标注协议,写成“HTTPS”“RPC”这种短标签,不要写“通过HTTPS协议进行加密通信”这种长句子。
遇到连线交叉的时候,优先通过调整模块左右顺序来消除。比如用户服务和订单服务的调用关系、支付服务和消息队列的投递关系,可能存在交叉。我的处理办法是把消息队列放到支付服务正下方,把订单服务放在支付服务旁边,让两条线各自顺着垂直和水平方向走,互不干涉。模块位置的微调往往就能解决大部分交叉问题。
5.5 第五步:评审自查清单
图完成后,不要直接发给别人。我有一套自查流程,每次画完图都要过一遍,能拦截不少低级问题:
- 图标上是否所有文字都清晰可读?字号不小于一定阈值?
- 所有连接线的两端是否确实有对应的连接点?有没有悬空的线头?
- 是否所有交叉都可以通过微调消除?能消除的一定要消除
- 颜色是否有语义且统一?没有用颜色表达的任何信息是否有第二维承载?
- 图标题和必要的图例是否齐全?别人看到图会不会知道这是系统的哪个部分?
- 模块之间的间距是否均匀?有没有一块区域特别拥挤,另一块空旷的情况?
- 方框和线的层次是否合理?有没有线穿过方框内部的情况?
这套自查清单在团队里已经普及使用,大大减少了“导出图发给别人之后被指出低级问题”的尴尬。
6. 工具选型解析:根据维护需求选择你的绘图基座
图表设计离不开工具,但工具选型恰恰是很多人纠结最久的事情。实际上,工具选型的决策因素并不多,核心就三条:你是否需要多人协作?图表是否需要进入版本管理?你是否需要在代码或文档里直接嵌入图表?
6.1 工具对比:从可维护性角度切入
我区分工具的方式是看它的“底层存储形式”。存储是图片格式的,还是纯文本的,决定了图表的可维护性和可协作性。
| 工具类别 | 典型代表 | 优势 | 劣势 | 适用场景 |
|---|---|---|---|---|
| 桌面绘图软件 | 传统绘图工具 | 功能全面、样式丰富 | 文件难以做差异对比,协作不便 | 一次性汇报材料、海报 |
| 在线协作绘图工具 | 在线白板类 | 多人实时编辑、模板多 | 免费版限制多,数据默认云端 | 团队头脑风暴、初期设计 |
| 代码化绘图语言 | 文本类绘图语言 | 文本即图表、可版本管理、变更可审查 | 学习成本、复杂布局表达受限 | 长期维护的项目文档、代码仓库 |
| 专业图表工具 | 建模工具类 | 规范性强、标准支持好 | 上手门槛偏高、格式相对固定 | 软件建模、复杂系统建模 |
团队做长期文档维护,我强烈建议优先选择代码化绘图语言。它的核心优势不是“写起来快”,而是能够嵌入代码仓库,和代码一起做版本管理、同行评审、变更对比。一个架构调整的PR里,图和代码同步变更,评审者可以清楚看到架构图从旧到新的每一处改动。这是图形化文件完全做不到的。
有人觉得代码化绘图语言布局不自由,不如拖拽工具随意。这个观点有一定道理,但大多数项目文档图表不需要像素级自由的布局,需要的是清晰、稳定和可维护性。真正的重点是:文本描述一张图和直接画一张图,在思考方式上的差异是非常巨大的。写图表代码时,你自然会更在意节点之间的关系、标注的精炼性,而不是颜色的微调,这会让图表设计更接近“设计”而非“涂鸦”。
6.2 绘图工具之外的辅助工具
图表设计还需要一些辅助工具。比如截图标注工具,用于快速在已有截图上补画箭头和框;截图长图拼接工具,用于把多张流程截屏拼成完整流程图;还有图表导出压缩工具,因为很多文档平台对图片大小有上限要求,导出大图之后需要压缩再嵌入。
我还习惯准备一套“图标库”,收集了常用的服务图标(数据库、缓存、消息、负载均衡、网关、认证、监控等),在画架构图的时候可以快速复用。这套图标库花了不少时间维护,但对图表专业度的提升非常明显。一来一致性强,二来节省了大量寻找素材的时间。对于需要频繁画图的团队,建议也建立自己的图标库,同时约定好图标的命名和存放目录,方便共享。
7. 常见问题与排查技巧实录:那些年我在图表设计上踩过的坑
图表设计是一个动手实践才能进步的领域。这一章我把这些年实际遇到的问题和排查办法记录下来,每一件都是真金白银换来的经验。
7.1 问题一:图面内容过多,信息过载
早期画架构图,总觉得“多画一点更保险”,恨不得把所有组件、所有字段、所有调用关系都放在一张图上。结果是发出去之后,没有一个人能完整讲清楚这张图。
排查办法:数一数图里的模块数量。一张图超过12到15个模块,就非常考验读者的注意力和记忆力。如果模块超过这个数量,果断拆图。拆图的维度可以是层级(画一张总览图、一张应用层细图、一张数据层细图),也可以是业务(画一张核心链路图、一张扩展链路图)。拆完之后,每张图发出去都有人能看懂了。
7.2 问题二:连接线纵横交错,图面像蜘蛛网
连接线交叉的问题有时候不是靠微调能解决的,而是图的布局方案本身不合理。比如我画过一个多服务调用拓扑,各个服务围着画一圈,中间交叉线极多。后来改成“核心服务居中,周边服务围绕核心服务按业务依赖关系挂载”的布局,交叉线大幅减少。
排查办法:交叉线超过总数的10%就要重新审视布局。调整优先级是:先调整模块位置,再调整连接线接线方向,最后考虑改用编号引用或拆图。还有一个快速方案是引入“总线”或“网关”的模式:让所有服务只通过一个中心节点通信,而不是相互之间直接连线。这样会牺牲一部分拓扑表达的真实性,但图面会立刻清爽。
7.3 问题三:颜色太多,视觉噪音严重
我还犯过一个主观上觉得“很好看”的错误:给每种模块类型都分配了不同的鲜艳颜色,整个图面五颜六色,像一幅抽象画。颜色一旦超过4到5种,读者对颜色的区分就开始随数量增加而下降,视觉噪音随之上升。
排查办法:截图后转成灰度看一遍。如果灰度图看起来仍然能通过形状和位置分清模块层次,说明颜色使用及格。如果灰度图混乱不堪,说明颜色承担了太多本不该承担的信息任务,需要精简。改完颜色之后,要让同事肉眼检查一下,确认图上颜色表达的语义是清晰的。
7.4 问题四:图例缺失或标注不明
我见过很多图,全靠作者在旁边口头解释“这个框表示什么、那条线表示什么”。图本身没有图例,没有标题,没有日期,没有版本号。这种图放进文档里,过一个月连作者自己都未必看得懂。
排查办法:所有面向交付的图表必须包含4个基本元素:标题(说明图的内容和用途)、日期/版本号(方便追溯更新)、完整图例(说明形状与颜色语义)、作者或维护者标识。这4个元素在图表的角落占不了多少空间,但对后续维护和沟通的帮助极大。有一次项目管理会上,就是因为架构图左上角有一行版本号和变更说明,避免了一场关于“现在系统到底是不是这个架构”的争论。
7.5 问题五:导出图片尺寸和清晰度不当
画好图只是第一步,导出设置不对会让前面的所有努力付诸东流。常见问题包括:导出分辨率过低,文字模糊不清;导出尺寸选错,嵌入文档后比例失调;导出格式选错,放大后会模糊。
排查办法:如果平台支持,导出SVG格式作为首选,因为矢量格式放大缩小不失真;PNG格式需要导出两倍或三倍分辨率,保证在文档里缩放之后依然清晰;不要在图片里使用过小的字号,因为导出后屏幕查阅和打印的效果差别很大。另外,导出前把画布裁剪到刚好包住所有元素,去掉大面积的空白,这样嵌入文档后比例会更协调。
8. 提升图表设计水平的日常训练与团队规范
图表设计能力的提升没有捷径,但有一些非常有效的刻意练习方法。我自己长期使用这些方法,进步速度远超那些“凭感觉画图”的时期。这里也分享给你。
8.1 每天重画一张经典图
选一个你所在领域的经典图表,比如某个操作系统架构图、某个网络协议时序图或者某个业务流程规范图,不看原图,凭记忆和理解自己重新画一遍。画完再对照原图,看看有哪些布局不同、哪些信息被忽略、哪些关系理解错了。这个练习可以大幅提升对图表信息结构的把握能力。
我开始做这个练习的时候,选的是一个开源项目的模块架构图,重画了三遍才接近原图的清晰度。每画一遍,都会发现之前对模块依赖关系的理解是错的。直到按照自己的逻辑把所有依赖都推演清楚,画出来的图才算真正“入脑”了。这个训练远比临摹一百张别人的图更有价值,因为它的核心是“理解”而不是“模仿”。
8.2 建立团队图表规范
团队协作场景下,图表设计需要一套统一的规范。这份规范不需要冗长,包含以下核心内容即可:
- 颜色语义定义(每种颜色代表什么类型)
- 形状语义定义(圆角矩形、圆柱、菱形各代表什么)
- 字号层级定义(标题、模块名、注释各用几号字)
- 线型定义(实线表示同步调用、虚线表示异步/依赖等)
- 布局习惯(从上到下分层还是从左到右分列)
- 图例和版本号的统一位置
这套规范建议在团队内部以文档形式发布,所有成员画图时强制执行。这样做的好处不只是统一了图表外观,更重要的是让团队所有人在沟通时形成“公共语言”——看到蓝色就知道是标准服务,看到橙色就知道是关键依赖,看到虚线就知道是异步消息,这才是图表设计最终要达成的目标。
8.3 存档与复用:好图是一笔资产
我还有一个建议:建立图表资产库。每画完一张高质量的图,把源文件、导出图片、相关说明存到固定的目录里,按项目和时间组织。久而久之,这个图表资产库会成为宝贵的效率工具。很多新项目的架构设计图,可以从历史图表里复印、改造、组合,节省的时间非常可观。
有个真实的例子:我把曾经画过的一张订单处理流程图简化后,复用到一次给新员工的培训演示里。因为图标规范统一、结构清晰,新员工很快就把流程讲出来了。那一刻很直观地感受到,图表设计做好了,真的是团队的资产,不只是个人的作品。
9. 个人经验的几个心得
聊了这么多,最后分享几个我在实际操作中的体会。这些是方法论之外、但非常影响成品质量的小事。
第一个体会是:画图前先手绘草图,哪怕草图画得再潦草。直接打开工具就开始画,很容易陷入“局部完美”的陷阱——花了很多时间调整一个模块的位置和样式,但整体布局的问题完全没看出来。手绘草图的时候没有工具的干扰,反而容易把握全局结构。我通常会用不到十分钟画一张非常潦草的布局草图,确定层、模块数量和主要连线方向,然后才打开工具细画。这个过程帮我拦下了至少一半以上的返工。
第二个体会是:图表设计要敢于留白。早期我总觉得页面上空白多就是浪费,恨不得把图塞满。后来发现,留白是帮助读者理解层级的重要手段。模块和模块之间的空隙越大,说明它们的逻辑距离越远;空隙越小,说明它们的关系越紧密。合理地用留白来组织信息,哪怕不画容器,读者也能凭空间位置感知到分组关系。这个技巧在很多大而复杂的图表中特别好用。
第三个体会是:每次画完图之后,找一个不了解这个项目的人来看一眼。如果对方能在半分钟之内说出这张图在讲什么,那就说明图画成功了。这个“半分钟测试”我屡试不爽。很多图在我自己眼里很清楚,但拿给别人看之后立刻发现,别人的注意力路径和我预想的完全不一样,于是调整布局,让视觉重心更明确。提供给别人的图,最终是要服务别人的理解效率,而不是自己的审美偏好。