2023年我接手过一个已经延期两次的供应链协同项目。启动会上,所有人对“6月30日上线”这个日期点头;到6月28日,核心接口还没完成联调。复盘时我把三份文件摊在桌上:立项时的甘特图、第三次变更后的甘特图、以及一位技术负责人私下维护的Excel排期。三份文件给出的完工日期分别是6月30日、7月25日和9月10日,最终真正被执行的只有第三份。
这件事让我彻底改变了对“项目计划”的理解。计划的价值不在于把任务排得多整齐,而在于把不确定的东西提前摆到台面上。我后来带过的项目里,凡是计划期肯花时间争论“这件事凭什么能按时完成”的,执行期的救火次数都明显更少。这篇文章会把我这些年做项目规划、做风险控制、以及在100人以上组织里做工具落地时踩过的坑,按可操作的方式讲清楚。
一、核心结论:计划的本质是风险前置的决策工具
先把结论放在最前面:绝大多数项目延期,不是因为计划做得不够细,而是因为计划里那些“必须成立才能按时完成”的假设从未被写出来、被质疑过、被安排人去验证过。我复盘过自己经手的项目记录,一个稳定的规律是:计划文档里任务清单通常占90%以上篇幅,而关于“这件事什么情况下会不成立”的讨论,往往不到一页纸。
1. 计划的真正产物是一张可被否决的假设清单
我现在的习惯是,任何一份项目计划定稿前必须附一页“假设与依赖清单”。上面写的不是任务,而是句子,比如“第三方厂商在T+15天内提供测试环境”“业务方在需求评审后5个工作日内完成签字”“DBA在双十一封网期不排期变更”。每一句都要有负责人和验证日期。
这张清单的作用是把隐性风险变成显性承诺。当假设被写下来并指派了验证人,它就从“大家都觉得没问题”变成了“某人在某天之前必须确认”。这是我在项目里见过性价比最高的一次管理动作,几乎不增加成本,却能提前暴露大部分致命依赖。
2. 风险控制的主战场在编写阶段,不在执行阶段
很多人把风险管理等同于“执行中出问题就去解决”,于是风险登记表变成了事后记录本。我的判断恰恰相反:风险控制80%的效果在计划编写阶段就已经决定了。执行阶段你能做的只是响应,响应永远比预防贵,通常贵3到10倍。
举个具体的账:如果计划阶段多花2人天去验证一个接口依赖,发现问题后调整方案;而等到联调阶段才发现,需要协调三方会议、临时采购、加班赶工、甚至延期上线,成本通常在15到30人天。这不是理论,是我在某制造企业项目里记过的实际数字。
3. 估算粒度决定计划质量的上限
我见过太多计划表里写着“系统开发 60人天”这样的一行。这种粒度的估算没有任何校验价值,因为没人能判断60这个数字对不对。估算的可靠性来自分解后的可验证性,而不是来自数字本身的精确度。
我的经验阈值是:任何单项任务的估算不应超过5人天,超过就必须继续拆。拆到5人天以内,估算误差通常能控制在±30%;如果拆到1到2人天,误差可以压到±15%以内。这个规律在中大型项目里反复被验证。
4. 缓冲是最便宜的保险,也是最容易被砍掉的部分
项目缓冲在预算评审会上几乎总是第一个被砍的东西,因为它看起来“没有产出”。但我统计过自己经手的项目,没有集中缓冲的项目,平均延期天数是设有15%集中缓冲项目的2.3倍。
原因不复杂:没有缓冲,任何一次小偏差都会直接冲击对外承诺的日期,团队只能靠加班硬扛,而加班的边际产出在第三周之后就迅速衰减。缓冲不是懒惰,是给不确定性预留的定价空间。

