跳出任务管理的泥沼,拥抱甘特图的怀抱(完整版)

写这篇文章,我不是要黑任何一个任务管理类的App或者方法论。相反,我是一个工具控,在试用各种任务管理类App上总是不遗余力。常见的Things 3,Todoist,Teambition,Trello,Any.do,Doit.im我都试用过。最后,我选择了Todoist,在Todoist上,我已经完成了1292个任务。如下图所示。

我的Todoist任务记录

任务管理类App有什么问题

Things3,Todoist为首的任务管理App,核心功能就是记录未完成的任务,勾掉已完成的任务。至于分类,标签,自然语言识别之类的功能算是锦上添花。

他们有一个缺点,那就是你只知道一个任务没有做,或者已经做完了。但是你不知道在一群没有完成的任务中,哪些是正在做的。(当然,你可以创建一个分类,叫做“正在做”,然后把正在做的任务放进这个分类中。)

而Teambition与Trello稍微进步一点,引入了看板的概念,于是能够显示任务在各个阶段的状态,如下图所示。这张图是少数派的Trello看板,用来让作者选题。

在看板中,你可以知道哪些任务是计划中,哪些任务是准备做,哪些是正在做,哪些是已经完成。然而这样就够了吗?

看板比单纯的To do list类应用进了一步,能够关注任务的状态了。但它们的局限也在于此,因为他们关注的,只是每一个任务。

做一个比喻,修汽车需要拧螺丝,组装宜家的家具也需要拧螺丝。你如果只关注拧螺丝这个动作,那么修汽车和组装家具对你来说没有区别。组装宜家的家具,看一下说明书,一般人半个小时就搞定,但是你半个小时能学会修汽车吗?

如果只使用任务管理类的工具,你就会陷入一个怪圈:你做了很多任务,但是你不知道你做这些任务是为了什么。任务管理类App适合用来记录和追踪各种琐碎的任务和相关性不强的任务。就像是少数派的每一篇文章,文章与文章之间不是一个系列的关系,他们各自独立,谁都可以领选题写文章,哪个选题先写哪个选题后写,关系不大。

一旦要规划一个项目,对于规划项目的人和做项目的人,用任务管理类App都会让人觉得使不上劲。对于做任务的人,看到每一个独立的任务,对项目没有整体的概念;对于规划项目的人,不知道任务是不是已经切分得足够细,是否有遗漏。

假设你把一个项目拆分成了100个子任务,两周以后,你做完了其中的八十个子任务,请问你真的完成了这个项目80%的工作吗?项目的完成度能够单纯用子任务的数量来衡量吗?

如果你回答,项目的完成度,不能单纯用子任务的数量来衡量。那么继续思考下一个问题,是不是有一些子任务,就是比别的任务重要呢?

如果你回答,确实有一些子任务比别的任务都重要。那么继续思考下一个问题,是不是最重要的子任务必需优先完成呢?

如果你回答,确实最重要的子任务必需优先完成。那么继续思考下一个问题,最重要的子任务要优先多少呢?能单纯把最重要的子任务作为第一个完成的任务吗?它有前置任务吗?如果必需先把前置任务做完,才能做这个最重要的子任务,那么,是不是其实这个前置任务才是最重要的子任务呢?如此说来,能够单纯用时间先后顺序来标明任务的重要性吗?先做的总是比后做的重要吗?那如果这个先做的任务,它做完以后完全看不到产出,必需等后面的任务做完了才能看到效果,那么到底是先做的任务重要还是后做的任务重要?

上面还只是一个人做多个任务的情况,现在如果把一个项目拆分成100个任务,分给ABCDE5个人做同时做。每个人都有一些任务可以单独完成不依赖其他人。但是也有一些任务A依赖B的成果,B依赖C的成果,D可以帮B做一些工作,还有一些工作需要C和D要一起同时完成,还有一些工作,B和C可以先做一部分,剩下的一部分再一起完成……

好了,现在给你一个任务管理类的App,上面列了100个任务,其中有20个任务优先级最高,50个优先级一般,30个优先级低。你们五个人自己看着选任务做吧。两周以后项目上线。

13天后:

B:C你的后台接口怎么还没有写好,我等着跟你联合调试都等了三天了!
D:糟糕,有一个任务忘记做了,现在这个代码不能运行,等我把那边的服务搭建好才能测试。
A:嘿嘿我完成了30个任务,奖金我拿定了。
C:D你早应该搭建服务的,你忘了我也要用吗!
……

所以,单纯用优先级来排任务,你觉得靠谱吗?你不加班,谁来加班?

寻找解决办法

使用脑图拆分任务

有项目经验的人,看到我上面举得例子,肯定会不屑一顾——难道在规划项目的时候就拿一张白纸,拍着脑袋想,这个项目需要做哪些工作,想到一个写一个?这样凭脑袋空想肯定会漏掉任务的。

用脑图来规划任务是一个不错的主意,首先把项目拆分成几个主要的组成模块。然后首先看第一个模块,又把它拆分成几个子模块。然后看第一个模块的第一个子模块,又拆分……第一个模块拆分好了,再来看第二个模块,把它又拆分成几个子模块……通过这样深度优先的方式把所有任务都拆分到可以完成的程度。如下图所示。

使用脑图拆分项目任务

脑图解决了任务拆分的问题,使用脑图来拆分任务,理论上确实不容易漏掉任务。那么问题是,脑图如何确定任务的依赖关系?如何确定每个任务的完成时间?项目进行了若干天以后,如何知道当前项目进度怎么样了?在某一天,如何让所有人都一眼就知道,哪些任务没有按时完成,哪些任务已经提前完成了?

使用时间轴确定进度

现在回到任务管理的App中。如果把所有待完成的任务全部都用一个Excel写在第一列,然后在右侧用不同的色块标记任务从开始到结束的时间。那么可以得到下面这一张图。

使用Excel画一个时间轴

其中,不同的颜色表示不同的人。每一行表示一个任务。从第二列开始,每一列表示一天。如果一个任务一天可以做完,就涂一个格子,如果需要三天才能做完,就涂三个格子。

这样一来,通过这些色块,就可以清楚地看到每个人需要做多少事情。例如B列,紫色这个人一天同时要做5个任务。但是这5个任务中有4个任务都是联系别的部门让他们提供接口。那么这四个任务应该可以很容易做完,于是可以放在一天完成。

又比如,红色这个人,他做的任务很困难,所以两个任务各要做三天。

又比如,绿色这个人,他先搭建ES系统。然后再搭建Kafka。任务的先后顺序也就有了。

如果在某一天,想知道按计划今天哪些人需要做哪些事,那么直接看这一天对应的这一列就可以了。

压缩,组合

用时间轴来表示任务的进度,可以更加直观地让人看到任务的进度。但前提是先把所有子任务确定好。也就是要先做一个脑图,然后根据脑图再做这个Excel。看任务的时候,要同时看两张图。

那有没有办法把这两张图合在一起呢?

实际上,脑图本质上就是一个层次结构,层次结构也可以写成大纲的形式,如下图所示。

脑图的大纲形式

这个结构就可以放到Excel中了。如下图所示。

简化版的甘特图

到目前为止,你已经实现了一个简化版的甘特图了。

什么是甘特图

甘特图是一张二维的图表,它的横轴是时间,纵轴是任务。从甘特图上可以一目了然看到一个任务从什么时候开始什么时候结束,不同任务之间是否有时间重叠,以及哪些任务可以同时做哪些任务必需有先后顺序。

我个人认为,在项目管理中,任务周期是非常重要的,任务的开始时间和结束时间一定要把控好。使用甘特图就可以实现这样一个目的。

对于规划任务的人,在用甘特图规划任务的时候,如果你发现一个任务时间太长,无论怎么调整都会和后面的任务有重叠,那么你就会发现这个任务可能需要拆分为更小的任务。而且由于甘特图立足于项目的整体,你也可以更容易发现是否有任务漏掉了。

对于做任务的人,甘特图也可以帮他们了解到他们所做的任务在整个项目中处于一个什么样的位置,从而让他们知道自己正在做的任务是不是非常重要必需按时完成。

如果你是要开发一个App,或者是要写一本书,或者是要做一个其他什么项目,只要它是由一系列不同的任务构成的,那么你就可以考虑使用甘特图来帮你提高效率。

下面这张图就是甘特图。

  • 不同的颜色表示不同的人
  • 每一行表示一个任务
  • 红色竖线表示今天应该完成的任务
  • 任务与任务之间的黑色箭头表示任务之间的依赖关系,必需完成前面的才能完成后面的
  • 带中心黑线的任务表示已经完成的任务

