|
| 1 | +--- |
| 2 | +title: "OKR + GTD + Note => Logseq" |
| 3 | +date: 2021-04-27 |
| 4 | +draft: false |
| 5 | +tags: ["自我管理", "自我提升", "目标管理", "时间管理", "笔记管理", "OKR", "GTD", "Note"] |
| 6 | +keywords: "" |
| 7 | +description: "本文分享我使用Logseq实现人生管理系统的OKR、GTD与Note的功能。" |
| 8 | +isCJKLanguage: true |
| 9 | +series: ["自我提升", "人生管理系统"] |
| 10 | +og_image: "https://img.bmpi.dev/d33c93b6-734c-cf47-a3cf-866ccfd29872.png" |
| 11 | +--- |
| 12 | + |
| 13 | +在 [我的人生管理系统](/self/life-in-plain-text/) 这篇文章中我分享了如何从个人愿景出发设定个人 OKR ,将 OKR 使用 [GTD](/tags/时间管理/) 的方法拆解成多个 TODO ,这些 TODO 所产生的笔记通过反向链接关联起来。 |
| 14 | + |
| 15 | +[Logseq](https://logseq.com/) 是一个注重隐私的开源数据库工具,由于底层是个图数据库,所以支持多种 [使用场景](https://github.com/logseq/awesome-logseq)。比如你可以用来记笔记,也可以做时间管理,具体怎么玩取决于你的想象力。 |
| 16 | + |
| 17 | +本文分享如何通过 [Logseq](https://logseq.com/) 完成 [OKR](/tags/okr/) + [GTD](/self/gtd-tools-i-used/) + [Note](/self/note-system/) 的功能,最终实现一个可以管理你的目标、时间及知识的 [人生管理系统](/series/人生管理系统/)。 |
| 18 | + |
| 19 | +## OKR |
| 20 | + |
| 21 | +```text |
| 22 | +Mission -> Vision -> Strategy -> Objectives -> Key Results |
| 23 | +``` |
| 24 | + |
| 25 | + |
| 26 | + |
| 27 | +OKR 是一个从个人愿景到设定个人目标的方法论,它能帮助组织成员/使用者聚焦最重要的事。OKR 是确保将整个组织/个人的力量都聚焦于完成对所有人/个人都同样重要的事项的一套管理方法。正是多了 Objectives,才能让参与者先思考最重要的事,然后再去拆解任务。而 KPI 却是直接确定任务。 |
| 28 | + |
| 29 | +本文不会对 OKR 做过多介绍,具体可以看孟岩的这篇关于 OKR 的好文 [找到最重要的事](https://mp.weixin.qq.com/s/1T8r7HIX8NAQqUowFOV0rg)。 |
| 30 | + |
| 31 | + |
| 32 | + |
| 33 | +如上图所示,OKR 的流程是将个人愿景拆解成多个 Objectives,之后将每个 Objective 拆解成多个 Key Result,最终每个 Key Result 变成了一个个 TODO 事项(从 OKR 到 GTD)。 |
| 34 | + |
| 35 | +让我们先把这个流程转变为一些问题域,之后再寻找这些问题域的 Logseq 的解空间。这个流程需要解决以下几个问题: |
| 36 | + |
| 37 | +- 如何确定个人愿景? |
| 38 | +- 个人愿景如何拆解为 Objectives? |
| 39 | +- Objective 如何拆解为 Key Result? |
| 40 | +- Key Result 如何拆解为 TODO? |
| 41 | +- 如何追踪 Objective 耗费的时间与资金? |
| 42 | + |
| 43 | +### 如何确定个人愿景 |
| 44 | + |
| 45 | +个人愿景的确立是个不断寻找的过程,我在很长时间都没意识到我需要一个个人愿景。直到某一天我从公司企业文化中意识到:企业需要文化来将公司的很多决策简单化,那么个人的愿景也可以将很多个人决策简单化。我们的工作和生活中会遇到很多机会和需要决策的地方,但我们的精力有限,如何筛选那些值得自己去做的事情是一件很难且耗费时间的事情。 |
| 46 | + |
| 47 | +我在 [构建终身学习体系进行自我提升](/self/build-personal-knowledge-system/#个人愿景的设定) 这篇文章中分享了我的个人愿景的设定过程。感兴趣的读者可以参考,此处不再赘述。 |
| 48 | + |
| 49 | +### 个人愿景如何拆解为 Objectives |
| 50 | + |
| 51 | +从个人愿景出发我设定了四个长期关注的纬度:健康、能力、收入与影响力。这四个纬度又可以设定以下的 Objectives: |
| 52 | + |
| 53 | +- 身体提升:拥有一个健康的身体; |
| 54 | +- 能力提升:提升技术到价值的转化效率; |
| 55 | +- 收入提升:家庭财务状况健康; |
| 56 | +- 影响力提升:在技术和投资领域建立专业影响力。 |
| 57 | + |
| 58 | +Objectives 相当于以期望未来能达成的结果而设定的大的目标,此阶段并不需要具体化。 |
| 59 | + |
| 60 | +### Objective 如何拆解为 Key Result |
| 61 | + |
| 62 | +Objective 设定后需要拆解为多个 Key Result。Key Result 需要以目前能实现的程度而设定,如果设定的太庞大,根本实现不了,那就没有意义了。以下是我根据当前我的能力范围而设定的一些 Key Result: |
| 63 | + |
| 64 | +- 2021-OKR-O1-KRs |
| 65 | + - 每月熬夜不超过4次 #2021-OKR-O1-KR-1 |
| 66 | + - 减肥5斤 #2021-OKR-O1-KR-2 |
| 67 | +- 2021-OKR-O2-KRs |
| 68 | + - 打造一个流量站,月PV达 100K #2021-OKR-O2-KR-1 |
| 69 | + - 打造一个英文内容权威站,月PV达 10K,月盈利达 $500 #2021-OKR-O2-KR-2 |
| 70 | + - 参加五次头马活动并至少演讲一次,发表3篇英文文章 #2021-OKR-O2-KR-3 |
| 71 | +- 2021-OKR-O3-KRs |
| 72 | + - 被动收入投资组合年复合收益率超 15% #2021-OKR-O3-KR-1 |
| 73 | +- 2021-OKR-O4-KRs |
| 74 | + - 在博客技术与投资领域分别输出超过10篇文章 #2021-OKR-O4-KR-1 |
| 75 | + |
| 76 | +类似 2021-OKR-O1-KRs 这种在 Logseq 是一个独立的页面,#2021-OKR-O1-KR-1 是一个标签(Tag),点击这个标签进入的就是一个 2021-OKR-O1-KR-1 的页面。这个页面就是此 Key Result 的页面,在这个页面中可以查询到所有用此页面标题作为标签的 TODO 任务。 |
| 77 | + |
| 78 | +如何用 Logseq 实现这些流程呢?先建立一个 2021 的页面,然后用 [Markdown](/dev/what-markdown-can-do/) 表格实现 OKR 的内容: |
| 79 | + |
| 80 | +```text |
| 81 | +| [[四维提升]] | Objectives | Key Results | |
| 82 | +|-|-|-| |
| 83 | +| 身体提升 | 拥有一个健康的身体 | {{embed [[2021-OKR-O1-KRs]]}} | |
| 84 | +| 能力提升 | 提升技术到价值的转化效率 | {{embed [[2021-OKR-O2-KRs]]}} | |
| 85 | +| 收入提升 | 家庭财务状况健康 | {{embed [[2021-OKR-O3-KRs]]}} | |
| 86 | +| 影响力提升 | 在技术和投资领域建立专业影响力 | {{embed [[2021-OKR-O4-KRs]]}} | |
| 87 | +``` |
| 88 | + |
| 89 | +在 Logseq 中效果如下: |
| 90 | + |
| 91 | + |
| 92 | + |
| 93 | + |
| 94 | + |
| 95 | +### Key Result 如何拆解为 TODO |
| 96 | + |
| 97 | +得益于 Logseq 的标签(Tag)能力,我们可以将任何 TODO 任务关联到某个 Key Result 上,比如以 2021-OKR-O1-KR-2 为例: |
| 98 | + |
| 99 | + |
| 100 | + |
| 101 | +如上图所示,每日日记页面中记录的 TODO 任务都通过标签关联起来了,这样我们在这个 Key Result 页面就可以看到所有关联的 TODO 任务。你可以将 TODO 放在日记页面,也可以放在某个特定的页面,比如某些和阅读相关的 TODO 都可以放在某个阅读的页面,然后通过标签关联不同的 Key Result。 |
| 102 | + |
| 103 | +### 如何追踪 Objective 耗费的时间与资金 |
| 104 | + |
| 105 | +OKR 落地到一个个 TODO 后,如何追踪某个 Objective 耗费的时间或资金是个很重要的问题。搞清楚所有 Objective 耗费的时间与资金,我们就可以在此 OKR 结束的时候知道总的收益与总的投入,甚至可以计算 ROI。于我来说,我只想大体了解下我的时间与资金有没有被浪费,能否通过一些措施提高我的单位时间收益。 |
| 106 | + |
| 107 | +Logseq 有 [极为强大的查询能力](https://logseq.github.io/#/page/Advanced%20Queries),这也是为何说它本质是个数据库的原因。我对每个 Key Result 都计算了它的所有关联 TODO 的总时间或者打卡次数(对于某些固定时间的任务如跑步就不需要计算总时间了,只需要统计完成次数即可)。 |
| 108 | + |
| 109 | +1. 通过 Key Result 标题获取其具体内容。因为我们每个 Key Result 的具体内容都在其 Objective 页面存放,所以需要使用 Logseq 的高级查询实现: |
| 110 | + |
| 111 | +``` |
| 112 | +#+BEGIN_QUERY |
| 113 | +{:title "KR内容" |
| 114 | + :query [:find (pull ?b [*]) |
| 115 | + :in $ ?current-page |
| 116 | + :where |
| 117 | + [?p :page/name ?current-page] |
| 118 | + [?b :block/ref-pages ?p] |
| 119 | + [?b :block/page ?bp] |
| 120 | + [?bp :page/name ?bp-name] |
| 121 | + [(not= "okr" ?bp-name)] |
| 122 | + (not [?b :block/marker ?marker] |
| 123 | + [(contains? #{"TODO" "DOING" "DONE" "LATER" "NOW"} ?marker)])] |
| 124 | + :inputs [:current-page]} |
| 125 | +#+END_QUERY |
| 126 | +``` |
| 127 | + |
| 128 | +2. 统计 Key Result 关联的所有完成的 TODO 任务的总耗费时间。 |
| 129 | + |
| 130 | +``` |
| 131 | +#+BEGIN_QUERY |
| 132 | +{:title [:code "花费时间 (分钟)"] |
| 133 | +:query [:find (sum ?spent-min) |
| 134 | + :in $ ?current-page |
| 135 | + :where |
| 136 | + [?p :page/name ?current-page] |
| 137 | + [?b :block/ref-pages ?p] |
| 138 | + [?b :block/marker ?m] |
| 139 | + [(contains? #{"DOING" "DONE"} ?m)] |
| 140 | + [?b :block/properties ?prop] |
| 141 | + [(get ?prop "doing") ?doing] |
| 142 | + [(get ?prop "done") ?done] |
| 143 | + [(- ?done ?doing) ?spent] |
| 144 | + [(/ ?spent 60000) ?spent-min]] |
| 145 | + :inputs [:current-page] |
| 146 | +} |
| 147 | +#+END_QUERY |
| 148 | +``` |
| 149 | + |
| 150 | +3. 统计 Key Result 关联的所有完成的 TODO 任务的总打卡次数。 |
| 151 | + |
| 152 | +``` |
| 153 | +#+BEGIN_QUERY |
| 154 | +{:title "打卡(次数)" |
| 155 | + :query [:find (count ?b) |
| 156 | + :in $ ?current-page |
| 157 | + :where |
| 158 | + [?p :page/name ?current-page] |
| 159 | + [?b :block/marker ?marker] |
| 160 | + [?b :block/ref-pages ?p] |
| 161 | + [(= "DONE" ?marker)]] |
| 162 | + :inputs [:current-page]} |
| 163 | +#+END_QUERY |
| 164 | +``` |
| 165 | + |
| 166 | +4. 统计资金 |
| 167 | + |
| 168 | +资金使用 `Beancount` 统计,将每笔关联的账目用 Tag 关联即可统计出该 Tag 所涉及的总资金。 |
| 169 | + |
| 170 | +最终的效果如下: |
| 171 | + |
| 172 | + |
| 173 | + |
| 174 | +## GTD |
| 175 | + |
| 176 | +我有多年使用 GTD 来管理时间的经验。一开始我使用 OmniFocus 来实践 GTD,但逐渐这种复杂的 GTD 流程让我疲惫不堪。逐渐我开始使用自己开发的工具去管理每日待办事项,每天我会通过邮件来接收正在做或者重要未做的事项。我对时间管理的使用经验见 [我的时间管理工具](/self/gtd-tools-i-used/) 这篇文章。本来以为我会一直使用 V3 版的时间管理工具,直到我遇到了 Logseq,一个可以统一 OKR、GTD 与 Note 的工具,所以是时候升级我的时间管理工具了,可以理解为 Logseq 的 GTD 就是我的时间管理工具 V4 版。 |
| 177 | + |
| 178 | +一个简单的 GTD 系统可以让我直观的了解到时间四象限的待办事项,如下图: |
| 179 | + |
| 180 | + |
| 181 | + |
| 182 | +- 📅 在做计划事项。标记为`重要`的或者和任何 `OKR 相关`的`在做`任务。 |
| 183 | +- 🌞 待做计划事项。标记为`重要`的或者和任何 `OKR 相关`的`待做`任务。 |
| 184 | +- ⏰ 在做其他事项。任何`不重要`的或者和 `OKR 不相关`的`在做`任务。 |
| 185 | +- 🚮 待做其他事项。任何`不重要`的或者和 `OKR 不相关`的`待做`任务。 |
| 186 | + |
| 187 | +如何用 Logseq 实现如上图所示的效果?主要用到 Logseq 三个特性来完成这个功能: |
| 188 | + |
| 189 | +- TODO 任务支持; |
| 190 | +- 用 Logseq 自定义 CSS 定制界面; |
| 191 | +- 用 Logseq 高级查询获取每个象限的 TODO 任务。 |
| 192 | + |
| 193 | +Logseq 新建一个 TODO 很简单,比如: |
| 194 | + |
| 195 | +``` |
| 196 | +TODO 读《毛选》 |
| 197 | +DOING 读《毛选》 |
| 198 | +DONE 读《毛选》 |
| 199 | +``` |
| 200 | + |
| 201 | +这就完成了一个 TODO 任务从待办 -> 在做 -> 完成 的全流程。 |
| 202 | + |
| 203 | +我先参考了这篇 [[css+template] eisenhower matrix](https://discuss.logseq.com/t/css-template-eisenhower-matrix/526) 帖子实现了整个框架,之后修改了它的 CSS 样式,我的自定义 CSS 版本见 [custom.css](https://gist.github.com/madawei2699/61cf9601a443df21a9fabb282723936c)。 |
| 204 | + |
| 205 | +最后需要高级查询获取每个象限的 TODO 任务。 |
| 206 | + |
| 207 | +- 📅 在做计划事项。 |
| 208 | + |
| 209 | +``` |
| 210 | +#+BEGIN_QUERY |
| 211 | +{:query [:find (pull ?b [*]) |
| 212 | + :where |
| 213 | + [?b :block/marker ?marker] |
| 214 | + (not (not [?b :block/ref-pages ?p] |
| 215 | + [?p :page/name ?page-name] |
| 216 | + [(clojure.string/includes? ?page-name "okr")]) |
| 217 | + (not [?b :block/priority ?priority] |
| 218 | + [(contains? #{"A" "B" "C"} ?priority)])) |
| 219 | + [(contains? #{"DOING" "NOW"} ?marker)]] |
| 220 | + } |
| 221 | +#+END_QUERY |
| 222 | +``` |
| 223 | + |
| 224 | +- 🌞 待做计划事项。 |
| 225 | + |
| 226 | +``` |
| 227 | +#+BEGIN_QUERY |
| 228 | +{:query [:find (pull ?b [*]) |
| 229 | + :where |
| 230 | + [?b :block/marker ?marker] |
| 231 | + (not (not [?b :block/ref-pages ?p] |
| 232 | + [?p :page/name ?page-name] |
| 233 | + [(clojure.string/includes? ?page-name "okr")]) |
| 234 | + (not [?b :block/priority ?priority] |
| 235 | + [(contains? #{"A" "B" "C"} ?priority)])) |
| 236 | + [(contains? #{"TODO" "LATER"} ?marker)]] |
| 237 | + } |
| 238 | +#+END_QUERY |
| 239 | +``` |
| 240 | + |
| 241 | +- ⏰ 在做其他事项。 |
| 242 | + |
| 243 | +``` |
| 244 | +#+BEGIN_QUERY |
| 245 | +{:query [:find (pull ?b [*]) |
| 246 | + :where |
| 247 | + [?b :block/marker ?marker] |
| 248 | + (not [?b :block/ref-pages ?p] |
| 249 | + [?p :page/name ?page-name] |
| 250 | + [(clojure.string/includes? ?page-name "okr")]) |
| 251 | + (not [?b :block/priority ?priority] |
| 252 | + [(contains? #{"A" "B" "C"} ?priority)]) |
| 253 | + [(contains? #{"DOING" "NOW"} ?marker)]] |
| 254 | + } |
| 255 | +#+END_QUERY |
| 256 | +``` |
| 257 | + |
| 258 | +- 🚮 待做其他事项。 |
| 259 | + |
| 260 | +``` |
| 261 | +#+BEGIN_QUERY |
| 262 | +{:query [:find (pull ?b [*]) |
| 263 | + :where |
| 264 | + [?b :block/marker ?marker] |
| 265 | + (not [?b :block/ref-pages ?p] |
| 266 | + [?p :page/name ?page-name] |
| 267 | + [(clojure.string/includes? ?page-name "okr")]) |
| 268 | + (not [?b :block/priority ?priority] |
| 269 | + [(contains? #{"A" "B" "C"} ?priority)]) |
| 270 | + [(contains? #{"LATER"} ?marker)]] |
| 271 | + } |
| 272 | +#+END_QUERY |
| 273 | +``` |
| 274 | + |
| 275 | +最后将这个页面设置为首页就可以很方便看到今日待办事项。Logseq 对移动端的支持也可以,所以移动端的问题也解决了。 |
| 276 | + |
| 277 | +## Note |
| 278 | + |
| 279 | +在 GTD 中我会不断的建立一些 TODO 任务,这些 TODO 任务也可以关联很多页面,在这些页面里我放入了相关的笔记,方便我快速找到此任务相关的上下文背景知识。**任务与知识在这一刻通过链接建立了关联,知识不再是孤立静态的东西,而是有了和某件事关联的能力,有了时间的属性。** |
| 280 | + |
| 281 | +在 Logseq 中建立一个页面是很简单而高频的操作,通过 `[[Logseq]]` 即可建立一个 Logseq 标题的页面。 |
| 282 | + |
| 283 | +我在 [我的笔记系统](/self/note-system/) 中分享过我的公开笔记系统,一个基于 [TiddlyWiki](https://wiki.bmpi.dev/) 的笔记系统。但是私有笔记系统我一直用 Markdown 格式的文本并存储至 GitHub,这种方式比较简陋,没法对私有笔记做进一步的利用。甚至一度我想用 Notion 来记录私有笔记,但是因其商业化的问题,考虑到早期使用 Evernote 的痛点,我放弃了这个想法。当找到 Logseq 后,我发现这就是我要用的私有笔记工具。 |
| 284 | + |
| 285 | + |
| 286 | + |
| 287 | +如上图可以看出 Logseq 借鉴了很多笔记工具的特性,比如它拥有: |
| 288 | + |
| 289 | +- Roam Research 的图数据库、每日笔记、反向链接、右边栏; |
| 290 | +- Workflowy 的大纲视图; |
| 291 | +- Tiddlywiki 的页面嵌入、高级查询; |
| 292 | +- Emacs Org Mode 的属性设置、时间记录。 |
| 293 | + |
| 294 | +由于本文不是一个详细介绍 Logseq 功能的文章,想了解更多功能可以参考 [Logseq 的帮助手册](https://logseq.github.io/#/page/Changelog)。 |
| 295 | + |
| 296 | +这是我在使用 Logseq 几个月后,知识图谱的形状,它像宇宙中的某个星座: |
| 297 | + |
| 298 | + |
| 299 | + |
| 300 | +知识点由一座座孤岛通过反向链接建立了关联,我主要研究的几个领域在图谱中如恒星一样闪闪发光,这是我的知识宫殿。你的呢? |
0 commit comments