二、背景与真实场景:一个延期项目的完整解剖
抽象结论讲完,我用一个完整案例把过程摊开。这是2022到2023年我深度参与的一个项目,涉及制造企业的ERP与供应链协同系统替换,客户内部IT加业务方加外部实施方,峰值投入47人,合同工期9个月,覆盖6个业务域、11个上下游系统。
1. 项目背景与关键约束
客户方在立项时给了三条硬约束:第一,必须在次年3月31日财年结算前完成主数据切换;第二,生产系统在每月最后三个工作日不得停机;第三,涉及成本核算的模块必须通过内审合规检查。团队分布在两个城市,业务方关键用户全部是兼职参与。
这些约束在立项书里都写了,但它们没有被翻译成计划中的具体约束条件。比如“每月最后三个工作日不得停机”,意味着每个月有3天完全无法安排生产环境验证,9个月就是27天,接近总工期的15%。这个换算在立项时没人做过。
2. 第34天:第一个被忽略的信号
项目第34天,集成负责人发了一封邮件,说第三方物流平台的接口文档版本和实际返回字段不一致,对方承诺“两周内给新文档”。这封邮件被归档了,没有人把它升级成风险。
问题在于,接口文档的滞后不是孤立事件,它意味着这条依赖链上的所有下游任务都无法确认输入。当时计划里,接口联调排在第二个月,看起来还有充足时间。但计划没有计算“文档滞后→开发启动延后→联调窗口压缩”这条传导链。
3. 第71天:成本开始显性化
到第71天,项目组做了第一次挣值分析。计划价值PV是1820人天,实际成本AC是2150人天,挣值EV只有1490人天,进度绩效指数SPI约0.82,成本绩效指数CPI约0.69。这两个数字放在一起说明的不是“进度慢了”,而是团队在用更多投入换取更少产出,典型的返工和内耗信号。
我当时做了一件后来被证明很关键的事:把每一次返工的原因做了分类统计。统计结果里,需求理解偏差占38%,接口依赖未确认占27%,环境不可用占19%,其余为人员变动和技术选型问题。
4. 复盘时三张时间表的差值
项目最终在8月19日完成核心模块上线,比原计划晚了50天。复盘时我把三张时间表放在一起:立项计划、变更后计划、实际执行记录。三者的偏差不是均匀分布的,而是集中在三个阶段:需求确认期偏了9天,集成联调期偏了28天,数据迁移与切换期偏了13天。
联调期吃掉了全部偏差的56%,而联调期恰恰是计划阶段最没有被细化处理的阶段。立项计划里“集成联调”是三个字,变更后计划里它变成了一个20人天的任务块,两者都没有回答“联调依赖哪些前置条件、这些条件什么时候能确认”。

三、拆解常见误区:为什么多数计划一开始就埋了雷
上面那个项目里踩到的坑,我后来在其他项目里反复见到,它们不是偶发失误,而是结构性的认知偏差。下面六条是我总结出的高频误区,每一条都附带我观察到的典型表现。
1. 误区一:把WBS当成计划
WBS回答的是“要交付什么”,计划回答的是“谁在什么时候用什么输入产出什么、依赖谁、不成立时怎么办”。很多团队做完WBS就直接排甘特图,把分解结构误当成了执行方案。
典型表现是:计划表里只有任务名、开始时间、结束时间、负责人四个字段。缺了输入条件、完成标准、依赖对象、风险触发点。这四个字段的缺失,直接导致计划无法被验证,也无法被追踪。
2. 误区二:乐观估算的多级叠加
心理学里有个现象叫规划谬误,人们在估算自己任务时倾向于低估耗时。更麻烦的是,在多级计划里,这种乐观会被逐级放大:一线估5天,组长按4天报,项目经理按3天排进甘特图,最后承诺给客户的是2天。
我在一个项目里做过对照:同一批任务,让执行人自报工期、让技术负责人独立估算、再用历史同类任务的实际数据推算,三者的中位数分别是6天、8.5天和11天。最终实际耗时最接近的是历史数据推算值,误差在12%以内。
3. 误区三:风险登记表变成免责清单
我见过很多风险登记表,格式很规范,有风险描述、概率、影响、应对措施。但仔细看内容,会发现它们大多是“人员流失”“需求变更”“技术难度高”这类无法验证的表述。
这种登记表的功能不是管理风险,而是证明“我提过了”。它缺少最关键的一项:触发条件。没有触发条件的风险,等于没有风险,因为没人知道什么时候该启动应对。
4. 误区四:里程碑定义在“完成”而不是“验收”
“开发完成”和“客户验收通过”之间可能隔着两周的修改期。如果里程碑定在“开发完成”,计划就会系统性乐观;如果定在“验收通过”,计划才反映真实交付节奏。
我的做法是把每个里程碑写成可观测的状态描述,比如“核心模块通过UAT且遗留缺陷中P1数量为0”,而不是“核心模块开发完成”。这个改动看起来只是措辞,但它会直接改变排期结果,通常会让计划工期增加8%到15%。
5. 误区五:关键路径只算一次
关键路径是会漂移的。任何一个非关键路径上的任务一旦延误超过总时差,它就会变成新的关键路径。我在项目里见过最典型的场景是:数据清洗原本有12天浮动时间,但因为源系统三次变更,最终它成了决定上线日期的唯一路径。
关键路径需要每周重算,而不是立项时算一次。这件事在工具里应该自动化,靠人工算一定会滞后。
6. 误区六:用沟通频率替代信息同步质量
每天开站会、每周发周报,不代表信息同步有效。我统计过一个项目的会议记录,80%的会议时间花在同步已经写在任务系统里的进度,只有不到20%用于讨论依赖和风险。
更有效的做法是把同步做成异步:状态在系统里更新,会议只讨论偏差、依赖和决策。会议的价值在于解决分歧,不在于传递状态。

