
1. 从diagram-design这个标题里能读出什么第一次看到diagram-design这个标题我脑子里蹦出来的第一个念头是这大概率不是一个单纯的画图工具推荐而是一套关于如何把复杂信息用图形语言讲清楚的方法论。为什么这么判断因为如果只是推荐某个绘图软件标题通常会带上具体工具名比如用XX画架构图而diagram-design把diagram和design并列重点落在设计上说明它关心的是图形背后的信息组织逻辑而不是笔刷和配色。我在实际工作中接触过大量需要画图的场景技术方案评审要画架构图产品需求沟通要画流程图给非技术同事解释系统行为要画时序图甚至写文档时也要塞几张示意图帮助理解。踩过的坑多了以后我发现绝大多数人画图的问题根本不在不会用工具而在于没想清楚要表达什么就开始拖方框。结果就是图画得挺漂亮但看的人一头雾水或者图里塞了太多信息重点反而被淹没。所以这篇内容我想聊的是把diagram-design当成一个完整的设计问题来对待从明确表达目标到选择合适的图形类型再到信息分层、视觉编码、最后落地成可维护的图。适合谁看如果你是开发者、产品经理、技术写作者或者任何需要靠图来沟通的人这里面的思路都能直接用。如果你只是想找某个软件的快捷键大全那这篇可能不太对你的胃口。下面我会按我自己实际做图的顺序来展开每一步都解释为什么这么做而不是只丢给你一个结论。2. 画图之前先想清楚这张图到底要说服谁2.1 图形是沟通工具不是装饰品我见过太多人把画图当成文档配图任务觉得随便画一个意思到了就行。但图形本质上是一种高密度的沟通媒介它把线性的文字信息压缩成二维的空间关系让读者一眼就能抓住结构。这个特性决定了一张图如果没想清楚沟通目标它带来的不是帮助而是干扰。举个我自己的例子。早期我做系统设计评审喜欢把所有模块、所有依赖、所有数据流都塞进一张大图里觉得信息全才显得专业。结果评审会上大家盯着图看了半天问的第一个问题是这张图想说明什么。那一刻我才意识到我画的不是沟通工具是我自己的知识展示。后来我改成一次评审只画一张图只回答一个核心问题比如这个请求从进入到返回经过了哪些环节其他细节用文字补充。评审效率立刻上来了。所以画图的第一步不是打开工具而是用一句话写下这张图的使命。这句话通常长这样这张图要让[某类读者]理解[某个核心关系]。写不出来就说明你还没想清楚先别画。2.2 读者是谁决定了图的抽象层级同一个系统给不同的人看图完全不一样。给高层看你要的是系统边界和外部依赖方框里写的是业务能力给同级工程师看你要的是模块划分和接口关系方框里写的是服务名给新人看你要的是数据怎么流动箭头要标清楚方向和内容。我踩过的一个典型坑是给非技术同事讲一个异步处理流程我画了一张标准的时序图带激活条、带返回箭头。对方看完说这些竖线是什么。问题不在图本身而在我选错了抽象层级——时序图是工程师的语言对非技术读者来说一张带编号的流程图加几句人话注释效果好十倍。这里有个我常用的判断方法假设读者只能记住图里的三个元素你希望是哪三个这三个元素就是你这张图的主干其他都是枝叶该砍就砍。2.3 一张图只讲一件事的硬性纪律一张图只讲一件事这句话说起来容易做起来极难因为现实系统里所有东西都互相关联。但恰恰因为互相关联你才更要克制。我的经验是如果一张图里出现了两种不同颜色的箭头体系、或者出现了两套编号逻辑那基本可以判定这张图超载了应该拆。拆图不是把一张大图切成几块拼回去而是按读者的问题来拆。比如一个完整的下单流程可以拆成用户视角的步骤图和系统视角的服务调用图两张。前者回答用户经历了什么后者回答后台发生了什么。两张图各自完整合起来才构成全貌。这种拆法比一张巨型图清晰得多而且每张图都能独立复用。3. 选对图形类型不同问题配不同语法3.1 常见图形类型与它们各自擅长回答的问题图形类型选错是比画得丑更严重的问题。我把常用的几类整理成一张表方便对照图形类型擅长回答的问题典型使用场景常见误用流程图步骤顺序、分支条件业务流程、审批链路用它表达并行关系时序图谁在什么时间调用了谁接口交互、协议流程给非技术读者看架构图系统由哪些部分组成、如何分层技术方案、系统概览把部署细节混进来状态机图一个对象有哪些状态、如何迁移订单状态、连接状态状态和动作混为一谈ER图数据实体及关系数据库设计把业务规则画进去思维导图概念的发散与归类需求梳理、头脑风暴表达有严格顺序的流程这张表不是让你背而是让你在动手前先问自己我要回答的问题属于哪一类问题类型和图形类型对上了图就成功了一半。3.2 为什么流程图最容易被滥用流程图是大家最熟悉的图形也正因如此最容易被滥用。我见过用流程图表达微服务调用关系的画出来一堆方框加箭头看起来像流程实际上表达的是服务A依赖服务B这本质是架构关系不是流程。结果读者会误以为这些调用有先后顺序产生错误理解。判断该不该用流程图我的标准是图里是否存在时间上的先后和条件分支。如果两个元素之间只是有关联而没有先后那就不该用流程图的箭头。架构图里的连线通常表示依赖或数据流和流程图的箭头语义完全不同混用会让人读错。3.3 混合图形什么时候可以越界现实里确实存在需要混合表达的场景比如一张图既要表达分层架构又要表达层内的调用顺序。这时候我的做法是以一种图形为主语法另一种作为局部补充并且用视觉手段明确区分。比如主体是架构图的分层方框层内用带编号的箭头表示调用顺序编号本身就暗示了时序不需要再画成时序图。关键是不要让两种语法平起平坐。一旦读者分不清哪个箭头是依赖、哪个箭头是调用顺序这张图就失败了。我通常会在图例里明确写清楚实线箭头表示依赖带圈数字表示调用顺序。图例不是可有可无的装饰它是读者理解图的钥匙。4. 信息分层让图有第一眼和第二眼4.1 视觉层次的三要素大小、颜色、位置一张好图读者第一眼看到的东西应该就是你想让他第一眼看到的东西。这个第一眼是靠视觉层次做出来的核心就三个手段大小、颜色、位置。大小最直观重要的模块画大一点次要的画小一点。但很多人不敢用大小差异怕不整齐结果所有方框一样大读者根本分不清主次。我的建议是主干模块和辅助模块的尺寸差异至少要到1.5倍才能形成明显的视觉层次。颜色要克制。我一般一张图最多用三种颜色语义一种表示核心/主流程一种表示辅助/外部一种表示异常/警告。超过三种读者就要开始猜颜色含义了反而增加认知负担。而且颜色要和图例对应不能凭感觉上色。位置也有语义。从左到右通常暗示时间或流程方向从上到下通常暗示层级或依赖方向。把核心元素放在视觉中心或起点位置符合大多数人的阅读习惯。4.2 用分组代替连线来降低复杂度连线是图里最贵的东西。每多一根线读者的认知负担就增加一分尤其是当线交叉的时候。我处理复杂关系的一个核心技巧是能分组就分组能嵌套就嵌套尽量少连线。比如一个系统有五个模块其中三个属于数据层两个属于应用层。与其画五根线表示它们的关系不如画两个大框把模块放进去层次关系一目了然。组内元素之间的关系如果需要表达再用少量连线。这样图里的线数量能减少一半以上。分组还有一个好处它天然表达了边界。读者看到一个大框就知道框内是一个整体框外是另一个世界。这种边界感在架构图里尤其重要它直接对应了系统的模块边界。4.3 标注与图例别让读者猜我见过太多图箭头没有标签读者只能猜这根线代表什么。这是画图的大忌。每一根有语义的连线都应该有标签哪怕只是一个动词比如调用返回写入。图例同样重要。如果图里用了颜色、线型、形状来区分语义就必须有图例说明。图例的位置我一般放在图的角落不抢主体但一定要显眼到读者能找到。有些工具支持自动生成图例但自动生成的图例往往不够精确我建议手动写用读者能懂的话。还有一个细节编号。当图里的元素需要被文字引用时给它们编号会极大方便沟通。比如如图中步骤3所示比如图中那个蓝色的方框所示清晰得多。编号体系要统一要么全用数字要么全用字母不要混。5. 从草图到成品我实际画一张图的完整流程5.1 先用纸笔或白板把结构跑通我现在画任何重要的图第一步一定是离开电脑用纸笔或者白板先把结构画出来。为什么因为工具会诱惑你去调格式、选颜色、对齐像素这些操作会打断你的思考。而在纸上你只能画方框和箭头注意力全在结构上。这个阶段我追求的是快和糙。方框画歪了没关系箭头交叉了也没关系重要的是把元素和关系理清楚。通常我会画两三版第一版把所有想到的都画上第二版开始删第三版基本定型。删的过程比画的过程更重要它逼你回答这个元素真的必要吗。白板还有个好处可以随时擦掉重来。我经常在画到一半的时候发现某个关系理解错了直接擦掉重画成本几乎为零。如果一开始就在工具里画改起来就麻烦多了人也会变得不愿意改。5.2 工具选型够用就好别陷入工具焦虑工具这块我的态度很明确够用就好。市面上的绘图工具大致分几类各有适用场景代码化绘图工具用文本描述生成图适合需要版本管理、频繁修改的场景。优点是图和代码一起进仓库改起来是改文本diff 清晰。缺点是学习成本且复杂布局不好控制。拖拽式绘图工具所见即所得适合一次性、对美观要求高的图。优点是上手快缺点是改起来靠手版本管理困难。白板类工具适合协作和头脑风暴结构松散不适合做最终交付物。我自己的组合是结构探索用白板类最终交付用代码化工具偶尔需要精美配图时用拖拽式。选工具的核心标准不是哪个功能多而是这张图的后续维护成本高不高。如果这张图会被反复修改代码化工具的优势就非常明显如果只是发一次就完事拖拽式更省时间。提示不要为了用某个工具而画图。工具是手段表达才是目的。我见过有人为了用某个新工具硬是把一张简单的流程图搞得极其复杂这就本末倒置了。5.3 布局与对齐整洁感来自纪律而非天赋图看起来专业还是业余很大程度上取决于布局和对齐。这件事没有天赋可言全是纪律。我的几条硬规矩第一同类元素尺寸统一。所有表示服务的方框一样大所有表示数据库的圆柱一样大。尺寸不统一读者会以为尺寸差异有含义。第二对齐到网格。手动拖拽很难对齐一定要开网格或者用对齐辅助线。元素之间的间距要一致不要有的地方挤、有的地方空。第三箭头走直角。斜线箭头在复杂图里会制造大量视觉噪音能用直角就用直角。直角箭头虽然占地方但读起来清晰得多。第四留白。图不要画满四周留出边距元素之间留出呼吸空间。拥挤的图会让读者产生压迫感重要信息反而被淹没。这些规矩听起来琐碎但坚持下来图的观感会有质的提升。而且一旦形成习惯画图速度反而更快因为你不用每次纠结这里要不要对齐。6. 那些年我在画图上踩过的坑6.1 信息过载什么都想画结果什么都没说清这是我早期最严重的毛病。一张架构图里塞了模块、接口、数据库表、部署节点、监控点恨不得把整个系统装进去。结果就是图大到需要放大才能看清读者看两眼就放弃了。后来我总结出一个判断标准如果一张图需要超过30秒才能让读者找到重点那这张图就失败了。30秒是个很宽松的标准好的图应该3秒内就能让读者抓住主干。为了达到这个标准我现在的做法是先画一张主干图只保留最核心的5到7个元素其他全部砍掉。如果确实需要补充细节另画一张细节图并在主干图上标注详见XX图。6.2 语义不一致同一个符号在不同图里含义不同这个问题在多张图组成的文档里特别常见。比如在A图里虚线表示异步调用在B图里虚线表示可选依赖。读者如果连续看这两张图就会混淆。解决方法是建立一套图形语言规范在文档开头或者图例里统一说明。规范不用很复杂几条就够实线表示同步调用虚线表示异步蓝色表示核心灰色表示外部方框表示服务圆柱表示存储。一旦定下来所有图都遵守。这套规范其实就是你的视觉词汇表它让多张图之间有了统一的语言。6.3 忽视可维护性图改一次比画一次还累这个坑我在用拖拽式工具时踩得最狠。一张复杂的架构图画的时候花了两小时后来系统改了一个模块名我要在图里找到那个方框改文字然后发现方框大小变了又要重新对齐连带调整周围元素最后花了半小时才改完一个名字。从那以后凡是预期会频繁修改的图我一律用代码化工具。改一个名字就是改一行文本重新生成即可布局自动调整。虽然前期学习成本高一点但长期看省下的时间远超投入。这个经验让我明白画图不只是画的问题还是维护的问题。选工具时一定要把维护成本算进去。6.4 忽略读者反馈自己看得懂不等于别人看得懂我有个习惯图画完后会找一个不了解这个系统的同事看一眼问他你能看出这张图想说什么吗。这个简单的动作帮我发现了无数问题箭头方向反了、标签有歧义、某个元素位置让人误解、图例没写清楚。自己看自己的图永远觉得清楚因为你脑子里有背景知识。只有让局外人看才能暴露真正的理解障碍。这个反馈环节花不了几分钟但价值极高。如果找不到人至少隔一天再看用新鲜的眼光审视也能发现不少问题。7. 让图真正好用的几个进阶思路7.1 图与文字的分工图负责结构文字负责细节图和文字不是互相替代的关系而是分工关系。图擅长表达结构、关系、流程文字擅长表达原因、条件、例外。一张好的图配上一段好的文字效果远好于单独任何一方。我的做法是图里只放骨架所有需要解释的地方用编号引用文字部分按编号展开。比如图里画了三个步骤文字部分就写步骤1之所以这样设计是因为……。这样读者可以先看图建立整体印象再读文字补充细节两种媒介各司其职。反过来如果图里塞满了文字说明那图就退化成了一张画在方框里的文档失去了图形应有的直观性。我见过把整段需求描述塞进方框的图那还不如直接写文档。7.2 版本管理图也是代码也要进仓库只要图是需要长期维护的资产就应该纳入版本管理。代码化工具天然支持这一点图源文件和代码一起提交每次修改都有记录可以回溯、可以对比。拖拽式工具生成的图片文件虽然也能进仓库但 diff 是二进制的看不出改了什么价值有限。我现在的习惯是所有正式交付的图源文件都进仓库导出的图片作为文档附件。这样既保证了可维护性又保证了文档里能看到图。如果团队里有人要改图直接改源文件重新导出不会出现图片和源文件不一致的问题。7.3 复用与模板别每次都从零开始画得多了以后你会发现很多图的结构是相似的分层架构图、请求流程图、状态迁移图都有固定的套路。这时候建立自己的模板库就很有价值。模板不用很复杂把常用的布局、配色、图例规范固化下来下次画同类图直接套用能省下大量时间。我的模板库里有几套常用的一套是三层架构图模板一套是带泳道的流程图模板一套是状态机模板。每次画新图先看能不能套模板能套就套不能套再从头画。这个习惯让我的画图效率提升了不少而且图与图之间的风格也更统一。7.4 无障碍与兼容别让图成为信息孤岛最后说一个容易被忽略的点图的可访问性。如果图里承载了关键信息那对于无法看图的人比如用屏幕阅读器的读者这些信息就丢失了。所以重要的图一定要配文字说明把图里的核心信息用文字复述一遍。另外颜色不要作为唯一的区分手段。红绿色盲的人分不清红色和绿色如果你的图里只用颜色区分正常和异常这部分读者就抓瞎了。解决办法是颜色加形状或加标签双重编码确保信息不依赖单一感官通道。这些细节看起来是锦上添花但在正式交付的场景里它们决定了你的图是能用还是好用。我个人的体会是把图画清楚这件事技术含量不高但需要的是对读者的同理心和对自己表达欲的克制。少画一点想清楚一点图的价值反而更高。