通过这一张甘特图,我能一眼看出以下信息:

  1. 今天谁应该做什么任务
  2. 这个任务从什么时候开始,到什么时候结束
  3. 一个人在一段时间有哪些任务
  4. 应该先做哪些任务再做哪些任务
  5. 哪些任务可以同时做
  6. 这个任务是否被其他任务依赖,如果是,那么这个任务就不能推迟,必需按时完成或者提前完成,否则会影响后面的任务
  7. 每个任务已经完成多少还剩多少
  8. 大任务下面有哪些子任务
  9. 任务的里程碑是什么时候

为什么要用甘特图

因为为了绘制出甘特图,你必需强迫自己完成以下几件事情:

  1. 确定每一个任务的开始时间和结束时间
  2. 确定任务的依赖关系
  3. 分离可以同时运行的任务
  4. 确定不同人的任务间的时间关系

当你根据以上的规则绘制好第一版甘特图以后,你会发现有些地方是可以继续调整的,但是这种调整,在你没有画图之前是不能发现的。于是你会在调整甘特图的过程中,让项目的规划越来越清晰。

怎么做甘特图

甘特图是一种项目管理工具,你可以在纸上画甘特图,也可以在Excel中画甘特图,也可以使用专门的甘特图软件来做甘特图。下面这张基于Excel的甘特图来自网络。

这是使用Excel做出来的效果,但是做起来稍显麻烦。

Omniplan和MS Project都是非常专业的甘特图制作软件,但是价格非常高。毕竟这是生产力软件,使用这个软件你是可以赚大钱的,自然软件本身就会比较贵。

开源的甘特图软件也有不少,不过不是功能不全就是界面丑陋。这里介绍一个相对比较完整的开源甘特图制作软件:GanttProject

GanttProject的官方网站为http://www.ganttproject.biz/,在这里你可以下载到macOS,Windows或者Linux版本的软件。

GanttProject运行以后的界面如下图所示。

在左侧任务面板右键或者按下键盘Command + T就可以添加任务,Windows和Linux对应的快捷键为Ctrl + T。如下图所示。

创建好了一个任务,它默认的开始时间和结束时间都是今天。在任务上面右键,选择任务属性,可以打开任务属性设置界面,在这里可以设置任务的开始时间和任务时长。但是你不能设置任务结束时间。因为任务结束时间会根据开始时间和任务时长自动计算。如下图所示。

在这个界面,还可以设置任务的颜色,实现不同人不同颜色,或者不同项目不同颜色。也可以在这里更新任务进度。

创建多个任务,如果后面的任务依赖前面的任务,那么在右侧被依赖的任务色条上单击鼠标左键,按住并拖动到依赖它的任务上。依赖它的任务的起始时间自动就会变为被依赖任务的结束时间,如下图所示。此时,后一个任务只能设置任务的时长,不能修改任务的起始时间。

如果依赖关系设置错误,打开依赖任务的任务属性,定位到前置任务选项卡,在这里可以删除被依赖的任务或者修改被依赖任务。如下图所示。

如果你需要移动任务的顺序,鼠标单击选中它,按下键盘上的Alt + 方向键上或下即可移动任务。

我认为甘特图有一个非常重要的元素,就是竖直红线,它指向了今天的任务。要打开这跟红线,需要单击菜单栏的编辑-设置,定位到甘特图设定,在将今天显示为红色点选为,如下图所示。

单击确定回到甘特图的界面,可以看到图中出现了一条红色竖线。这条竖线指向了今天应该做的事情。如下图所示。

每天打开甘特图,这根红线都会指向当天。

GanttProject可以把做好的甘特图导出为图片,CSV,HTML或者PDF文件。单击项目-导出,点选Raster图像文件,并单击下一步,如下图所示。

设置保存路径和甘特图的日期范围即可导出为PNG文件,以方便分享。

后记

我非常喜欢使用甘特图来规划我的工作。我的第一本书
《Python爬虫开发 从入门到实战》已经在京东当当亚马逊在亚马逊上线。这本书的写作过程就是我用甘特图的最好实践。因为有了甘特图,我才能控制好写作过程中的每一个重要的时间节点,确保每一章都能够按时交付,让我能够兼顾工作,写书和自我成长。

甘特图并不是为了取代任务管理工具而存在的。甘特图的目的是为了规划项目,并且让你在项目的进行过程中知道自己处于什么位置。

你需要时刻记得,低头看任务管理工具,让你知道自己正在做什么。抬头看甘特图,让你知道你将能够做成什么。

我创建了一个微信群,用来交流各种效率工具和提高生产力的方法。有兴趣的同学可以进来和大家一起探讨。扫码关注公众号 未闻Code(或搜索ID:itskingname)回复:生产力即可获得入群方式。