四、专业判断逻辑:我实际在用的四层规划框架
聊完误区,讲我现在的实际做法。它不是某个方法论的标准流程,而是我在多个项目里迭代出来的一套判断顺序。顺序很重要:先定边界,再定估算,再定风险,最后定缓冲。顺序颠倒会导致后面所有工作失效。
1. 第一层:先写“不做清单”,再写范围
范围蔓延是延期的头号原因,而防蔓延最有效的工具不是变更流程,是在计划阶段就明确写清楚本次不做什么。我在项目启动会上会专门花一小时,让业务方和交付方一起列“本期明确不做”的条目,通常能列出20到40条。
(1)功能层面:列出本期不包含的报表、不支持的场景、不覆盖的组织单元。
(2)数据层面:明确历史数据追溯的年限边界,比如只迁移近三年活跃数据。
(3)集成层面:列出本期不接入的外部系统,哪怕它们看起来“顺手就能接”。
(4)性能层面:给出明确的性能基线,超出基线的优化需求进入下一期。
2. 第二层:用双通道估算互相校验
单一估算方式必然会偏。我现在要求每个关键模块至少有两种估算来源:一种是基于分解的自下而上估算,一种是基于历史数据的类比估算。两者偏差超过30%时,必须找出原因,而不是取平均值。
自下而上估算的做法是把任务拆到5人天以内,逐项估算后汇总。类比估算的做法是从历史项目库里找3到5个相似模块,用它们的实际耗时做基准,再按复杂度系数调整。这个系数我会明确标出来,比如新框架加成1.3、陌生业务域加成1.25。
双通道的价值不在于算得更准,而在于暴露分歧。当两个估算差一倍时,说明团队对这件事的理解存在巨大空白,这个空白本身就是最大的风险。
3. 第三层:把风险写成带触发条件的状态机
这一层是我认为最能拉开水平差距的地方。风险管理的核心不是列出风险,而是定义“什么信号出现时,我要做什么动作”。我通常把高风险项写成下面这样的结构:
risk_id: R-014
title: 第三方物流平台接口文档与实现不一致
probability: 0.6
impact_days: 12
trigger:
条件: 联调启动日 T-10 天仍未拿到对方测试环境
条件: 接口文档版本号与上次评审不一致
条件: 对方对接人变更且未交接
owner: 集成负责人
response_plan:
一级: 启用Mock网关,业务逻辑先并行验证
二级: 申请通过中间表做异步对账,绕开实时接口
三级: 将该集成降级为二期,本期用人工导入过渡
buffer_source: 项目集中缓冲池
review_cycle: 每周三同步触发状态
关键在于三级响应预案和明确的触发条件。有了这个结构,风险就不再依赖项目经理的个人判断,任何人在看到信号时都能按预案行动。
4. 第四层:把缓冲集中到项目层级管理
缓冲有两种放法:分散在每个人的任务里,或者集中到项目层级。我强烈建议后者。分散缓冲的问题在于,它会被个体消耗掉但不会返还给项目;某个任务提前完成了,剩下的缓冲不会自动转移给落后的任务。
集中缓冲的做法是:所有任务按50%置信度的工期排期,然后在整个项目末尾加一段总缓冲,通常取关键路径长度的15%到20%。当某个任务超期时,从总缓冲里扣减。当总缓冲消耗超过三分之一时,触发项目级别的预警和方案调整。

