The Upkeep List
The Upkeep List
purpose is to hold recurrent (high and low frequency) tasks
that need to be done at regular intervals but not at a fixed time and date.
Note
Routine (R) tasks are not kept on the Upkeep List event if they are recurrent. This exception aims at reducing noise and toil in the system.
Because they come back so often and are favored because of their simplicity and fast feedback, high frequency tasks can exhaust all the time and energy available per day, leaving some tasks to starve; they never get done or drift apart between performance to the point of incurring negative consequences.
The Upkeep List address this issue with a scheduling technique called aging where tasks are given priority based on time they have been waiting; their age.
Calculating the age of a task can be done in many ways. In this system the age
of a task is calculated relative to its frequency. The frequency at which a task
must be done is sometimes given, but most of the time it is estimated and
adjusted to settle on the natural frequency
; this is, the rate at
which a task really needs to be done.
As mentioned in the section about task types, when a task needs to be done
it is said to be mature
. The time it takes to mature is the period
. And the
frequency
of a task; this is, the rate at which it matures, can calculate as follows:
Given a task t
.
frequency(t) = 1 / period(t)
Having the frequency of t
, the age is calculated as follow:
age(t) = (the amount since 't' was last done) * frequency(t)
For short, the age is:
age(t) = (the amount since 't' was last done) / period
The age of a task represents the number of cycles since it was done. The task is
said to be mature
when its age is equal or greater than one. When the age is
greater than two, it is overdue
.
Ideally, each task should be done when their age is equal or greater
than one, but less than two.
The Algorithm
In the Upkeep List
the tasks are kept ordered by age in descending order. As a task
matures, it moves upward to the top of the list. Each time a task mature, it
should be evaluated and its period adjusted before it is done and the last done
date updated. Iterating over this procedure is the algorithm of the Upkeep List
.
graph LR
START[Start] --> SELECT;
SELECT[Select mature task] --> TODO{It needs to be done?};
TODO -->|Yes| DOIT[Do it];
TODO -->|No| WAIT(Increase period);
TODO -->|Yes and is overdue| REDUCE(Reduce period);
REDUCE --> DOIT;
WAIT --> SORT;
DOIT --> UPDATE(Update last done date)
UPDATE --> SORT[Sort the list]
SORT --> SELECT;
The loop goes like this
- Select a mature task.
- Evaluate if the task realy need to be done.
- Update the period of the task.
- If it does not need to be done:
- increase the period
- If it does need to be done:
- do not change the period
- do it
- update the last done date
- If it should have been done earlier:
- reduce the period
- do it
- update the last done date
- If it does not need to be done:
- Sort the list.
The Implementation
The Upkeep List
is easy to build and manage in a spreadsheet.
Using a spreadsheet makes it easy to add, remove and search tasks. But most
importantly it allows to use a formula to calculate the age of a task and sort
them.
The simplest sreadsheet has four colums: Done
, Age
, Period
and Task
.
Done
: The date when the task was last done.Age
: The formula to calculate the age (e.g.:DAYS(TODAY(),$Done)/$Period
)Period
: The number of days after which the task is repeated.Task
: The description of the task to be done.
When a task is done, we update the Done
column by inserting the current date.
In LibreOffice it is as simple as hitting CTRL+;
. Then you can sort the task
by age in descending order.
The Layers
Note
Adding layers to the upkeep list is not necessary for it to function properly. However, layers become useful once the list reaches a certain size.
In the upkeep list, two tasks may have the same natural frequency, but their relative importance1 is not the same. To reflect this fact the upkeep list could be upgraded with an additional column to rate the relative importance of the tasks. By rating each task, the upkeep list will become layered with the most important tasks on the top layer down to the least important ones on the bottom layer.
Example
Here is an example of layers one could use.
- Layer 1: Tasks on the first layer are essential to remain functional.
- Layer 2: Tasks on the second layer are needed to maintain a quality of life.
- Layer 3: Tasks on the third layer contribute to improving the quality of life.
You could also look at the Maslow's hierarchy of needs as inspiration for your classification system. However, for the purpose of this system, the pyramid may not be the best representation. The layers are a preferred representation because it reflects the fact that we can operate at multiple levels and also turn off the layers we don't want to focus on at the moment.
The classification system used may change from one implementation to another, but the objective remains the same: help choose which task to do next in order to avoid negative consequences without overspending resources. Depending on the situation and condition (location, energy, time, resources, etc.) When the conditions are favourable, we can move up our operational level and when they are unfavourable, we can reduce it to its minimum.
Example
Here is an example of levels one could use.
- Level 1 (Reactive): Work exclusively on Layer 1 tasks.
- Level 2 (Preemptive): Work on Layers 1 and 2 tasks.
- Level 3 (Proactive): Work on Layer 3 tasks.
-
The priority is a measure of the relative importance (or value) of tasks when compared to other tasks on the list. ↩