@用 Omnifocus 搭建任务管理系统
笔者是一个自控力极差的拖延症患者,尝试了各种方式和工具都没能很好的解决这个问题,直到看到此文。
根据该文的思路,可以解决笔者目前在执行计划时常碰到的几个问题:
- OmniFocus + 番茄工作法,辅助自己更好的量化任务(目标)、完成任务
- 使每一个被丢进todolist 的任务都会被很好的执行。而不像之前:有些任务丢进去后由于没有回顾就忘记了,事后再看见该任务的时候,已经不想做了;有些任务制定的不够清晰,到执行的时候感觉有难度,然后拖着拖着就不做了。
什么是一个好的任务管理系统
首先,任务管理系统的目的是为了更好得完成任务,一切脱离这个基本条件的系统都是不可用的。如果你觉得一个最简单的 Todo List 就能很好地完成任务,那么这就是最适合你的任务管理系统。
在我看来,一个优秀的任务管理系统至少需要满足以下条件:
- 收集能力
- 在特定的情况下知道可以做哪些事情
为什么需要至少满足这两个条件呢,或者说这两个条件对于任务管理系统来说,重要在哪里?
收集能力指的是这个任务系统要能够容纳(几乎)所有的内容,一个任务、一条想法、一封未读的邮件、一个笔记、一个链接、没有报销的发票等等。
如果有读过《Getting Things Done》或者了解过 GTD 理论的同学可能就知道,收集 是整个流程中最开始的一环。如果要做的任务散乱在各处,难免会有遗忘的时候,任务没有被收集到,也就没有后面的处理流程了。
具体实践起来并不是真的需要把所有的东西都塞进任务系统里面,例如我使用 Evernote 作为剪裁和笔记的工具,很显然把每条笔记都复制一份到 OmniFocus 中很不现实,但是我会在 OmniFocus 中添加一个「定期清理 Evernote Inbox」的任务,这样就相当于把 Evernote 作为 OmniFocus 的子 Inbox,来统一进行管理。对于一些支持 URL Schema 的应用,完全可以在 OmniFocus 中建立一个链接直接指定,这样在 OmniFocus 中也可以直接打开其他应用中的内容了。
收集能力决定了要处理的内容,第二个条件则决定了一个任务系统是否是稳定可用的。具体的情境来说,你要知道早上的时候该干哪些事,工作的时候该干哪些事,无聊的时候又该干哪些事等。这样,在某一情境下,可以直接进入状态,而不是要花时间思考现在到底要做什么。
一个任务系统如果做好了这两件事情,那么就不会让你身处「感觉有很多事情要做,却不知道要做什么」的尴尬境地了。
任务管理系统的三要素
到现在为止,我还没有讲到具体工具的使用。因为工具是次要的,了解了本质的思想,使用什么工具都没有问题。纵观各种任务管理的工具:OmniFocus、Todoist、Things、org-mode,它们支持的功能也各不相同,Project、无限层级、Defer、Due、Repeat、Context、Label、Tag、Filter、Perspective 等等,有没有被这些名词给吓到?难道我们每切换一种系统都需要再重新学习一遍?
抛开这些名词,我们来分析一下一个任务系统到底是由什么组成的。在我看来,一个任务系统最本质的东西只有三个:任务、附加元素和过滤器。
任务:一个 最小可执行 的单元即为一个任务。这个是最好理解的,所以不做过多解释。
附加元素:作用在任务上的不同维度的限制。这句话读起来有点拗口,举个简单例子,「去 XXX 取快递(截止今天 10:00)」,其中,「截止今天 10:00」就是在时间维度上对这个任务的一个限制。同样的,「项目」、「标签」等等这些都是作用在某个任务上的附加元素。
过滤器:组合不同附加元素的过滤规则。只有附加元素并没有什么实际的作用,但是有了过滤器之后,就可以编写不同的过滤规则来过滤指定规则的任务。例如,我想知道「最近 10 天内重要的事情」,那么过滤规则可能就是「Due date < 10 and flagged」。
了解了上面三个基本的概念,那么再重新审视各种任务管理工具,就可以从一个比较宏观的角度来看待了,这也可以避免切换工具造成的重新学习成本。
这三个概念和 Hum 在《用更现代的方式做任务管理》提出的「LTF(列表、标签、过滤)」理论十分类似,并且 Hum 用了更大的篇幅来叙事这个概念,有兴趣的可以订阅这个栏目阅读。
OmniFocus 3 实践
把上面任务系统的基本三要素运用到 OmniFocus 上,任务就是一个个的单独 Todo item,附加元素就是 Todo item 所属的项目、Due Date、Defer Date、Tags、Flag、Repeat rule 等,过滤器就是透视(Perspective)。
接下来的内容我会通过 OmniFocus 3 为载体,来具体介绍如何实现一个可靠的任务管理系统,并介绍一些实际实践过的 Workflow 流程。
项目的设定
如果想保证项目比较有序,分成三个层级即可:大的领域(Folder)- 子领域(Folder)- 项目(Project)
。
例如,我的项目分级如下:
OmniFocus 项目分类
主要分成了5个比较大的项目:系统、学习、工作、生活、兴趣,基本上可以涵盖涉及到所有的领域了。在每个大的项目中再细分出小的项目,这个可以根据自己的需要进行积分。OmniFocus 支持无限极的项目划分,但是个人建议不要超过3层,最后一层直接是任务就可以了,这样可以保证项目层级不会过于复杂。
可以看到很多项目下面都有用[]
括起来的项目,这个是 Single List 项目,这样一些不属于某个项目里面的内容就可以放到这个列表里了。
一些项目设定的 Tips:
- 如果不是 Single List,项目需要一个既定的完成条件,在某一时刻或某一条件下,这个项目是要能够被标记为 Completed 或者 Dropped,这样可以避免一个项目长时间地呆在任务系统中;
- 项目中的任务最好是最小可执行的,如果是比较大的任务,可以利用 OmniFocus 的无限任务层级继续细分。
标签的设定
例如,我的标签如下:
OmniFocus 标签策略
一个任务在时间维度上应该有有截止日期(Due)和安排日期(Schedule)两个元素,Due 表示在某一天之前必须被完成,Schedule 表示被安排到某一天做,所以可以设定如下标签来完成 Schedule 的功能:
- Schedule:
- Today:被安排到今天
- Recently:最近需要做的事
- ThisWeek:被安排到这周
- ThisMonth:被安排到这个月
- ThisYear:被安排着这年
这样在做计划的时候,打上对应的标签,就可以使用过滤器过滤出对应的任务了,比如我想看「这个月和工作相关的任务」,那么就可以指定 Project 为「Work」项目,标签为「ThisMonth」,这样对应的任务就可以使用这个过滤器过滤出来,具体的过滤器设定下面会讲到。若一项任务没有被打上 Schedule 标签,则该任务不该被认为为一项可执行的任务,因为一项未被安排的任务在未来很有可能会被你忽略,所以,对于要添加进 OmniFocus 的任务,一定要打上 Schedule 标签,否则就不要添加进去。
另外一个可以借鉴的设定就是精力值标签:
- Energy
- LowEnergy
- MediumEnergy
- HighFocus
例如,我们工作了一整天之后,还剩一段时间才下班,精力已经下降到一个很低的值,这个时候已经不适合完成一些需要非常专注的工作了,但是一些工作上的杂事,例如打印东西,提交报表等简单的工作可以利用这个时间来完成,这个时候我们就可以设定一个过滤器,过滤出 Project 为「Work」,标签为「LowEnergy」的任务。
我们可以看到,标签系统可以极大地扩展附加元素的内容,给过滤器添加更多的过滤维度。标签系统的设定应该根据自己的需求来,如果设定的标签却没有在过滤器中用到的话,那么也仅仅是个任务添加了一个没有用上的附加元素而已,意义不大。
过滤器设定
例如,我的过滤器如下:
OmniFocus 过滤器策略
过滤器的目的就是组合各种条件,过滤出所需要的任务来,之前所有的任务上的附加元素都是为了过滤器而设定的。
同标签系统一样,过滤器的设定依然需要结合自己的情况来。我主要设定了以下几个过滤器,这些过滤器都是在实践中经常使用到的。
Routine 过滤器
这个过滤器主要被用于制定计划。例如:由于我每天晚上睡得比较晚,所以我创建了一个 Evening Review,来规划明天需要做的任务。
过滤器的详细设定如下:
Routine 过滤器设置
其中,「Routines」Folder 中就是设定的具体内容:
[图片上传失败...(image-360d2a-1554275186267)]
这一个过滤器的设定是和我的 Workflow 紧密相连的,如果你没有做 Morning Review 之类的习惯,可以不需要设定这个过滤器。
Today 过滤器
这个过滤器被使用的次数最多,过滤器的详细设定如下:
Today 过滤器设置
这个过滤器将会把符合以下条件的任务过滤出来:
- 即将截止或者标注为 Today 标签的任务
- 状态为 Available 的任务
- 非 Routine Folder 下的任务
显示方式以 Project 为维度显示:
image
对比 Forecast Perspective,它只是把对应的任务都展示了出来,在任务的层级上没有自定义的那么清晰。
image
Work 过滤器
这个过滤器和 Today 类似,只不过指定了所属项目为「Work」文件夹下面的任务,这个主要是在工作中只想专注于和工作相关的任务。
过滤器的详细设定如下:
image
除了指定了特殊的项目目录,其他的设置和 Today 的设定没有区别。
To-Sth 过滤器
日常的使用中,我会把没有看的文章、需要写的东西、要读的书、要搜索的内容都存在 OmniFocus 中,所以需要一个过滤器能够快速过滤出这些内容。
首先使用这个过滤器需要先设置一套标签系统:
image
过滤器的详细设定如下:
image
实际的使用场景:比如我想阅读一些和 Python(一门编程语言)相关的内容,那么我只需要打开这个 Perspective,挑选标签为 To-Read
,然后从搜索框中搜索 Python 关键字就可以了。
Future 过滤器
这个过滤器主要被用于制定计划,在 Weekly Review 和 Daily Review 中会被频繁地使用到。需要基于以下的标签设定:
image
过滤器的详细设定如下:
image
EasyDo 过滤器
这个过滤器会把一些简单的或者不需要太多精力的任务过滤出来。
过滤器的详细设定如下:
image
完成时间小于 15 分钟或者被标注为LowEnergy
标签的任务会被过滤出来。
工作流
在整个 Workflow 中,主要分为三个部分:计划、执行、总结。
当按照上述思路完成以 OmniFocus 对任务管理系统的搭建后:
- 每天我必须要完成的具体任务全部都在
Today
过滤器中 - 只需要根据
Routine
的提示,便可得到日计划、周计划、月计划 - 当无聊或想利用碎片时间完成一些简单的事情时,只需要去
EasyDo
过滤器中去领取就可以了 - 阅读清单、购物清单等等只需要去
To-Sth
过滤器中找就可以了 - 并且可以从
Future
过滤器中知道日周月计划
计划
很多人都不重视计划这个环节,想到什么做什么,这样不仅会做事没有条理,也会分不清任务的优先级。
一般来说,如果不知道怎么做计划的话,有一个长期计划和一个短期计划就可以了。长期计划主要是一个大体的方向,可以是年度计划或者月度计划;短期计划则需要明确具体要做哪些事情,可以是周计划或者日计划。
实践过程中使用最多的就是周计划和日计划,以及月计划和年计划。在 OmniFocus 中,我设定了几个项目,分别是 Morning Review
、Evening Review
、Weekly Review
、Monthly Review
、Annual Review
。
- Evening Review
由于我晚上睡得比较晚,所以我会在每天晚上通过
Future
过滤器,从ThisWeek
和Recently
标签中的任务挑出一些作为明天的任务,并将它们打上Today
标签。
- Morning Review
通过
Today
过滤器,知悉今天要完成的任务
- Weekly Review
通过
Future
过滤器,从ThisMonth
标签中挑选出本周的任务,并将它们打上ThisWeek
标签
- Monthly Review
通过
Future
过滤器,从ThisYear
标签中挑选出本月的任务,并将它们打上ThisMonth
标签
执行
执行应该是整个 Workflow 中最重要的一个环节,如果只是计划了,但是最后任务却没有被完成,那做计划也只是白费力气。
执行的关键就是要在对的时间内做对的事,这也是为什么要设置那么多过滤器的原因,在工作的时候就只展示工作相关要做的事,在没有精力的时候就只展示简单易做的事情。
如果你做事情的时候很容易分心,可以参考一下番茄工作法,一般我会设置为专注 50 分钟,然后休息 10 分钟。默认的 25 分钟时间过短,可能刚进入状态就要被打断。
另外可以尝试使用「结构化拖延法」(Structured Procrastination)。结构化拖延法就是忽略优先级高的事,而是从小的事,优先级比较低的事情开始做,这样慢慢地进入工作的状态,然后再去完成优先级高的事情。
总结
OmniFocus 3 提供了自带的 Review 透视,建立每个项目的时候可以选择多少天 Review 一次。实践上,一般工作上需要每天跟进的项目,会把 Review 的时间设置为每天一次,一般的项目设置为一周 Review 一次即可。为了防止忘记 Review,可以把这个 Review 的任务添加到 Morning Review 或者 Weekly Review 中。
常用的脚本
脚本的安装方法:
step1: 将后缀为scpt
的脚本文件拷贝到 OmniFocus 的脚本目录 (可以使用 OmniFocus 的 Help->Open Scripts Folder
直接打开);
step2: OmniFocus 工具栏上右键, 在弹出的菜单上选择Customize Toolbar…
, 找到新增脚本对应的 icon 拖到工具栏上即可。
任务执行时间统计脚本
如果能够直接在OmniFocus中记录任务的执行时间, 并统计出任务和项目的执行时间就更好了, 所以有了本文所描述的工作。
共三个AppleScript脚本文件: start.scpt
, stop.scpt
和report.scpt
.(下载地址)
- start.scpt
开始一个任务, 此脚本将在该任务的标题前添加#Ongoing:
, 表示该任务正在进行, 并在该任务的备注 (note) 属性尾部增加一个记录时间的字符串(或修改这个记录时间的字符串, 如果该任务之前已经开始执行过).
如果开始任务时该任务的 Defer Until 没有填写, 那么将其设置为当前时间, 作为报告中的任务开始时间.
- stop.scpt
停止一个任务, 该脚本可以停止已经开始的任务 (标题前有”#Ongoing:” 文本的任务, 停止后删除任务标题中的”#Ongoing”文本), 并根据该任务备注 (note) 属性中的时间记录字符串计算该任务已执行时间.
注意: 任务的执行可以分为多次启动/停止, 一个任务的总执行时间是多次执行时间之和.
- report.scpt
该脚本统计已完成的任务及其执行时间, 并累加各个项目中所有任务的执行时间作为项目执行时间.
对原脚本 (OmniFocus> Prepare Task Completion Report Version 2.0.0) 所做的修改如下:
- 增加一个属性用于设置保存报告的 Evernote 笔记本名称;
- 统计范围中增加 Year, 并设置 Today 为默认统计范围;
- 根据 start 和 stop 脚本记录在备注 (note) 中的时间字符串, 在报告中为任务增加执行时间数据;
- 统计项目执行时间, 其值为项目下的所有任务执行时间之和;
- 将报告的标题改为统计的日期范围;
- 如果某项没有设定值, 报告中将不显示该项数据;
如何使用
启动任务
- 选中一个任务后, 点击工具栏的
start
脚本图标. - 任务启动后, 会弹出任务开始执行通知.
- 点击
start
脚本后, 任务标题前将添加#Ongoing:
字符串, 并且任务备注 (note) 尾部将添加时间字符串.
停止任务
- 在任务执行一段时间需要停止时, 例如被打断或暂时休息或完成了该任务, 点击工具栏的”stop”脚本图标. 停止后的任务会记录本次任务执行的时间, 可以在备注 (note) 尾部时间字符串中看到变化.
- 任务停止后, 会弹出任务停止执行通知.
生成报告
- 任何时候点击
report
脚本图标, 将会首先弹出报告时间范围选择窗口, 如下图所示. - 选择一个时间范围后, 点击”OK” 按钮, 将会生成统计报告并在 Evernote 的
Omnifocus_reports
笔记本中创建一个统计报告, 如下图. 笔记本名称Omnifocus_reports
可以在脚本中修改. - 报告中, 每个任务如果使用了
start
和stop
脚本记录任务执行时间, 将会显示执行时间, 并会统计一个项目的总执行时间, 如上图中下方的蓝色文本.
注意事项
- 使用
start
和stop
脚本记录任务执行时间后, 将会在该任务的备注 (note) 的尾部添加时间字符串, 不要删除它或手动修改它, 并且一定不要将备注文本放在时间字符串之后, 否则会影响执行时间的统计. 统计报告中的备注文本会自动忽略掉时间字符串; - 任务开始后会在任务标题头部增加一个标记字符串
#Ongoing:
, 任务停止后自动删除, 不要手动修改它.