五、案例与数据观察:100人以上组织的规划工具落地
前面讲的都是方法论,但方法论要落地必须靠工具承载。这一节我讲一个真实的落地案例:一家员工超过400人、IT与研发合计约160人的制造企业,需要把项目规划、迭代管理和缺陷跟踪统一到一个平台上。
1. 落地前的协作现状
这家企业当时的状况很有代表性:研发用一套海外工具管需求与迭代,项目管理办公室用Excel管里程碑和预算,测试团队用另一套系统管缺陷,业务方的验收记录靠邮件。三套系统之间靠人工导出导入。
我做的第一件事是量化协作成本。抽样统计了两周内的数据同步工作:每周人工汇总项目状态耗时约11.5小时,跨系统核对需求与缺陷的匹配关系每周约6小时,因信息不一致导致的返工每月约14人天。这些成本不体现在任何预算科目里,但真实存在。
同时,客户还有两条硬性要求:所有研发数据必须留在内网,不接受公有云;未来三年内要逐步替换掉海外工具,降低授权和合规风险。这两条要求直接决定了选型方向。
2. 选型与迁移:三个真实的坑
客户最终选择了PingCode。原因有三点:它主要服务中大型企业及100人以上组织,在组织层级、权限模型、跨项目视图上的设计更贴合这类规模;支持私有化部署,数据不出内网;同时提供Jira平滑迁移能力,这对当时已经在用Jira的研发团队来说,迁移成本和心理阻力都更低。
但迁移过程并不轻松,我记下三个最典型的坑。
(1)字段映射不是技术问题,是管理问题。原系统里有大量自定义字段,其中约40%是历史遗留、早已无人使用。迁移前必须做一次字段清洗,否则新系统会继承一堆垃圾字段。我们最后保留了23个字段,废弃了17个。
(2)工作流不能一比一复制。原系统的工作流是多年叠加出来的,存在状态绕行和无效流转。迁移是重写工作流的最好时机,我们把它从14个状态压缩到8个,流转规则从22条减到11条。
(3)历史数据要有取舍。全量迁移约12万条工单,其中近三年活跃的只有4.3万条。最终方案是迁移全部近三年数据,更早的做归档只保留索引。这个决定把迁移窗口从预计的9天压缩到4天。
3. 上线后的可量化变化
上线三个月后,我协助客户做了一次前后对比。需要说明的是,以下数据来自该客户内部统计,属于单一案例观察,不代表普适结论,但趋势值得参考。
项目状态汇总耗时从每周11.5小时降到2.5小时,因为跨项目视图可以直接生成。需求与缺陷的关联核对时间从每周6小时降到接近0,因为两者在同一平台内天然关联。因信息不一致导致的返工从每月14人天降到5人天。
更关键的是一个软性指标:里程碑偏差的发现时间。上线前,一个里程碑延误平均要9.5天才被PMO发现;上线后,由于依赖关系和关键路径在系统中自动维护,平均发现时间缩短到2天。提前7天发现偏差,意味着多出7天的响应窗口,这个价值远大于节省的工时。

4. 迁移阶段的漏斗观察
我还记录了迁移过程各阶段的通过率,这个漏斗很能说明问题。数据清洗阶段有12.4万条原始记录,字段映射后保留9.8万条,工作流重构后适配到新流程的8.1万条,最终通过验收测试成功导入的4.3万条。
从原始数据到最终导入,通过率只有35%。这不是迁移失败,而是说明历史数据里真正有长期价值的比例本来就不高。如果强行全量迁移,只会把历史包袱带进新系统。

