QuietHeart's Site

GTD实践


1 起点——GTD框架

  • 经历了捕捉之后,或者确认将采用新的GTD规则后,将依据规则对捕捉到的新条目,以及没有应用新规则的旧条目进行处理,组织整理,回顾,执行等。
  • 实践GTD之时,将GTD的处理分为:处理、组织整理、回顾、执行四个阶段(其实处理前面还有一个捕捉,执行之后有一个归档)。

2 实现-GTD流程

2.1 说明

始于:<2019-10-15 二 16:15>
目前(<2019-10-11 五 17:04>)而言,为使GTD流程可靠,将遵循后面的流程
(no term)
针对GTD流程的大致管理思路,参考 一套完整的GTD流程的思考与实践
表述整体流程框架的配置
以不同的视图,表述GTD处理流程的各个阶段,大致如下:

2.1.1 Orgmode Agenda配置

使用Agenda做为过滤条件,标题TODO标记做为状态。

;;custom view
(defun my-custom-view
    (searchstr)
  ;;(org-tags-view nil "PRIORITY=\"B\"")
  (org-tags-view nil searchstr))

(setq org-agenda-custom-commands nil)

;;Setup Gtd views
(setq gtd-views '("G" . ">GTD process(p-process, o-organize, r-review, a-active, x-others)"))
(setq gtd-views-process '("Gp" "GTD process view." (my-custom-view "")))
(setq gtd-views-organize '("Go" "GTD organize view." (my-custom-view "")))
(setq gtd-views-review '("Gr" "GTD review view." (my-custom-view "")))
(setq gtd-views-action '("Ga" "GTD active view." (my-custom-view "")))
(setq gtd-views-others '("Gx" "GTD others." (my-custom-view "")))

(add-to-list 'org-agenda-custom-commands gtd-views t)
(add-to-list 'org-agenda-custom-commands gtd-views-process t)
(add-to-list 'org-agenda-custom-commands gtd-views-organize t)
(add-to-list 'org-agenda-custom-commands gtd-views-review t)
(add-to-list 'org-agenda-custom-commands gtd-views-active t)
(add-to-list 'org-agenda-custom-commands gtd-views-others t)

2.1.2 MLO配置思路

使用Flag做为状态,使用视图做为过滤条件。

与流程相关的视图,在概览视图部分,包括:

  • 收集箱
  • 组织整理
  • 回顾列表
  • 活动列表

2.2 处理阶段

主要分辨条目。

符合如下流程:

  • 输入——待处理条目:捕捉的 INBOX , 以及 不符合新规则的条目
  • 输出——处理后条目:重点确认 状态类别优先级 ,可能会分配其它更多属性。

注意:

  • INBOX,来自各类捕捉途径最终信息的汇集之处(参考:收集),处理的时候尽量由新到旧进行处理保证公平不遗漏。
  • 不符合规则的条目,是指如果更新GTD的规则,GTD系统中哪些没有应用新规则的,还在遵循旧规则的条目(便于将来扩展)。
  • 状态,这方面注意的是,日程/提醒:是具有执行时间的原子类别;下一步及其它无执行时间的原子类别;参考:待归档。(具体参考:状态 )。
  • 类别,主要是原子/非原子(参考:第1层:原子行动 元素之间的关联 )。
  • 优先级,主要有高优先级、低优先级,前者近期关注后者推迟关注(参考:优先级与星标),一般处理阶段大致估计一个优先级(默认C),后续阶段仔细处理。

2.2.1 Orgmode配置

(setq gtd-views-process '("Gp" "GTD处理阶段:两分钟任务(执行),分配 *状态*、*类别*、*优先级*,其它。 "
                                 ;;输入:INBOX/不符合规则内容
                                 ((todo "INBOX"
                                        ;;((org-agenda-sorting-strategy '(priority-down scheduled-up)))
                                        )

                                  ;;Global options
                                  (;;(org-agenda-regexp-filter-preset '("-PROJECT" "-TODO"))
                                   ;;(org-agenda-regexp-filter-preset '("-PROJECT" "-TODO"))
                                   ))))
  • 通过 todo "INBOX"... 命令保证过滤出 INBOX,
  • 通过默认设置的 org-agenda-files, 保证若更新GTD规则,可以方便的添加新命令进行过滤。

2.2.2 MLO配置

目前待处理任务主要集中在收集箱内,

日后视情况可能会为不符规则的内容添加相关过滤视图。

2.3 组织整理

主要让体系合理。

应符合如下流程:

  • 输入——处理后条目:主要是 无回顾条目孤立条目待调整条目
  • 输出——组织整理后:重点确认 非日程的 回顾周期 、行动的 项目/范围 、*合理属性* (如 类别 、 优先级 、 情景/提醒) , 可能有其它属性。

注意:

  • 无回顾条目,无时间属性的条目。所有条目都应有回顾机会,低优先级条目以定期回顾习惯模拟提醒,易添加,若处理时先添加回顾再添加范围,则只需关注孤立条目即可。
  • 孤立条目,没有领域的就是孤立条目。所有条目要么是非原子的项目/任务,要么是原子行动,保证必属某一领域(参见:(45min/2) 第3层:职责、领域)。
  • 待调整条目, 可能由于对活动列表的处理,或者一些其它处理的遗漏、模糊导致分类不明确、属性不合理、同步/更新不完整的现象,对这样的条目称作待调整条目。
  • 回顾周期,尤其适于无回顾条目,日程/提醒(有时间属性、可能重复)无需回顾,无时间低优先级原子行动有回顾周期,项目/参考等非行动视情况添加回顾防止遗忘。
  • 项目/范围,尤其适于孤立条目,任务分解和归并、理顺思路使条目间更具有条理性(类别进行调整),一下不用太细可将回顾周期设置频繁些多次调整合适。
  • 合理属性,尤其适于待调整条目,模糊、不合理条目如原子/非原子类别不对应应有的状态、无日期日程、有情景提醒、高优先级回顾等,更新后类别相应也应调整。
  • 情景/提醒,提醒以时间为提示所以无需情景;日程一般也无需情景但若对时间不是特严格视情况可能有情景;无时间的原子行动才有情景;参考等非行动不用情景。
  • 其它, 比如待调整到活动列表中的条目的高优先级,以及有待日后回顾的低优先级,可能顺便会确认每日计划的青蛙。

2.3.1 Orgmode配置

(setq gtd-views-organize '("Go" "GTD组织整理:确认 行动的 *情景/提醒*、*项目/范围*、*回顾周期*、合理的 *优先级*,其它."
                                  ;;条件1、孤立条目文件(分布于四象限),2、项目文件中没有仔细规划的原子行动,3、没有SCHEDULE、及无指定范围的内容
                                  ((tags-todo "FILE={[1-4]_.*Important_.*_Urgent.org}|FILE={0_inbox.org}/!+AGENDA|+NEXT|+LATER|+{WAIT.*}|+{MAYBE.*}|+REFERENCE|+CANCEL|+DONE"
                                              ((org-agenda-files
                                                (list
                                                 (concat org-directory "gtd/1_Important_and_Urgent.org")
                                                 (concat org-directory "gtd/2_Important_but_not_Urgent.org")
                                                 (concat org-directory "gtd/3_Not_Important_but_Urgent.org")
                                                 (concat org-directory "gtd/4_Not_Important_and_not_Urgent.org")))))

                                   (tags-todo "CATEGORY<>{Q[1-4]}/!+AGENDA|+NEXT|+LATER|+{WAIT.*}|+{MAYBE.*}|+REFERENCE|+CANCEL|+DONE"
                                              ((org-agenda-files
                                                (list
                                                 (concat org-directory "gtd/_life.org")
                                                 (concat org-directory "gtd/_study.org")
                                                 (concat org-directory "gtd/_work.org")
                                                 (concat org-directory "gtd/_others.org")))))

                                   (tags-todo "CATEGORY={Q[1-4]}/!+PROJECT|+TODO|+STOP|+FINISHED"
                                              ((org-agenda-files
                                                (list
                                                 (concat org-directory "gtd/_life.org")
                                                 (concat org-directory "gtd/_study.org")
                                                 (concat org-directory "gtd/_work.org")
                                                 (concat org-directory "gtd/_others.org")))))

                                   (tags-todo "SCHEDULED<>\"\"&PRIORITY<\"C\"/!+NEXT|+LATER|+{WAIT.*}|+{MAYBE.*}|+REFERENCE|+CANCEL|+DONE"
                                              ((org-agenda-files
                                                (list
                                                 (concat org-directory "gtd/_life.org")
                                                 (concat org-directory "gtd/_study.org")
                                                 (concat org-directory "gtd/_work.org")
                                                 (concat org-directory "gtd/_others.org")))))

                                   (tags-todo "LEVEL<=2|SCHEDULED=\"\""
                                              (;;(org-use-property-inheritance nil)
                                               (org-agenda-files
                                                (list
                                                 (concat org-directory "gtd/_life.org")
                                                 (concat org-directory "gtd/_study.org")
                                                 (concat org-directory "gtd/_work.org")
                                                 (concat org-directory "gtd/_others.org")))))


                                   ;;Global options
                                   (;;(org-agenda-regexp-filter-preset '("-PROJECT" "-TODO"))
                                    ;;(org-agenda-regexp-filter-preset '("-PROJECT" "-TODO"))
                                    (org-agenda-sorting-strategy
                                     '(todo-state-up priority-down))
                                    ))))
  • 通过 tags-todo "FILE={[1-4]_.*Important_.*_Urgent.org}"... 从孤立文件导出孤立任务,其中 inbox.org 中也包含了孤立任务,是减少refile操作次数。
  • 通过 tags-todo "CATEGORY<>{Q[1-4]}/!+AGENDA|+NEXT|+LATER|+{WAIT.*}|+{MAYBE.*}|+REFERENCE|+CANCEL|+DONE"...tags-todo "CATEGORY={Q[1-4]}/!+PROJECT|+TODO|+STOP|+FINISHED"... 过滤出需要规划的原子类别、非原子类别的行动、任务、项目。
  • 通过 tags-todo "SCHEDULED<>\"\"&PRIORITY<\"C\"/!+AGENDA|+NEXT|+LATER|+{WAIT.*}|+{MAYBE.*}|+REFERENCE|+CANCEL|+DONE 过滤出要调整的高优先级回顾条目,要么保留回顾优先级降低,要么去掉回顾保留高优先级。
  • 通过 tags-todo "LEVEL<=2|SCHEDULED =\"\""... 过滤出无回顾周期的条目, 顺便将一些遗漏的孤立任务(LEVEL<=2)也包含进来

几点注意:

  • 项目范围、回顾、层级的调整可能会将其从子视图上刷新掉
  • 优先级、情景的调整,不会影响过滤性。
  • 为便于处理,下面子视图更新一般不会影响上面的。如开始的孤立集中了分配处理后的条目不遗漏;最后的无回顾,将回顾频繁些可弥补前面处理的不完善。

2.3.2 MLO配置

集中在 组织整理 视图中,基本过滤出无回顾、孤立、待调整条目。

过滤条件为:

1. IsFoder为假
3. & 如下
3.1 无回顾条目(不存在NextReview & 不存在Reminder & Flag不等于日程)
3.2 | 孤立条目(ParentName是 职业、工作、职场、创业、进修、学习、管理、探索……)
3.3 | 待调整条目如下
3.3.1 是项目却有状态(Project&有Flag)
3.3.2 | 是日程却没有时间(Flag等于日程&StartDateTime不存在&截止不存在)
3.3.3 | 高优先级回顾条目(Flag大于等于下一步&有NextReview存在&(紧急高|重要高|标星))
3.3.4 | 非日程却有开始截止时间(Flag大于日程&(截止存在|StartDateTime存在))
4. & 未完成条目(Complete为假)

以标旗(即状态)分组,按照紧急程度、重要程度排序。

2.4 回顾阶段

主要防止遗忘。

回顾这个过程比较特殊,因为它包含了两个部分的内容:活动列表、和非活动列表的回顾。至于活动列表部分的内容,参考 执行阶段 ,里不再重复。

符合如下流程:

  • 输入——组织整理后条目:主要是组织整理之后的 日程表待回顾列表
  • 输出——回顾后:主要是调整优先级、安排日程和回顾、提醒与情景、含少量的组织整理工作。包含 活动前期活动后期回顾阶段 三个方面。

注意:

  • 日程表,是指具有时间、提醒这些时间信息日程行动的集合,主要是当日及过期时间的条目。
  • 待回顾列表,一般而言就是除去日程表之外在当日及过期回顾的列表,借助定期浏览的习惯以备遗忘那些没确定时间属性的条目(一般关注低优先级,高优先级处理时顺带回顾了)。
  • 活动列表,是指当日日程、提醒、高优先级行动(无回顾和今日以前的)、备忘,其中包括日计划的青蛙事项(即活动列表中今日打算必须做的事情),是本日执行行动的参照。
  • 活动前期,主要安排活动列表,如每日计划,调高今日待办优先级、并导致活动列表更新(一次性活动条目其回顾属性可被去掉,因为自然执行时回顾了)。
  • 活动后期,是指一天活动之后将活动列表中的条目按照实际完成的情况更新同步相关属性为最新。
  • 回顾阶段,主要是至活动前期、活动后期、以及日间空闲之时整理已有的内容补充、优化处理/组织整理/行动期间 遗漏的事项确保体系不断完善。

2.4.1 Orgmode配置(待回顾条目)

(setq gtd-views-review '("Gr" "GTD 回顾,确认日计划、更新活动列表、以及非活动列表(低优先级)"
                                ;;输入:*待回顾条目* 。
                                ((agenda ""
                                         ((org-agenda-span 2)
                                          (org-agenda-files
                                           (list
                                            (concat org-directory "gtd/_life.org")
                                            (concat org-directory "gtd/_study.org")
                                            (concat org-directory "gtd/_work.org")
                                            (concat org-directory "gtd/_others.org")))

                                          (org-agenda-skip-function
                                           '(org-agenda-skip-entry-if 'nottodo
                                                                      '("NEXT" "WAIT/FORWARD" "LATER" "MAYBE/FUTURE" "CANCEL")))
                                          (org-agenda-sorting-strategy
                                           '(todo-state-up priority-down))))


                                 (agenda ""
                                         ((org-agenda-span 2)
                                          (org-agenda-files
                                           (list
                                            (concat org-directory "gtd/_life.org")
                                            (concat org-directory "gtd/_study.org")
                                            (concat org-directory "gtd/_work.org")
                                            (concat org-directory "gtd/_others.org")))

                                          (org-agenda-skip-function
                                           '(org-agenda-skip-entry-if 'nottodo
                                                                      '("PROJECT" "TODO" "STOP")))
                                          (org-agenda-sorting-strategy
                                           '(todo-state-up priority-down))))

                                 (agenda ""
                                         ((org-agenda-files
                                           (list
                                            (concat org-directory "gtd/_life.org")
                                            (concat org-directory "gtd/_study.org")
                                            (concat org-directory "gtd/_work.org")
                                            (concat org-directory "gtd/_others.org")))

                                          (org-agenda-skip-function
                                           '(org-agenda-skip-entry-if 'nottodo
                                                                      '("REFERENCE" "DONE" "FINISHED")))))

                                 ;;Global options
                                 (;;(org-agenda-regexp-filter-preset '("-PROJECT" "-TODO"))
                                  ;;(org-agenda-regexp-filter-preset '("-PROJECT" "-TODO"))
                                  ))))
  • 第一个 agenda ""... 命令过滤出Agenda外的原子行动,(这里并未过滤掉高优先级回顾,因为组织整理阶段自动会将其处理,这里出现的话也会弥补组织整理的遗漏)。
  • 第二个 agenda ""... 命令过滤出非原子条目,并以高优先级在前排列(因为非原子是不具体的处理,不会出现在活动列表中所以高低优先级一并回顾)
  • 第三个 agenda ""... 命令过滤出非行动内容,可能会定期了解、参考、甚至之后的归档确认。
  • 最后,活动前期的日计划、活动后期的活动更新,结合后面的活动列表一并回顾。

注:回顾阶段跨越了:回顾(回顾非活动列表)、执行(活动列表)两个阶段的过滤视图。活动列表其实是总回顾输入的子集(当日高优先级行动+日程)。

2.4.2 MLO配置

集中在 回顾 视图中,基本过滤出待回顾的非日程条目。

过滤条件为
1. 今天及以前的待回顾条目 (NextReview 不晚于 today)
2. & 如下
2.1 非日程条目 (Flag 不等于 日程)
2.2 & 无时间信息条目,如下
2.2.1 无提醒(Reminder为假)
2.2.2 | 无开始截止时间(截止不存在&StartDateTime不存在)
3. & 未完成(Complete为假)

根据文件夹分组,按照下次回顾日期排序,会显示分级信息,包含所有匹配项目的子级

2.5 执行阶段

主要实现任务。

对于执行阶段,其中的2分钟任务在处理阶段进行了,具体参考 处理阶段

符合如下流程:

  • 输入——组织整理、回顾之后的活动列表,INBOX处理阶段的 2分钟任务
  • 输出——尽量执行完青蛙行动,相应的行动尽可能完成,没有完成的重新分配时间至将来,或不愿处理的降至低优先级并添加日后回顾属性。

注意:

  • 2分钟任务 一般是临时发生的紧急处理的、或者处理阶段顺便处理掉的小事件,如果堆积于GTD体系中,管理其消耗的时间精力反而大于本身能够完成所需时间。

2.5.1 Orgmode配置

(setq gtd-views-action '("Ga" "GTD活动列表:待安排任务(回顾前期)、待执行任务(执行)、待更新任务(回顾后期)"
                                ;;输入:组织、整理、回顾之后的内容 。
                                ((agenda ""
                                         ((org-agenda-span 1)
                                          (org-agenda-files
                                           (list
                                            (concat org-directory "gtd/_life.org")
                                            (concat org-directory "gtd/_study.org")
                                            (concat org-directory "gtd/_work.org")
                                            (concat org-directory "gtd/_others.org")))

                                          (org-agenda-skip-function
                                           '(org-agenda-skip-entry-if 'nottodo
                                                                      '("AGENDA")))
                                          (org-agenda-sorting-strategy
                                           '(priority-down))))

                                 (tags-todo "CATEGORY={Q[1-4]}&PRIORITY<\"C\"-SCHEDULED>\"<today>\"/!+NEXT|+{WAIT.*}|+REFERENCE"
                                            ((org-agenda-files
                                              (list
                                               (concat org-directory "gtd/_life.org")
                                               (concat org-directory "gtd/_study.org")
                                               (concat org-directory "gtd/_work.org")
                                               (concat org-directory "gtd/_others.org")))
                                             (org-agenda-sorting-strategy
                                              '(todo-state-up priority-down))))

                                 ;;Global options
                                 (;;(org-agenda-regexp-filter-preset '("-PROJECT" "-TODO"))
                                  ;;(org-agenda-regexp-filter-preset '("-PROJECT" "-TODO"))
                                  ))))
  • 通过 agenda "" ... 过滤出所有的 AGENDA 日程。
  • 通过 tags-todo "CATEGORY={Q[1-4]}&PRIORITY<\"C\"-SCHEDULED... 过滤出所有非日程高优先级行动(去掉SCHEDULED是今天以后的)。

注意:执行阶段跨越了处理(2分钟原则)、执行(活动列表) 两个阶段的视图。

2.5.2 MLO配置

集中在 活动列表 视图中,基本过滤出待办原子条目。

过滤条件为:

1. 原子条目(Project为假)
2. & 如下
2.1 星标(Starred为真)
2.2 | 最高紧急优先级(Urgency等于200)
2.3 | 最高重要性 (Importance等于200)
2.4 | 日程条件如下
2.4.1 是日程(Flag等于日程)
2.4.2 & 有提醒(Reminder为真)
2.4.3 & 开始或截止日程在今天及以前(StartDateTime早于Today+1|截止早于Today+1)
2.5 | 高紧急度下一步(Flag等于下一步&Urgency大于150)
2.6 | 高紧急度等待(Flag等于等待&Urgency大于150)
2.7 | 高重要性参考(Flag等于参考&Importance大于150)
3. & 为完成条目(Complete为假)

排序依次根据标星、开始日期、紧急程度、重要程度,不分级

3 其它

进一步的完善,参见:GTD实践相关

3.1 Orgmode操作技巧

3.1.1 如何不用更改状态和优先级标记今日处理过的高优先级

如果优先级今日处理之后,日后还要处理,这样优先级和状态就不需要更改,可是在活动列表视图上,如何将其标记从活动列表中去掉呢?

这里的技巧是:

  • 在orgmode的对应Agenda视图中,为高优先级加入Schedule,而Schedule的日期是今日以后(不包括今日),同时也计划了将来何时再次处理这个高优先级。
  • 在显示活动列表时,去掉具有今日以后schedule的高优先级待办。
  • 回顾的时候,对于高优先级的待办,如果想要处理的时候,自然会处理

这样,到了指定日因为其Schedule不再是今日以后,所以自动会显示;而处理之后因为变成了将来,会消失,也减少了对今日任务的干扰。

这种非法的高优先级条目有Schedule内容,也会在活动后回顾处理的时候,将其处理成合法的:因为明天还要处理,所以优先级保留,Schedule会被处理掉。

日计划的时候,也会有这样的一种情况:今天回顾的条目,安排为高优先级,但是却忘记了去掉其SCHEDULED,导致活动列表不显示了,但是这样的事情,是自己的失误,无关软件,自己的失误应当承担一定的风险,反正倒了明天也会再次出现的。

3.1.2 周期回顾不用设置成重复的任务,只需要每次都修改SCHEDULE为下次即可

周期性的回顾,不用设置成重复的任务,只需每次回顾后,设置好下次回顾的时间就行,这样也免得设置状态了 (实在不行可以在标题上标记期望的回顾间隔,防止思考过于片面?其实在 LOGBOOK 中已经有了相关的回顾日志,可以了解细节)

在更改SCHEDULE的时候,可加入LOG信息,修改SCHEDULE的时候,增加日志信息的配置:

(setq org-log-reschedule 'time)