grm blog. Work is copyrighted unless otherwise stated.
2023-03-12 Sun
^

Loose planning

I like the notion of planning ahead and the general gtd mindset but I very much dislike strict deadlines and due dates as well as concrete schedules that span weeks.

I will attempt to implement a gtd workflow that fits my needs. This document is the architectural blueprint of said workflow. Ofcourse it's based on emacs and org-mode.

General goals

  • standard scheduling supported (e.g. doctor's appointments, birthdays, …)
  • leverage the org-agenda to present the user a plethora of preplanned tasks

GTD Pros & Cons

pros:

  • never miss appointments
  • get things done
  • create habits
  • do more with your time

cons:

  • tight deadlines
  • rigid scheduling induces anxiety
  • doesn't accomodate for each day's impulsions
  • actually limits impulsive actions by design

target workflow

org-mode specific:

  • the org mode entries have a tree structure
  • leafs of this tree should be actionable (except notes), if not they shouldn't be a leaf
  • before a node can be marked as done, all the children must be marked as done as well
<FILE>
a group of <ENTRIES>
<ENTRY>
a todo, a project, a note
<TODO>
singular task with scheduling info
<PROJECT>
bigger task with subtasks without scheduling
<NOTE>
info, non actionable
<TAG>
used for general categories and to group <ENTRIES> from different <FILES> togheter
  • catpure an <ENTRY>
    • prompt for <FILE>
    • prompt if it should be attached on another entry
    • prompt for type of entry
    • prompt for <TAG>
    • add content
  • agenda view
    • leaf view
    • scheduled entries for the week
    • leaf nodes from actionable entries (todos and projects)

Example

Agenda

(use-package org-ql)
(use-package org-super-agenda)
(setq org-agenda-files '("~/blog/blog"))

(setq org-agenda-custom-commands
      '(("t" "Test"
         ((agenda "" ((org-agenda-span 'day) (org-agenda-start-day nil)
                      (org-super-agenda-groups
                       '((:name "Scheduled"
                                :time-grid t)
                         (:name "All-day"
                                :scheduled today)
                         (:discard (:anything))))))))))

ql-search

(org-ql-search "~/blog/blog/loose_planning.org"
  '(and
    (or (todo "TODO")
        (todo "PROJECT"))
    (not
     (and (descendants
           (not
            (or (todo "NOTE")
                (todo "DONE"))))
          (descendants
           (todo)))))
  :title "The view"
  :super-groups '((;:auto-planning t
                   :name "General"
                         :scheduled t
                         :time-grid t
                         :order 1)
                  (:auto-outline-path t
                                      :todo ("TODO")
                                      :order 2)))

ql-query

(org-ql-query
  ;; :select #'org-get-heading
  :select '(list (org-format-outline-path (org-get-outline-path) nil (org-get-title) " / " ) (org-get-heading))
  :from "~/blog/blog/loose_planning.org"
  :where '(
           (or (todo "TODO")
               (todo "PROJECT"))
           (not
            (descendants
             (not
              (or (todo "NOTE")
                  (todo "))
(org-ql-query
  ;; :select #'org-get-heading
  :select '(list
            (org-format-outline-path (org-get-outline-path) nil (org-get-title) " / " )
            (org-get-heading)
            (if (org-get-scheduled-time nil)
                (format-time-string "%Y%m%d %H:%M" (org-get-scheduled-time nil))
              nil)
            (format "In %d days" (org-time-stamp-to-now (format-time-string "<%Y-%m-%d %a %H:%M>" (org-get-scheduled-time nil))))
            (if (org-get-deadline-time nil)
                (format-time-string "%Y%m%d %H:%M" (org-get-deadline-time nil))
              nil)
            )
  :from "~/blog/blog/loose_planning.org"
  :where '(and
           (or (todo "TODO")
               (todo "PROJECT"))
           (not
            (and (descendants
                  (not
                   (or (todo "NOTE")
                       (todo "DONE"))))
                 (descendants
                  (todo))))))

The rest of the document is an example. It should be multiple files but I'll just add a comment to differentiate them

TODO file lawsuit now

TODO file lawsuit

TODO doctor's appointment

NOTE medicine

ask about different medicine options

TODO call to verify 1 day before

PROJECT migrate keepass to pass

NOTE asdasd

TODO list all used accounts, delete the other ones

PROJECT another project

TODO a done subtask

ok maybe

NOTE something else

  • TODO pasok
    • TODO noudu

asdas

DONE a done subtask2

NOTE this is a note

DONE a done subtask3

  • NOTE this is a note