Tuesday, March 12, 2019

Bullet Journal Flow

I continue to iterate on my task management strategy.

I have always been intrigued by the Bullet Journal ("BuJo") method. But I have never figured out a way to integrate BuJo into my GTD flows. My main limitations are that BuJo seems to:

  1. require artistic talent, which I lack, as all of the BuJo examples I could find have a lot of... artistry, rather than a minimalist functional design; 
  2. does not seem to scale well for a very large volume of tasks
  3. does not seem to scale well for a large volume of recurring tasks

At the same time that I was researching BuJo, I had been exploring a spreadsheet-based task management approach on Google Sheets (which supports desktop and mobile use). My main desire to develop that system was to migrate off of Todoist, but still have a lot of the key functionality of Todoist that kept me organized:

  • categories
  • importance indicator
  • status indicator (completed, waiting)
  • a way to easily add new tasks to the list
  • a way to handle recurring tasks: my primary issue was that I could not solve for automating recurring tasks

And I continue to use written journals for my daily diary and notetaking, because I like writing, and I like A5 notebooks. I needed a system to archive these notebooks, preferably digitally, that would also make the contents discoverable/searchable.

My highly customized BuJo workflow (with key GTD/BuJo concepts in bold) is as follows:

  • Gmail is still my primary collection point, where I receive most of my action items. Following the GTD methodology, these are either discarded, archived, acted upon, scheduled, or added to my task list, resulting in Inbox Zero.
  • Calendar is used for events, meetings, and recurring tasks. Recurring tasks involving multiple subtasks contain the subtasks in the description. When the recurring task surfaces, the task/subtasks are placed into my todo list for processing.
  • Spreadsheet task list is used as my BuJo Future Log. The spreadsheet (in Google Sheets) contains two tabs:
    • Futurelog: 
      • Four columns: Bullet, Date, Task, Collection
        • Data Validation: Bullet and Collection must be one of the types from the Setup tab. Date must be a date, formatted as "mm/dd DDD". Data validation for date enables a calendar picker on the web and mobile. Task is a free text field.
        • Conditional formatting: Bullet column turns red if "* priority" bullet is used. Entire row turns yellow for tasks dated today.
        • Filter: By default, Bullet column is filtered to hide "x completed" tasks, and Collection is filtered to hide special project tasks that are not due for a while (e.g., Christmas Shopping).
      • I have a script (code below) that runs every hour, and upon opening, to perform sorting and hiding of my task list.
    • Setup
      • Two columns: Key and Collection
        • Key: The types of bullets.
          • . task
          • x completed
          • @ waiting
          • # recurring
          • * priority
        • Collection: A list of my collections (labels or categories for projects)
  • Daily Log: My journal (a physical A5 notebook), used for keeping daily notes.
    • I use the Notebloc app to scan each page into a black and white jpg within a document for each day, and then "share" the daily document to Journey
    • Journey, by 2appstudio, is the app I use to archive my daily journals, and access them from my phone and desktop. The data is stored in Google Drive, and the app has some key features that I find critical:
      • Location tagging, so I remember where I was that day.
      • Label tagging, so I can add some key labels to record what is contained in that day's journal, to do quick searches
      • Supports both text and image entry
      • Tracking of other data like weather and mood I find interesting but not critical
      • Data portability: Exportable into DOCX and XML
      • Great apps, for Android, iPhone, web interface, ChromeOS, Mac, and PC

Futurelog Script: 


function Cleanup() {
//  Sort by date
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('B1').activate();
  spreadsheet.getActiveSheet().getFilter().sort(2, true);
//  Filter to hide completed
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('A1').activate();
  var criteria = SpreadsheetApp.newFilterCriteria()
  .setHiddenValues(['x'])
  .build();  spreadsheet.getActiveSheet().getFilter().setColumnFilterCriteria(1, criteria);
};