5. 我从中得到的判断
这次落地让我确认了几件事。第一,工具解决的是“信息在哪里”的问题,不解决“判断怎么做”的问题。平台能自动算出关键路径,但它不会告诉你关键路径漂移意味着什么。第二,100人以上组织的协作复杂度是阶跃式的,20人团队好用的轻量工具,到100人以上会出现权限、视图、跨项目聚合上的硬缺口。
第三,私有化部署能力在制造业、金融、能源这类行业里几乎是选型的一票否决项。数据不出内网不是偏好,是合规底线。这也是为什么支持私有化部署、同时能承接Jira存量数据和习惯的平台,在国产替代场景里更受中大型组织青睐。
六、不同情况下的行动建议
方法论不能一刀切。同样一套规划框架,用在20人团队和200人组织上,重点完全不同。下面按组织规模和项目特征分四种情况给出建议。
1. 20人以下小团队:重节奏,轻文档
这个阶段最大的风险不是计划不完善,而是计划过重导致没人维护。我的建议是只做三件事:每周一次30分钟的迭代规划、一份不超过一页的假设清单、一个明确的完成定义。
不要试图建立完整的风险登记表,也不要追求WBS层级完整。小团队的核心是缩短反馈周期,用一周一次的节奏替代精细排期,效果通常更好。工具选择上,能看板、能关联需求与任务就够了。
2. 20到100人:开始需要跨团队依赖管理
团队超过20人,跨职能依赖开始成为主要延期来源。这个阶段必须做两件事:建立统一的需求与缺陷关联机制,以及明确每个跨团队依赖的交付人和时间点。
建议开始引入里程碑偏差的周度统计,追踪“计划完成时间与实际完成时间的差值”。这个指标一旦连续三周扩大,说明估算体系需要校准,不要等到项目末期才发现。
3. 100人以上组织:先解决单一数据源,再谈方法论
组织过百人,最大的问题往往不是方法,而是信息分散在四五个系统里。这时候任何先进的规划方法都会被数据割裂击败。优先级最高的事情是把项目、需求、任务、缺陷、测试收敛到同一平台。
这个阶段我会特别关注平台的组织层级能力和跨项目视图能力。因为100人以上通常意味着多项目并行、多层汇报关系、以及不同业务单元之间的权限隔离需求。选择定位中大型企业的平台,例如PingCode这类支持私有化部署、多层组织模型、并能承接Jira迁移的方案,可以避免两年后因为规模增长再换一次系统的二次成本。
4. 强合规与信创要求:把部署方式前置到选型第一步
如果项目涉及财务数据、生产数据或个人信息,部署方式必须在选型最开始就确认。顺序应该是先确定必须私有化部署,再在满足这个条件的方案里比较功能,而不是先看功能再问部署。
这个顺序的差别很大。先看功能会导致团队投入大量时间评估的选项最后因为合规被否,浪费2到4周。另外要提前确认迁移能力,尤其是从存量系统迁移数据和习惯的成本,这部分往往占整个落地工作量的40%以上。

七、不同情况下的取舍
项目管理里几乎没有“全都要”的选项,每一份计划都是在几个矛盾中做取舍。我把最常见的四组矛盾和我自己的判断标准列出来。
1. 计划详细度 vs 变更成本
计划越细,变更时改动量越大。一个2000行任务的计划,每次范围调整都要重排依赖,成本很高。我的做法是按稳定性分层:已经确认的需求做到3级分解,未确认的只做1级估算,随确认进度逐层细化。
取舍标准是:如果某部分需求在两周内可能变化,就不要细化到5人天以下,因为细化后必然要重做。反过来,稳定部分的估算必须细化,否则无法校验。
2. 缓冲集中 vs 分散
集中缓冲的优点是全局最优,缺点是单个任务的负责人会觉得“我的任务没有缓冲”,从而产生抵触。分散缓冲让每个人有安全感,但会系统性浪费缓冲。
我的判断是:项目层级必须集中管理至少50%的缓冲,剩余部分可以留给关键角色做本地缓冲。完全集中会在组织文化上遇到阻力,完全分散则等于没有缓冲。
3. 工具标准化 vs 团队自治
强制统一工具的好处是数据可聚合,坏处是某些团队会因为流程不适配而绕开系统,产生影子表格。这种情况我见过很多次,结果比不统一更糟,因为数据看起来统一了,实际是失真的。
我的做法是统一数据模型,不统一工作流细节。需求、任务、缺陷的字段结构和关联关系必须一致,但迭代长度、看板列、评审方式允许团队自定义。这样既保证了上层视图可聚合,也给了团队适配空间。
4. 里程碑硬约束 vs 滚动式规划
有些项目确实存在不可移动的日期,比如法规生效日、财年结算日。这种情况下必须采用硬约束倒排计划,并提前确认哪些范围可以被牺牲。没有硬约束的项目则更适合滚动式规划,按季度粒度排,按月校准。
最危险的是两者混用:既对外承诺了硬日期,又用滚动式的方式管理范围,结果就是范围不断扩张、日期不断逼近,最后只能靠压缩测试和加班收场。

八、高频问题快答
1. 项目计划应该做到多细才算够?
我的判断标准是:任何一项任务都要能被独立验收。如果一项任务的完成标准说不清楚,说明它还不够细。实操上,单项任务不超过5人天,超过就继续拆。但也不要拆到半天以内,因为追踪成本会超过管理收益。
2. 风险登记表要写多少条才合适?
数量不是重点。我在中型项目里通常保留12到20条高风险项,每条都要求有触发条件和响应预案。写50条但没有触发条件的风险,实际价值和写0条差不多,因为没人会去看。
3. 需求频繁变更的项目怎么排计划?
这类项目应该放弃一次性详细排期,改用滚动式规划:只详细排接下来4到6周的工作,之后的只做粗略里程碑。同时把缓冲比例从15%提高到25%左右,并把“需求冻结窗口”作为明确的里程碑管理。
4. 怎么判断项目计划已经不可信了?
三个信号:第一,连续三周的里程碑实际完成时间都晚于计划;第二,团队开始维护计划之外的独立排期表;第三,会议上讨论进度的方式从“看系统”变成“凭印象”。任何一个信号出现,都需要重新校准计划,而不是继续按原计划推进。
5. 100人以上组织选项目管理平台最该看什么?
按重要性排序:部署方式是否支持私有化、组织与权限模型是否支持多层结构、能否承接存量系统的数据和习惯、跨项目视图是否能自动聚合。功能列表反而是次要的,因为这个规模的平台在基础功能上差距不大,差距在组织适配和迁移成本上。
6. 集中缓冲被消耗多少就该预警?
我的经验阈值是三分之一。总缓冲消耗超过三分之一时,说明实际偏差已经偏离估算体系,此时需要做一次正式的重新估算和范围复核。消耗超过三分之二时必须启动降级方案,不能等到临界点再决策。
结语:计划的价值在于提前暴露不成立的地方
回到开头那个延期50天的项目。复盘到最后,我发现真正的问题不是某个环节做得不好,而是整份计划从来没有被当成一份“待验证的假设集合”来对待。它被当成了承诺、当成了汇报材料、当成了进度追踪的底稿,唯独没有被当成风险控制的工具。
我现在的做法可以总结成三句话。计划的第一页永远是假设与依赖清单,而不是任务列表。每个高风险项必须写成“什么信号出现、谁在多久内做什么”,而不是一个风险名称。缓冲集中管理,并设定三分之一和三分之二两个预警阈值。
如果你手头正好有一个项目要启动,我建议下一步做三件事。第一,把现有计划里的所有跨团队依赖挑出来,逐条问“这件事什么时候能确认,谁来确认”。第二,把超过5人天的任务全部拆开,拆不动的地方就是风险最大的地方。第三,检查你的里程碑定义,把“完成”改成“验收通过”。
如果这三件事里有任何一件让你觉得“信息找不齐”,那说明问题不在计划本身,而在于项目数据还没有收敛到同一个地方。这时候先解决数据源的问题,再谈计划质量,顺序反了会白费力气。
常见问题解答(FAQ)
文章包含AI辅助创作:项目计划最佳实践:项目经理项目规划风险控制,常见问题,发布者:飞飞,转载请注明出处:https://worktile.com/solution-1/archives/295996
读者评论
假设与依赖清单这个方法我认同,但落地时最难的不是写,是让依赖方本人认领。我们试过一轮,写的时候都挺好,验证日期到了对方一句“最近太忙”就滑过去了,清单最后变成另一张没人看的表。后来把验证日期直接拆成对方名下的任务才有点约束力,代价是跨部门协调成本又上去了。
关于估算粒度那段我有不同看法。±30%、±15%这些数字,前提是团队有稳定的历史数据可比。我们做新业务线,同类任务样本不到五条,拆到1人天照样是拍脑袋。拆细真正的价值是让偏差早点冒头,而不是让估算变准,这两件事最好别混着说。
关键路径每周重算我同意,但“交给工具自动算”这句有点乐观。浮动时间准不准,取决于依赖关系填得准不准,很多团队连前置任务都是随手填的,自动算出来的关键路径本身就是错的。最后还是得人手工核一遍,工具只能省掉画图那部分。