2023.09.30
In grade school, I used a paper “binder reminder” for my daily tasks. After that, I wanted a digital system. I tried Gantt charts, GTD, Asana, Notion, Emacs org mode, Roam. None of it worked better than the binder reminder, so I started with a simple spreadsheet and turned it into a planner that scrolls horizontally through a calendar and vertically through goals. I call it “Projectory”—a projection of the trajectory of my projects.
A snapshot of my personal project management spreadsheet.
I previously outlined these goals in my life plan (my Archiridion), and I realized I wanted a more structured way to outline tasks within goals each day. Some of these goals are also categories for sub-goals.
A few fun examples:
I have the columns colored to represent days’ salience in my mind. Today is clearest, and the further a day is from today, the more obscure it is. By my observations, salience is likely logarithmic rather than linear; for example, I can easily distinguish today and yesterday, but events from yesterday seem more proximate to the day before than to today.
For now, I’ve decided I want to train my mind to have a four-day range of salience in either direction of today (including today). So, on any given day, the column for day 0 (today) is white, the ±1 days (yesterday and tomorrow) are gray, the ±2 days (ereyesterday and overmorrow) are a darker gray, and the ±3 days (foreyesterday and aftermorrow, perhaps) are a gray darker than that. Beyond those are the darkest gray.
I achieve this coloration with conditional formatting:
=weekday(A1,1)>=>5
=A$1=TODAY()
=A$1=(TODAY()-1)
=A$1=(TODAY()+1)
Is not equal to
-
=A1<>TODAY()
All columns older than three days ago are hidden by a script, which I adapted from this script:
function processProjectorySimplified() {
var sheet = SpreadsheetApp.getActiveSheet();
var now = new Date(); // today
var reach = 3; // span of number of days ago and ahead I want to keep salient; 3 days ago is foreyesterday
var hideThroughDate = new Date(now);
hideThroughDate.setDate(now.getDate() - reach - 1); // plan to hide through day before reach date, show from reach date onward
// Create an array of arrays of the date cells and their dates
var cellDates = sheet.getSheetValues(1, 2, 1, sheet.getLastColumn()); // All dates in the spreadsheet in row 1
// Find the index for the day just before the start day.
// Starting from the left, inspect each item in cellDates and see whether it's the start day.
var hideThroughCol = 0; // number of columns to hide
while(hideThroughCol++ <= sheet.getLastColumn()) {
var then = new Date(cellDates[0][hideThroughCol]); // then is this
// if equal to hideThroughDate
if(then >= hideThroughDate) {
break;
}
}
// Bounds check
if(hideThroughCol > sheet.getLastColumn()) return;
// Hide all date columns through hideThroughDate
sheet.hideColumn(sheet.getRange(1, 2, 1, hideThroughCol)); // row 1, column B, for one row, for number of columns defined by hideThroughCol
// 2021.08.28 set text wrapping to clip for days before today
var lastFewDays = sheet.getRange(1, hideThroughCol+1, sheet.getLastRow(), reach+1); // add 1 to hideThroughCol to push past project column (column A); add 1 to reach to include last column hidden
lastFewDays.setWrapStrategy(SpreadsheetApp.WrapStrategy.CLIP);
Logger.log("Yay!");
}
Old tasks don’t carry over. This is by design; if I don’t specifically carry a task over, it drifts away rather than cluttering my days.
=MATCH(A$1,INDIRECT("Solinoxes!A1:A"),0)
On 2021.05.07, I wrote in my Archiridion that I wanted to write a blog post about my project management spreadsheet. More than two years later, I’ve finally written it! Logger.log(“Yay!);
I appreciate support of any kind, whether that’s sharing this page, telling me what you thought, or treating me to something yummy:
Venmo: @aubrie
PayPal: aubrieality
Ko-fi: