Why I no longer use LOGseq for taskmanagement (but somehow still do)

I don’t really model my work using swim lanes anymore. My main page and its sections are included below.

I get done what I get done today and what doesn’t get done just gets bumped forward to tomorrow. I don’t fret at the bumping. But I do have the concept of hats (or roles, what is ordinarily tied to a bucket or swim lane). That is, if you write a blog post you may wear a Writing, Editing, and Publishing cap. I don’t generally wear two hats at once and I know which hat I’m wearing when I work on a task even if I’m not using buckets. If I need the reminder, I can just add a tag (e.g. #Writing, #Publishing) to the task/subtask. That #Writing tag will link to a page about that hat/activity. The point is my buckets are ephemeral. Maybe a task is appropriately tagged, maybe not, but I know what I’m doing when I’m doing it.

Some of the tasks I mark with a #25m tag. This reminds me that I’m just committed to about 25 minutes of work, what some call a pomodoro. The Logseq feature I lean on most is repeating tasks. In this way every project is itself a repeating task with subtasks. When I put in the time (on any of the subitems) I check it off and it bumps itself into the future. I use the Schedule date repeater to designate the habit and the Deadline only for real world deadlines. Even if a task has a Deadline it almost always has a Schedule. I would call what I do a systems approach (see James Clear’s Atomic Habits). I just keep chipping away a bit at a time until the thing is done.

I read 2 books on Kanban and dozens of articles, but in the end, when used personally, there was no special sauce in the swim lanes, the boards, and the dragging and dropping between columns. My major takeaways were limit the amount of work (WIP limits), limit lead time (ship started things to get them off the list), and have a way to visually see all the work in progress at once. But, like you, I am in a constant state of flux, rejiggering priorities daily. And I rarely completely everything listed for a given day. I don’t beat myself up for just bumping things forward. If something gets bumped forward (avoided) too frequently I mark it as a Lemon and focus on getting it off the list.

Also, and I think we may be on the same page, I don’t actually use parent level outline items as buckets. I use Logseq queries as buckets. By changing metadata I move things between buckets.

I’ve spent years trying different tools and I eventually settled on Logseq. I determined that in almost every case the productivity issue was me or my system and not the tool. I tried Trello for a while. Logseq is as good as it gets. It does well enough in the business of getting things done that I am no longer trying alternatives. It local-first software and Github friendly and that’s good enough for me.

Here are my current query buckets:

 :default-queries
 {:journals
  [
    {:title [:h4 "⌛ Overdue"]
      :query [:find (pull ?block [*])
              :in $ ?start ?next
              :where
              [?block :block/marker ?marker]
              [(contains? #{"TODO","DOING"} ?marker)]
              (or
                [?block :block/scheduled ?d]
                [?block :block/deadline ?d])
              [(> ?d ?start)]
              [(< ?d ?next)]]
              :result-transform (fn [result]
                        (sort-by (fn [h]
                                   (or (get h :block/scheduled) (get h :block/deadline))) result))
      :inputs [:365d-before :0d-before]
      :collapsed? false},
    {:title [:h4 "⏰ Today"]
      :query [:find (pull ?block [*])
              :in $ ?day
              :where
              [?block :block/marker ?marker]
              (or
                [?block :block/scheduled ?d]
                [?block :block/deadline ?d])
              [(contains? #{"TODO","DOING"} ?marker)]
              [(= ?d ?day)]]
      :result-transform
        (fn [result]
          (sort-by (fn [h] [(get h :block/priority "Z") (get h :block/created-at)]) result))
      :inputs [:today]
      :collapsed? false},
    {:title [:h4 "🍿 Watch"]
      :query [:find (pull ?b [*])
            :where
            (or [?b :block/priority "A"] [?b :block/priority "B"] [?b :block/priority "C"])
            [?b :block/marker ?marker]
            [?b :block/ref-pages ?p]
            (or [?p :block/name "movie"] [?p :block/name "show"])
            (not [?b :block/scheduled ?d])
            (not [?b :block/deadline ?d])
            [(contains? #{"TODO","DOING"} ?marker)]]
    :result-transform
        (fn [result]
          (sort-by (fn [h] [(get h :block/priority "Z") (get h :block/created-at)]) result))
    :collapsed? true},
    {:title [:h4 "☀️ Tomorrow"]
      :query [:find (pull ?block [*])
              :in $ ?day
              :where
              [?block :block/marker ?marker]
              (or
                [?block :block/scheduled ?d]
                [?block :block/deadline ?d])
              [(contains? #{"TODO","DOING"} ?marker)]
              [(= ?d ?day)]]
      :result-transform
        (fn [result]
          (sort-by (fn [h] [(get h :block/priority "Z") (get h :block/created-at)]) result))
      :inputs [:1d-after]
      :collapsed? false},
    {:title [:h4 "📆 Sooner"]
      :query [:find (pull ?block [*])
              :in $ ?start ?next
              :where
              [?block :block/marker ?marker]
              (or
                [?block :block/scheduled ?d]
                [?block :block/deadline ?d])
              [(contains? #{"TODO","DOING"} ?marker)]
              [(> ?d ?start)]
              [(< ?d ?next)]]
      :result-transform (fn [result]
                (sort-by (fn [h]
                            (or (get h :block/scheduled) (get h :block/deadline))) result))
      :inputs [:1d-after :7d-after]
      :collapsed? false},
    {:title [:h4 "📅 Later"]
      :query [:find (pull ?block [*])
              :in $ ?start ?next
              :where
              [?block :block/marker ?marker]
              (or
                [?block :block/scheduled ?d]
                [?block :block/deadline ?d])
              [(contains? #{"TODO","DOING"} ?marker)]
              [(> ?d ?start)]
              [(< ?d ?next)]]
      :result-transform (fn [result]
                (sort-by (fn [h]
                            (or (get h :block/scheduled) (get h :block/deadline))) result))
      :inputs [:6d-after :90d-after]
      :collapsed? true}
]}

The “Watch” is a reminder for some family time. We watch shows/movies a few nights a week.

7 Likes