---
Feature summary list
- defer dates, due dates, reminders
- readable plaintext exports designed for collaborating with others (so that you can eg filter and then present a task list to a contractor, yet maintain that list from the todo program, rather than making it a separate text file)
- recurring 'chores'. These need to bubble up automatically.
- plaintext source of truth
- delegation
- reviews
- hierarchy: area / project / task. Any of these can have levels (limited or unlimited?) of sub-Xs, eg subareas, subprojects, subtasks
- projects have an importance as well as tasks, and task importance is interpreted relative to the project: you can mark something as 'important' within a side project, without that making it show up as important in global views of important tasks
- reminders
- usable on mobile (possibly via web app)
- task/project templates
- tags
- tag hierarchy, especially for task status tags
- Kanban based on tags, which understands the hierarchy
- task dependencies
- collaborative features: task request/acceptance/assignment
- foss
- ordered lists of items
- Maybe in org mode should have a small number of task templates : Pre-shower , Little thing around the house , todo today, To say to a certain person , etc Pre-shower razor , preShower soap
some todos for this project:
- learn about other ppl's todo/task/planning/organiz systems
- i guess determining the data ontology, starting with the data structure of the core item, the task, is one critical design task that i need to do here. I guess that's why i'm so interested in task statuses; because i need to explore a set of types (in the programming language sense) for tasks.
- to design the core 'task' data structure, one idea is to look at actions that will be taken with it
- Write out ontology/core data structures beyond task.
simplify imp etc to just:
- booleans: imp, urg, quick (and mb their opposites: low, later, long)
- is urgent even useful if we have a 'when' (= start date = defer date) field?
maybe orgmode, but with a simpler plaintext format, and with internal functions using a database that is kept synchronized with the open buffer (that last bit (the synchronization) sounds difficult, but i think it's worth it to allow the user to do their own queries -- however don't use SQL, SQL is too complicated, and also it requires that you either ((choose a safe client), or (really know what you are doing)) in order to avoid security issues)
the agenda definitions are where you could really use a query language. And also allowing the user to do an interactive query over tasks to interactively build an agenda view (this is mainly to allow the user to do transient queries, but they can also save the query they interactively built if they want). And of course, as a side benefit, they simplify the rest of the code (at the cost of the synchronization complexity).
- section headings in between projects and sub projects?
- two kinds of urgency. (A) urgency is about the task; when the task is due combined with how low it takes. Its range is an era. It is equivalent to what the start date must be in order to comfortably complete the task on time. (B) urgency is (A)urgency but combined with information about the current date. Its range is a scalar. As the date gets closer to what the start date would have to be in order to complete the task (scaled by task duration), the task becomes more urgent.
- priority vs urgency. Urgency is about when the task would have to be done; unimportant tasks that you don't actually plan to do can still be urgent. Priority is about what you actually plan to do. As with 'two kinds of urgency', above, priority could be an era (that is, which tasks do you actually plan to be working on in that era; a "when date" but expressed as an era rather than a date), or it could be a scalar (to induce an ordered list of tasks, in the order that you plan to actually do them).
- in the previous two items, i guess they both should be the (B) forms; the (A) form should be called 'start' and 'when', respectively. The reason i didn't immediately call them that is that i am using the 'priority' in my todo.txt as a 'when'.
- importance or Maybe priority for someday maybe can be real numbers rather than a boolean. Do these correspond to the importance tag boolean or not. (I'm thinking yes, especially if they really are real numbers; The obvious cut off is less than one versus greater than or equal to one)? Do these correspond to letter priorities or not (I'm thinking no)?
ok so something i need to think about:
- the information overload problem
- is stuff like importances, urgencies, and priorities a good way to (in part) deal with this problem? Or does that just add more complication to the system, creating conceptual load, cluttering up UI views of task attributes, and causing manual busywork for me via overly formalized process?
- my guess is that they are good
- if so, how exactly to use them to best deal with information overload? And what other things are needed in the task data structure / elsewhere in the core ontology?
(note: not specific to this project, but recall that one way of using the words "complication" and "complexity" is that complication is mere quantitative increase in informational clutter, whereas complexity is something that requires qualitatively deeper thought in order to understand it/work with it/solve its problems. In a design context, some amount of complexity is inherent in the problem; the inherent problem complexity is inescapable so one should not try to find a solution that isn't itself complex enough to address the inherent problem complexity. This is not to say that one should attempt to estimate the complexity of the inherent problem complexity, and estimate the complexity of the solution, and try to match them (that would be cool, and works sometimes in math, but this domain has not been sufficiently formalized to allow the application of those kinds of methods); rather, it is saying that although unnecessary complexity is often bad, it should be forgiven if the solution complexity is necessary to deal with the inherent problem complexity. Aside: there is a debate about the treatment of solution complexity beyond what is necessary. Some say that any complexity beyond what is necessary is bad. Others say that in some circumstances, some unnecessary complexity is justified in order to buy expressive power, even though in other situations unnecessary complexity is all bad (a criticism of this approach is that it seems to be hard to tell in which circumstances expressive power can justify complexity). I am on the side that expressive power can sometimes justify complexity; but yes, some amount of judgement/taste is involved in order to choose when.)
- hmm... conceptually, integrated calendar events may mean that calendar events have a project field, etc (mb they are even a subtype of task, or maybe both tasks and events share a superclass?). And, conceptually, each project has its own calendar (which would be the effect of querying for only those events associated with a given project, although my guess is it's fine to have a separate calendar app with a separate calendar for each project, too), although there is also a combined calendar on which every project's events may be found (which, again, could be implemented as a view, dynamically querying a db for all events, or it could be implemented as an actual separate calendar in the underlying storage, which is modified in sync with each project calendar).
- an overview of an era (are there other kinds of overviews, not counting the ordinary task views/queries such as all important+urgent or flagged or favorited, etc?) includes those tasks which are marked as overview for this area (so is overview an array whose (get function's) domain is era and whose range is bools? Or, is it that for each task, each era has a field which contains a substruct pertaining to that era, and this substruct contains an 'overview' bool? Or, something else?) (what else do era overview data structures include? What else do era overview screens include (are tasks which are both important/urgent at the level of the era included? What about tasks which are both important/urgent in suberas, eg imp urg tasks (the 'now' era) when viewing the month era)?
- numerology: i'm kind of thinking of:
- 3 for levels of importance and similar (high/default/low or mb superhigh/high/default)
- 5 for levels of sectional hierarchy: smith-house/second-floor/master-bedroom/bathroom/shower
- 7 for levels of someday/maybe priority or someday/maybe importance? or mb that should be infinite
- 7 for levels of tracked priority? or mb that should be infinite
- note: within my current effectively-simpletask-based-system, when i let it go to seed, levels A-E tend to get used and things below that tend to get neglected. But tasks in F,G are sometimes somewhat paid attention to, so A-G is a good boundary. Note that i do still have clear semantics for H,I though.
- need to be able to represent something that is not urgent now but becomes urgent as the deadline gets closer. Also, tasks that take longer need to become urgent sooner, when the deadline is more distant. Is urgency a computed property? Or do we just use due dates, and 'urgent' is a tag for when you dont want to bother to set a date but just want to mark something as urgent anyways?
- reify projects, areas, and mb sections, so that you can have multiple levels of all of these
- should projects have estimated durations?
- for exporting tasks/collaborating with others, need a way to assign a readable permanent ID to tasks. Probably something hierarchical eg. when you are drafting a requirements document, autonumber things like 1.3.11.4 according to the heading hierarchy, but then when that document is shared with a contractor, freeze the numbering and stop auto-updating it.
- categorize 'projects' inside of 'areas' (eg my 'home::life')
- do we need a 'when' date or is 'defer date' serving that fn already? i think 'defer date' is it. Could just call it when tho..
- instead of today/anytime/someday, i might have now/soon/later/zzz -- and mb also time ranges like 'few days', 'week', 'few weeks', 'month' -- note: actual dates can go in this field too!
- need place for quick tasks (eg send this email), medium tasks (eg. go to bank and get id verified for treasurydirect) as well as long tasks
- a lot of things have 'projects', do we need that or are orgmode-style subheading=subtasks good enough?
- one key to reassign between 'now'/'today' and some other date (i guess that would mean when the start date/defer date is?)
- i guess even if a project has already 'started', if we are working on something else today and plan to get back to it tomorrow, we would want to assign a new 'start date' of tomorrow? i guess mb 'defer date' is better terminology if we r doing that -- i guess this action of saying 'we aren't working on this right now anymore' could be called 'defer'
---
tasks can stand in subtask/supertask relationships tasks can be members of projects (and multiple projects, which means you can have cross-project projects, or 'epics') is a project different from a supertask? not really.. project can have status, etc. Just call it a task. tasks can have effort estimates due dates can be hard or soft custom fields can be associated with tasks; can include enums, dates, strings, floats, integers, what else? tasks can have vote counts tasks can be assigned to people people can subscribe to tasks tasks can mention people tasks can have tags tasks can link to hyperlinks tasks can have file attachments tasks can have attached comments projects can have members project members can have permissions: read-only, read and comment, full editing, owner/admin (can add/remove others' permissions) project members can have custom roles (strings/enums) members can be grouped into teams teams can be given permissions on projects (as if the team were a member; this permission is then the permission of all members on the team, unless overridden by a specific permission grant) tasks and projects can be starred tasks have a status at least todo/done statuses can have substatuses (eg. todo can be 'todo' vs 'soon', done can be replaced by 'done' vs 'cancelled' vs 'hold', so in total we can have active/todo, active/soon, inactive/done, inactive/cancelled, inactive/hold) people are notified when tasks are assigned to them tasks can have dependencies (blocked by, blocking) tasks can have data private to each person (e.g. private priorities and statuses, eg today/upcoming/later, 'new/unseen', 'newly assigned to you', etc)
... so basically i think orgmode does all this except maybe for the ordered queue
---
- statuses: a smaller set of statuses b/c you don't want to make automation e.g. kanban boards have to take the union of multiple statuses; other 'substatuses' are instead tags
- flag: something that you are concerned about
- urgency: boolean, autocomputed from due date, but you can override to 'urgent' by adding the 'urgent' tag
- there are also 'day', 'week', 'month', 'quarter', 'year' fuzzy due dates
- importance: real number (both positive and negative; 0 is default, positive = more important). importance boolean = positive importance
---
high-level motivations for organizational systems:
- you failed at something b/c of bad organization, and you don't want that to happen again
- you feel like your peers are more productive than you, or for whatever other reason you feel like you could be more productive
- you have, or other people have, negative feelings due to your disorganization
- you just want to improve yourself
- other people want you to get more organized
Statechart diagram todo
Statechart diagram what i've drawn so far
- see pic
- in the following, the notation "there is a transition OPEN -> CLOSE", means the same thing as "there is a transition from OPEN to CLOSE". "There is a transition OPEN <-> CLOSE" means the same thing as "there is a transition from OPEN to CLOSE, and a transition from CLOSE to OPEN".
- two top-level states, OPEN and CLOSE
- there is a transition OPEN -> CLOSE
- within OPEN:
- states NEW, IDEA, WIP
- Within WIP:
- state FINISH, and within FINSH, CHECK
- there is a transition FINISH <-> WIP
- my intention is to add more states and more transitions here
- one state that i intend to add is TODO. Another is WAIT. Another is ROADMAP (or something like it, eg BACKLOG).
- within CLOSE:
- 3 states, DONE, HOLD, and CANCEL
- there is a transition HOLD->OPEN
- i have no current plans to add more states or transitions here
- i wrote a note on the diagram (within OPEN, near the lower left): " TODO: WAIT DELEG TODO "
Statechart diagram notes
- although the formal statechart prohibits transitions back from DONE or CANCEL into OPEN, most implementations should allow this.
- we aren't using a closed world assumption; there could be other unnamed states in any position
- for example, there could be unnamed states within WIP. FINISH can transition to any state within WIP including the unnamed ones. Similarly, there could be unnamed states within FINISH; a transition trace containing "CHECK -> FINISH" is valid and represents a transition from CHECK to any one state within FINISH, including these unnamed states; you might imagine these unnamed states to be represented by another distinct state within FINISH whose name is also FINISH (setting aside for a moment the name uniqueness constraint of state diagrams).
- this formalism doesn't represent different negative CLOSE resolutions by substates. Conceptually, an alternative representation would be for CANCEL to have substates representing different cancellation reasons. However, it may be better to make that an attribute, rather than cluttering the mental model with these extra states.
- our state naming convention is that a noun phrase state name describes the type of thing that the task (or the representation of the task within the todo system) is, whereas a verb describes the thing which is done in that state and which is completed (and in the past tense) to something that has left that state. For example:
- "Work in progress" is a noun phrase describing the task
- CHECK is a verb. When the CHECK state is occupied, a CHECKING activity (process) is taking place, and when the CHECK state exits successfully, the task can be said to have been CHECKED.
- the reason that the DELEG state is not named DEL is because the name DEL is often used in mathematics for the vector differential operator, and I am not currently aware of any meaningful connection between the DELEG state and that operator.
Statechart diagram questions
- should TODO contain WIP and FINISH, or not?
- should TODO contain IDEA, or not?
- my current guess is that it should not
- should there really be a possible transition HOLD->IDEA (which is implicit within the transition HOLD->OPEN)?
- i think it's okay; for example, if a project is on hold, you may want to start a task to evaluate whether to resume that project -- this could be represent HOLD->IDEA
- should there be a question mark ("?") state representing design questions? Or question mark transitions representing transitions that may or may not be present? Is this related to "toconsider"?
- which, if any, if these are included as states?: assign deleg look rely block pause require hold roadmap ready booked stew followup review
- i think HOLD and DELEG and ROAPMAP (or something like it, eg BACKLOG) should be included
- i don't know if a state named "ready" should be included, but if not then some concept of readiness should be considered for inclusion
- so, should a concept of readiness be included? I'm thinking maybe so but not sure.
- shall we posit that there is no transition NEW->WAIT?
- If a state "depends_upon" were a substate of WAIT, then that could explain a transition NEW->WAIT, because in the process of going thru the NEWs, it was determined that this task is dependent upon another. But this just makes me think that "depends_upon" should not be represented as a state.
- i intend to add at least TODO, WAIT, ROADMAP (or something like it, eg BACKLOG). Does the addition of those semantically imply anything else, eg any transitions or substate relations?
- ROADMAP is a substate of TODO
- maybe: WAIT is a substate of TODO and is orthogonal to any other named substates in TODO
- meaning that, when and only when you are inside TODO, your location can be notated (x, wait_state), where x represents a state orthogonal to WAIT within TODO, and wait_state represents WAIT or a state within it; similarly, your_location \in states_ortho_to_WAIT_within_TODO \prod substates_of_WAIT.
- i actually like it notated (x, wait_state), but for the purpose of drawing a diagram before i decide if TODO should contain WIP, i drew wait_state on the left of the other stuff in TODO. Maybe i should switch WAIT to the right of TODO after i figure out most of the rest of the diagram
- should NEW have a transition just to IDEA?
- my current guess is yes, NEW->IDEA should be the only transition shown from NEW -- actually wait, i changed my mind; instead we should have NEW -> OPEN.
- should FINISH contain CHECK (as i currently drew it), or should CHECK contain FINISH?
- on a separate page, i tried to draw my guesses above, see pic. This drawing:
- has 14 states: OPEN, NEW, IDEA, TODO, WAIT, DELEG, ROADMAP, WIP, FINISH, CHECK, CLOSE, DONE, HOLD, CANCEL
- the states are in the hierarchy:
- OPEN
- NEW
- IDEA
- TODO
- ROADMAP
- ...
- WAIT
- DELEG
- WIP (NOTE: WIP might be a substate of TODO, i'm not sure)
- FINISH
- CHECK
- CLOSE
- DONE, HOLD, CANCEL
- TODO has 3 orthogonal regions: WAIT
DELEG | ..., where the unnamed 3rd region (possibly recursively) contains ROADMAP |
- if WIP turns out to be inside TODO, then it is in the unnamed third region also
- the transitions of the states above are:
- OPEN: OPEN->CLOSE
- NEW: NEW->OPEN
- IDEA
- TODO
- ROADMAP
- ...
- WAIT
- DELEG
- WIP (NOTE: WIP might be a substate of TODO, i'm not sure)
- FINISH: FINISH <-> WIP
- CHECK
- CLOSE
- DONE
- HOLD: HOLD->OPEN
- CANCEL
i think i like this pic so far (except, as i said, i would put WAIT on the rightmost side within TODO, rather than the leftmost). I need to examine it more critically, though, to make sure it can consistently represent what i need it to.
- let's see, so one thing we want to decide is: should WAIT be orthogonal with WIP?
- my current guess is yes; WAIT should be orthogonal with WIP. This implies that both WAIT and WIP are children of the same supernode. Since i am assuming that WIP does not include TODO as a substate, this implies that either TODO includes WIP as a substate, or both TODO and WIP are siblings within a larger, yet-to-be-named superstate of which WAIT is a substate.
- hmm, i think WIP should be renamed to DOING DOING
- hmm, maybe get rid of ROADMAP, and just keep TODO
so how about this:
- OPEN: OPEN->CLOSE
- NEW: NEW->IDEA, NEW->TODO
- IDEA: IDEA->TODO
- TRACK
- {
- TODO: TODO->DOING
- DOING
- DO: DO->CHECK
- CHECK: CHECK <-> DOING, CHECK->FINISH
- FINISH: FINISH->DONE }
- CLOSE
- DONE
- HOLD: HOLD->OPEN
- CANCEL
i feel like the stuff under DOING is wrong, and maybe the transition TODO->DOING also. What i'm trying to do is (a) have TODO->DO->CHECK->FINISH->DONE, (b) also have TODO->DOING->DONE, while not having TODO->DO->FINISH or TODO->DO->DONE or TODO->CHECK or TODO->FINISH or TODO->DONE. I think the above contains TODO->CHECK and TODO->FINISH, so it's not quite right yet. Maybe try:
- OPEN: OPEN->CLOSE
- NEW: NEW->IDEA, NEW->TODO
- IDEA: IDEA->TODO
- TRACK
- {
- TODO: TODO->DO
- DOING
- DO: DO->CHECK
- CHECK: CHECK <-> DO, CHECK->FINISH
- FINISH: FINISH->DONE }
- CLOSE
- DONE
- HOLD: HOLD->OPEN
- CANCEL
does this satisfy the desiderata above?: - the following paths must be present: - TODO->DO->CHECK->FINISH->DONE: true - TODO->DOING->DONE : true (because this is a zoom-out of TODO->DO->CHECK->FINISH->DONE, so the presence of that path implies the presence of this one) - the following paths must be absent: - TODO->DO->FINISH : true - TODO->DO->DONE : true - TODO->CHECK : true - TODO->FINISH : true - TODO->DONE : true yes, it does.
So, currently, my best guess so far is:
- OPEN: OPEN->CLOSE
- NEW: NEW->IDEA, NEW->TODO
- IDEA: IDEA->TODO
- TRACK
- {
- TODO: TODO->DO
- DOING
- DO: DO->CHECK
- CHECK: CHECK->DO, CHECK->FINISH
- FINISH: FINISH->DONE }
- CLOSE
- HOLD: HOLD->OPEN, HOLD->CANCEL
- CANCEL
- DONE
see pic (220117_guess3.jpg)
where the states OPEN, CLOSE, TRACK are not directly visible to the user, at least not in most places. So that leaves 12 user-visible states.
Note that ROADMAP is left out here. Is that what i want? Or do i want to create various substates inside TODO, including ROADMAP, and make ROADMAP the entry state in TODO? Recall that the motivation of ROADMAP is to save TODO to be a superstate for various substates that are presumably moved through in a linear manner. I'm not quite sure how to do that without making a committment to what these substates are, though, which is one reason that I left TODO empty for now.
Some remaining questions: what about: - readiness the concept (or alternately, a READY state) - definiteness/committment/toconsider - firmness (eg is 'scheduled' a reminder or a when date? is the due date a hard deadline? when we say this is a TODO, does that mean we have selected/committed to it/we definitely (or close to that) want to do it?) - needs attention? - question marks
elsewhere, about my old set of states proposal, i wrote: " if you look at all those states, here are the ones that are very common: new idea todo wip check finish done nix wait
and here are the others: assign deleg look rely block pause require hold roadmap ready booked stew followup review "
so the current proposal would have all of the common states (albeit with some different names), and out of the others, only deleg, hold. out of the others, assign, look would be substates of DELEG, and block, pause, require, followup would be substates of WAIT, and roapmap, ready, booked would be substates of TODO, and review would be a substate of doing in between FINISH and DONE. That leaves only rely, stew as possibly having more complex semantics.
actually i think the orthogonal regions don't change the semantics much unless they have multiple states in them. So we do need at least two WAIT states and at least two DELEG states. Let's call them STOP,GO and NOTDELEG, DELEG
maybe HOLD should be promoted to a third alternative to OPEN, CLOSE. In fact, WAIT could be that, if we're willing to forget of task status when we enter WAIT.
CHECK and FINISH still seem a little unnecessary. So maybe to start with, remove these. To start with (and maybe later, too), WAIT and DELEGATE are boolean properties. Remove HOLD; WAIT is good enough for that. A task is called "active" iff: (it is in TRACKED) AND (isWaiting is false) AND (isDelegated is false). I guess instead of isWaiting, isDelegated, we can use tags WAIT, DELEG
also, any state in OPEN can't transition to any state in CLOSE; DONE can only be reached via DOING. So it's just CANCEL that can happen anytime.
( is there a better word for 'active'? I'm using it for (isActionable OR canUseAttention); if we later add more states under TODO, some of them may not be "actionable"
what i'm getting at is tasks which need your personal attention, either to plan to do them or to do them. What we are really saying is that these are tasks that are waiting-for YOU! "need" sounds more like could/would/should/must. "personal" sounds like un-delegated. needsAttention sounds more like FLAG. "the ball is in your court" is too long and metaphorical, as is anything having to do with it being your turn (YOURTURN). Maybe FORYOU? NEEDSYOU?
maybe TRACK should be renamed to 'active'. And then we can use 'track' for what i called 'active', above. But it sounds weird to call a task which is in WAIT "active". And 'track' doesn't seem to imply that personal attention is needed. In fact, in a sense, tasks which need your attention are the definition of passive; they won't do anything unless you do something to push them.
so far i'm thinking isForYou, although i don't love it. )
so i think our current statechart is:
- OPEN: OPEN->CANCEL
- NEW: NEW->IDEA, NEW->TODO
- IDEA: IDEA->TODO
- TRACK
- {
- TODO: TODO->DOING
- DOING: DOING->DONE }
needsYou := TRACK and !WAIT and !DELEG
here there are 6 user-visible states plus WAIT, DELEG, so 8 user-visible "things". SOON can also be a tag.
If we wanted to get more complicated, we could do:
- OPEN: OPEN->CANCEL
- NEW: NEW->IDEA, NEW->TODO
- IDEA: IDEA->ROADMAP
- TRACK
- {
- TODO: TODO->DO
- ROADMAP: ROADMAP->BOOKED
- BOOKED: BOOKED->SOON
- SOON: SOON->READY
- READY: READY->DO
- DOING
- DO: DO->CHECK
- CHECK: CHECK->DO, CHECK->FINISH
- FINISH: FINISH->DONE }
actionable := (READY or DOING) and !WAIT and !DELEG needsYou := actionable OR ROADMAP (should SOON be needsYou? in which case only BOOKED is NOT needsYou within TODO) (mb BOOKED is an ortho) (mb NEEDSYOU is an ortho)
this introduces 7 additional states. I'm thinking it may be too complicated for now; because without an explanation it's hard to guess the semantics of ROADMAP, BOOKED, SOON (although, CHECK and FINISH are fine; but they seem unbalanced without more stuff in TODO, since that is where we really need more structure). Could also have a FOLLOWUP state which doesn't easily fit on the diagram; it is in both WAIT and DELEG (that is, there is WAIT_FOLLOWUP and DELEG_FOLLOWUP). The point of expanding TODO is to distinguish actionable TODOs (READY) from non-actionable ones, and to distinguish non-actionable needsYou TODOs (ROADMAP) from non-actionable TODOs that don't need you (BOOKED and SOON), and to distinguish things that are happening SOON from things that are not. Also, i'm not even sure what the point is of having ROADMAP be a non-actionable needsYou. These correspond to pietri's whiteboard as follows: IDEA -> deep backlog, TODO -> near backlog, ROADMAP -> do after that, SOON -> do soon, READY -> next. Also, my WAIT -> his HOLD, my DO -> his WORKING, my CHECK to his TO REVIEW. Hmm the fact that he has these does make me think they are more likely to be worth the complication, maybe we should have them. He doesn't have BOOKED but i kind of like that because it allows me to distinguish something that needs to be planned (NEEDSYOU) for from something that is already planned for. Also, i'm not sure if there should be additional state transitions within TODO to skip over some of those stages.
here's how it looks with BOOKED as an ortho:
- OPEN: OPEN->CANCEL
- NEW: NEW->IDEA, NEW->ROADMAP
- IDEA: IDEA->ROADMAP
- TRACK
- {
- TODO:
- {
- {
- ROADMAP: ROADMAP->SOON
- SOON: SOON->READY }
- }
- READY: READY->DO
- WIP
- DO: DO->CHECK
- CHECK: CHECK->DO, CHECK->FINISH
- FINISH: FINISH->DONE }
actionable := (READY or WIP) and !WAIT and !DELEG needsYou := actionable or (TODO and !BOOKED)
so here we have 10 user-visible states (new idea roadmap soon ready do check finish cancel done), and 3 user-visible tags (wait deleg booked). Behind the scenes, we have 7 more concepts (open close track todo wip actionable needsYou). So 13 user-visible things and 20 things total.
should BOOKED be ortho with READY, also?
note: the naming convention is broken with BOOKED but i think just saying BOOK would be confusing, and i cant think of a better word.
i kind of like this one.
at this point we can give an explanation of the semantics of each state, and why it's useful:
NOTE: the state transitions above describe the 'ideal' path of a task through the workflow, but in reality, the software lets you change the status arbitrarily.
NEW: just entered into the system. May need to have stuff like importance, category set. IDEA: a potential future task; a someday/maybe. It has not yet been decided whether we are going to do the task in the forseeable future. We want to keep this task in the system, but we don't need to track it.
TODO states: things that we are planning to ROADMAP: a task that we are planning to do in the forseeable future. We need to regularly review this task to make sure it moves forward. SOON: similar to ROADMAP, but also indicates that this task will be done 'soon'. Perhaps you have some other things that you need to do to get ready for the task; now is the time to start doing those. READY: a task that is ready to be done now
WIP states: (W.I.P. = Work In Progress) things that are being worked on DO: a task that is being done CHECK: checking over/verifying/testing/validating the work that was done. This can be something we are doing, or it could be that we are waiting for someone else to look it over and approve it. FINISH: whatever needs to be done after the task has been checked and passed. For example, deploying software after it has been tested; billing clients after the client has signed off on a completed project; cleaning up a worksite; etc.
CLOSE states: CANCEL: the task wasn't completed and we aren't thinking about doing it DONE: the task was completed
(about 13 user-visible states+groups of states there, plus 3 tags below = 16 things for the user to understand well)
groupings of states: OPEN/CLOSE: OPEN states are things that we are thinking about doing. CLOSE are the others (CANCEL and DONE are CLOSE, and everything else is OPEN). TRACK: tasks that we plan to complete (and so they need to be kept track of). TODO or WIP
tags: BOOKED: this can apply to ROADMAP and SOON. It means that there is a schedule or plan to start doing this task at some point, so it is not in need of scheduling. WAIT: this can apply to anything in TRACK. It means that the task is waiting before it can proceed, so there's nothing you can do to push it forward now (except perhaps followup with someone else if the task is waiting for them to do something). Some reasons that a task may be WAIT are that it may: have been placed 'on hold' by you; be waiting-for someone else to do something; be dependent on some other task and waiting-for that task to complete; be waiting for time to pass or for some external event to occur. DELEG: this can apply to anything in TRACK. It means that you have delegated/assigned/hired someone else to do this task, so there's nothing you can do to push it forward now (except perhaps followup with the delegee)
predicates: actionable: Things that you might work on now. (READY or WIP) and !WAIT and !DELEG needsYou: Things that need you to do something (either do the task, or plan for it to be done/schedule it/push forward its planning) . actionable or (TODO and !BOOKED)
some other potential tags: IMP URG FLAG TROUBLE QUESTION MAYBE
---
old design todos
- need to consider implementation difficulty of stuffing everything into TODO status vs different properties vs tags
- could even have 'derived' TODO statuses that represent important combinations of various ortho properties
Core data structures
Area data structure
- id: primary key
- name: string
- parent_area: reference to an Area. Nilable.
Item data structure
- id: primary key
- item_type: can be TASK, NOTE
- parent_heading: reference to a Heading. Nilable. Exactly one of parent_item, parent_area can be nil.
- parent_project: reference to a Project. Nilable. Exactly one of parent_item, parent_area can be nil.
- other_parent_projects: array of reference to Projects.
- parent_area: reference to an Area. Nilable. Exactly one of parent_item, parent_area can be nil.
- previous_item: reference to an Item. Nilable
- next_item: reference to an Item. Nilable
- ref: field for a custom external ID (for example the task numbers in a list of tasks that you sent to a collaborator). Nilable.
- creationDate
- lastUpdated
- owner: who owns this task
TaskTemplate (subclass of Item)
- duration (dur): Can be an era or a date-duration. How long you expect the task to take (given its current progress; so this gets smaller when you work on the dask). The default is nil, the 'quick' tag is equivalent to 0. Nilable.
- supassigner: person who assigned this task to you. Nilable.
- supassigner_task: reference to the assigner's version of this task. Nilable.
- subTasks: reference to an ordered list of Tasks. Nilable.
- must: floating-point. Whether the task is optional or a necessity. The default is 0, the 'must' tag is equivalent to 1.
- importance (imp): Floating-point. How important it is to do the task. The default is 0, the "imp" tag is equivalent to 1, the 'low' tag is equivalent to -1. Importance of a task is interpreted relative to its parent project, if any.
RecurringTask (subclass of TaskTemplate)
- recurDelay
- recurDelayFromDone: bool. If False, then recurring tasks bubble up with a certain delay from the last time they bubbled up, regardless of whether you finished the previous instance or how long it took to finish it. If True, then the delay clock only starts ticking when the previous instance is finished.
Task data structure (subclass of TaskTemplate)
- whenTime: Can be a timeEra or a date. When you intend to work on the task. float. Nilable.
- whenSeq: seqEra. When you intend to work on the task. float. Nilable.
- start_override: when the task should be started
- softDeadline: Can be an era or a date. When you hope to finish the task. Nilable. (was called: finish (fin))
- hardDeadline: Can be an era or a date. Hard deadline. Nilable. (was called: due)
- defer: Date. The task is in a 'snooze' state until this date. Nilable.
- priority (pri): Floating-point. Like a 'when', but timeless; that is, used to order when you plan to work on tasks without reference to dates/eras. Nilable.
- reminders: Array of dates. Reminders for this task will be issued on each of these dates. Can contain past dates; a date is only deleted from this array after the reminder is explicitly acknowledged.
- instanceOfRecurringTask: if this is an instance of a recurring task, then a reference to the RecurringTask?. Nilable.
- urgency_override: How urgent it is to work on the task, if it is to be finished by the due date. Nilable.
- subassignee: person to whom you assigned this task to. Nilable.
- subassignee_task: reference to the assignee's version of this task. Nilable.
- isProject: bool. Data-structure-wise, a 'project' is really just a task but for UI purposes they are treated differently (displayed as a list of projects, etc). (todo: is this really true what with global importances?)
- isAction: bool. Data-structure-wise, an 'action' is really just a task but for UI purposes they are treated differently (not displayed as freestanding tasks in queries, but rather only displayed as part of their parent task).
- tracked: trinary. How much this is a task that the user needs to keep track of (high) vs how much this is just an idea on a list of things to possibly do, that doesn't need to be recalled unless the user looks for such things (low)
- superTask: reference to a Task. Nilable.
- whenFirmness: float. default 0. >=1 means firm when (that is, you are pretty committed to working on this on the when date). Note: this captures my (C) vs (D) in my simpletask system
- flag: float. default 0. >=1 means 'flagged'. Flagged things are items that you want to keep top-of-mind for whatever reason. Higher 'flag' value means more top-of-mind.
- health: how are we doing on this task? An integer. Health enum. Nilable.
- taskType
- quickness: float. -1 is slow, 0 is medium (eg go to the bank), 1 is quick (eg send this short email). Nilable.
- votes: float
- dependsOn: array of references to Tasks
- dependedUponBy: array of references to Tasks
- milestone: string. Nilable
Computed properties:
- For any field that can be an era or a date, you can convert it into an era
- start. startOverride if not nil, otherwise start_recommended
- startRecommended. finish - duration. Can be an era or a date. When the task would have to be started in order to comfortably finish it. Nilable. Computed from 'finish' and 'duration'.
- urgency. urgency_override if not nil, otherwise urgency_recommended
- urgencyRecommended. 1 - (due - current_date)/duration.
- parentProjectMaxImportance: the highest importance currently assigned to any task within the parent project (including tasks that are descendents but not direct children of the parent project), or nil if no parent project. Nilable.
- parentProjectGlobalizedImportance: the current globalizedImportance of the parent project, or nil if no parent project. Nilable
- globalizedImportance: the product of (this task's max(importance,0) / max(parentProjectMaxImportance,0)) with max(the parent project's globalizedImportance,0), or if no parent project, just importance
NOTE:
- implementation difficulty of computed urgency probably too great; mb go back to just manual URG
- implementation difficulty of computed importance probably too great; mb go back to just manual global IMP, and then also add a local priority
- can just go back to letter priorities for local priority -- can use things past M
Note data structure (subclass of Item)
- priority (pri): Floating-point. Like a 'when', but timeless; that is, used to order when you plan to work on tasks without reference to dates/eras. Nilable.
- text: string
Heading data structure
Computed property:
Person
- id: primary key
- handle: an short, easy-to-type nickname with no spaces. string. Unique across all Persons.
- name: the person's "full" name. string. Nilable.
- email: the person's email. string. Nilable.
- phone: the person's phone number. string. Nilable.
- organization: organizational or group affiliation. string. Nilable.
- custom_info: other info (such as contact info). string. Nilable.
- user: a reference to a user account, if any. Nilable.
- ref: field for a custom external ID (for example the person's URL in some online contact db)
User
- id: primary key
- person: a reference to this User as a Person
- groups: a set of (group, role) giving groups where this user is a member of, and their role in that group (computed from Group members)
- taskSubstriptions: array of references to Tasks
- starredTasks: array of references to Tasks
Group
- id: primary key
- name: string. Unique across all Groups.
- members: a set of (user, role).
- custom_info: string. Nilable.
- ref: field for a custom external ID
CalendarEvent
todo
calendar events have a project field, etc (mb they are even a subtype of task, or maybe both tasks and events share a superclass?)
Eras of time (timeEra)
Time eras are represented as integers using the following enumeration/convention:
1=today 2=tomorrow 3=next_few_days 4=week 5=next_few_weeks 6=month 7=quarter 8=year 9=someday 0=nil. In the UI the "0" key is used to assign this.
A floating point number in between two eras is treated as falling in the next higher era (eg 1.5 is in the 'tomorrow' era)
Most eras are subsets of each other: (today or tomorrow) \subseteq few_days \subseteq week \subseteq few_weeks \subseteq month \subseteq quarter \subseteq year \subseteq forever
Eras of sequence (seqEra)
Used for sprint-like ordering/classification
1=now/current 2=next few 3=current sprint 4=next sprint 5=near/soon 6=planned to do sometime 9=not planned yet/idea 0=nil
hierarchy:
9unplanned 8planned
|
4current,5next,6second,7near
|
1now,3nextfew
|
2next
---
- hierarchy: area / project / task. Any of these can have levels (limited or unlimited?) of sub-Xs, eg subareas, subprojects, subtasks
Questions
- parent_project implies that projects are NOT just tasks; do we want that?
- do we want to forbid a project under a non-project task?
- mb, esp. if importance is project-relative
- do we want to have a max hierarchical depth for areas, projects? eg reify subarea, subsubarea, subproject, subsubproject, and not allow further 'sub's under those? Seems limiting but could be useful for UI. Similarly, do we want to limit the depth of headings, or the interleaving of tasks/projects/headings?
- mb, esp. if importance is project-relative, so that we can add fields for these, so that we can easily compute global importances
- should there be a small limit to number of levels in any one of these? May help with UI. 7 would probably handle anything but that's a lot. The old 7+-2 rule might suggest 5, but that's still a lot. 2 is probably too little; think of construction: smith-house/second-floor/master-bedroom/bathroom/shower. That we're dealing with numbers as big as this suggests that maybe we just shouldn't have a limit. If i had to choose now, i'd say have a limit, and the limit should be 5. BTW APA defined 5 levels of headings: https://owl.purdue.edu/owl/research_and_citation/apa6_style/apa_formatting_and_style_guide/apa_headings_and_seriation.html . The typical scheme for different types of heading characters has 5 levels: I.B.3.d.v (i think i prefer 1.2.3.4.5 tho; see https://typographyforlawyers.com/hierarchical-headings.html ; also, that way if you change the level of a heading, it doesn't change).
- we have stuff like milestones, phases, subphases, etc, and then we have 'eras'. Should we rename era to timescale? Should we use the words epoch or stage or epic for something? Is a milestone different from a phase/subphase? In general, we have time-based segmentation (eras) and custom planning segmentation (phases). And then there are things like 'sprints', which are a third kind of segmentation; in that sort of system would like to mark tasks as 'current' vs 'next'/on-deck vs 'near' vs 'far' (or mb just now/near/far).
- in geology we have "Eons are divided into eras,[2] which are in turn divided into periods,[3] epochs and ages"
- combine defer and reminders: should we just use the defer date as a 'next reminder', and ack reminders by snoozing?
- combine imp and must: should we delete 'must' and consider it redundant with 'imp'?
- the urgency formula might not be quite right -- currently, a long task which is projected to be overdue by one day is less urgent than a short task whic is projected to be overdue by one day, is that what we want? Also, it's a little counterintuitive that a task that we have just enough time for is urgency 0; maybe we should add 1; but if we do that then tasks which are due today have urgency 2, which is also counterintuitive.
- should we have a 'requested' status that is after TODG?
- should we combine defer dates and reminder dates
- task field for self-action versus context dependent action such as talking to someone?
- computed task property for whether or not something is urgent in an era?
- whence priorities?
- is this overdesigned?
- are both important and urgencies by era? What about flags? Is a by-era flag used to mark something for an era overview?
- should we have era overviews? if so, how do they work? Are tasks auto-selected into the overview by importance/urgency, and/or are they manually selected into the overview with a flag?
- on the task list view, when there is subsubsubarea and subsubsubprojects, how many levels of hierarchy to show by default? All of them?
- the value of urgency could be an era, the era in which the task becomes urgent?
- should we reify subprojects and add a field to tasks for that, to assist in computing global importance?
- should all due dates be hard deadlines? should we use the word deadline instead of due date?
- instead of just isTracked, should be have tracked vs untracked/later vs somedaymaybe?
- is next action is subtype of the ready task status? So we would have a status called NEXT
- in order to simplify, may want to avoid sounds-similar-but-subtly different things; e.g. inactive vs on-hold vs waiting-for vs later
- should we have tags that can have statuses, like a 'waiting-for' tag with status:on-hold, so that when you tag a task with that it makes the task status on-hold?
- how to do custom when eras?
- are flags per-era?
- many of the fields on task could be unified under a few types: tristate, float, enum, dates, and hierarchical tags. Maybe should have generic facilities for these?
- no, more than that; i'm thinking of a more powerful/abstract UI that is based on these things. Some parts of the above data structure schema would merely be a default profile loaded into this system. Profiles could be project-specific.
- so shall 'project' also mean something like what it does in an IDE, a grouping of items, also grouped together with their UI settings (and build settings, but not quite sure what is the equivalent to that in todo-system-land; perhaps the assignment of special roles to some items in the grouping?)?
- should whenTime and whenSeq be one field with two alternate enum values?
- for 'anytime', should whenTime be nil?
- mb want a way to categorize 'someday' ('zzz' in my lingo) stuff under 'projects' that represent timescales, e.g. "soonish", "this year"
- i already have primary/later/zzz, but i find i don't use them enuf, why not?
- if you have stuff like when =month how do you know when to advance that to week? Manual review? Actual dates are much better in that regard.
---
better names for ROADMAP? intent? agenda? plan? chosen? will? selected? scheme? track? plot? intent, will, chosen dont capture that not only do we intend to do this, we are tracking to do this in the forseeable future -- it's not just a SOMEDAY selected is too generic and too long agenda is good but maybe too overloaded. plan is too overloaded, b/c (a) it sounds like BOOKED (b) maybe this task needs to be planned out track is something that we do to other states too, so that would be confusing scheme and plot would probably confuse ppl remaining: roadmap agenda onplan inplan so far, ROADMAP is still best
maybe CUT instead of CANCEL
statuses
- task statuses (3 kinds; status of task, status of your activity on task, status in system?)
task completion statuses:
task what-do-I-need-to-do-with-it statuses:
- TODO
- READY ?or maybe ACTIONABLE?
- ?NOTREADY should this just be an isReady bool?
- WIP
- NOTSTARTED
- ?shouldnt these have similar substates as below WAIT, below?
- WAIT
- WAIT_FOR_DEPENDENCY
- WAIT_FOR_TIME
- WAIT_FOR_DELEGEE
- WAIT_FOR_REPLY
- WAIT_BLOCKED
task state-of-organizational-system statuses:
- TODO
- NEW/needs-triage/inbox
- IDEA
- READY
- WIP (active?)
- TODG
- DELEGATED
- CHECKING
- DONE
- SELECTED
- WAIT
- RELY? (subset of delegated?)
- SOMEDAY/MAYBE?
(um, no, e.g. CHECKING is a completion status, not an organizational system status)
does delegation go in what-do-I-need-to-do-with-it or state-of-organizational-system statuses?
- project status in terms of its status (the completion state of the task), vs in terms of what-do-I-need-to-do-with-it (vs in terms of state-of-organizational-system eg NEW/needs-triage/inbox)
task health statuses (and their colors): - healthy: green - minor_problems: yellow - major_problems: red - waiting/paused: blue
- 'Y: pending X' is a good way to say 'task Y hasn't started yet because it's waiting for X to complete first'
- mb extend char limit on statuses to 7 chars, then we can have PLANNED. Or do we want just PLAND?
old note: statuses can have substatuses (eg. todo can be 'todo' vs 'soon', done can be replaced by 'done' vs 'cancelled' vs 'hold', so in total we can have active/todo, active/soon, inactive/done, inactive/cancelled, inactive/hold)
ideas for smaller group of statuses:
- NEW
- IDEA
- TODO
- SOON
- BLOC
- WAIT
- WIP
- DONE
- HOLD
- NOPE
- NOPE
- CANCELLED/DISCARDED
- CANTREPRODUCE
- FAIL
- RELY
mb "roadmap" instead of "planned"?
now ondeck soon anytime later someday
task completion status ideas: TODO/WIP/PAUSED/DONE TODO: NEW/IDEA/ROADMAP/PLANNED/READY/NEXT WIP: WIP/CHECKING/FINALIZING/REVIEWING/DONE
INACTIVE/ACTIVE/DONE
i guess WAIT is a what-do-I-need-to-do-with-it status, whereas HOLD is a task completion status
does the TRACKED/UNTRACKED/LATER/ZZZ stuff go here too? mb. that sounds like state-of-organizational-system stuff.
does WHEN stuff go here eg SOON, NEAR? No, scheduling is not status. Except that NEXT might be a state-of-organizational-system status. PENDING might be a state-of-organizational-system status, or a task completion status.
so here's some ideas: task completion statuses: TODO/DOING/DONE/HOLD TODO:IDEA/ROADMAP DOING:PLAN/STARTED/CHECK/FINAL DONE: DONE/DEAD
should PEND, BLOCK, HOLD be in task completion statuses? How about HALFway done?
i guess one way to think about is the task completion status is what a third party would want to see to see how a task is progressing. That would suggest, though, they you would want health stuff like BLOCK, HOLD, although from another perspective that seems ortho.
i guess another way to think about it is to write the agenda views that i want, and then redo the statuses to make them clearer.
task what-do-I-need-to-do-with-it statuses: READY/PEND/WAIT/BLOCK/TODG/DG
task state-of-organizational-system statuses: NEW/UNTRACKED/LATER/TRACKED/TODG/NEXT/RELY/REVIEW
or should DG be state-of-organizational-system statuses?
mb what-do-I-need-to-do-with-it statuses should just be READY/NOTREADY. Although maybe IDEA/ROADMAP is also a what-do-I-need-to-do-with-it concept.
and actually, DONE is a subtype of CLOSED (NIX is a potential sibling)
WAIT PAUSE PARK STALL STOP
so mb WAIT vs DG are actually separate/ortho from each other
- still need to think a bit about what are the design goals for statuses
so maybe the three things are:
- completion
- 'stoplight health' is a subset of the WIP state here
- (how) is the task in motion (eg wait or not)
- what do you (and/or your organizational system, as a proxy for you) need to do about it (eg new, tracked, todg, dg, rely, untracked, stew)
- is there something in between IDEA and ROADMAP for things which are 'accepted' as tasks to complete, yet are not yet on the roadmap? Or maybe ROADMAP is that, and SCHED or PLAN is the next thing? That is to say, instead of SOMEDAY+MAYBEs, perhaps tasks start as MAYBEs and then transition to SOMEDAYs? Or, perhaps that's not quite it; perhaps something 'accepted' is still a maybe; it's accepted that we (probably) want it, but not that we'll actually get around to it. So maybe ACCEPTED or APPROVED is the best we can do? Maybe WANT (so IDEA, then WANT). Or maybe TODO (so IDEA, then TODO), altho mb that should be the superclass of subclasses like WANT.
should "snooze/defer" be a status?
my current setup has: NEW(n) IDEA(i) TODO(t) NEXT(x) PLAN(p) DO(d) BLOC(b) SET(s) SOON(o) GO(g) WIP(w) VERI(v)
LATER(l) MAYBE(m) RELY(r) DONE(e) HOLD(h) NOPE(-) CANT(c) OSCOPE(0) REF(r) |
other tags: WAIT STEW DG TODG WARN IMPORTANT URGENT QUICK LOOM DEC KEY MUST
some flaws with that:
- no READY
- something can be waiting on a dependency before it is started, or after (WAIT should be ortho)
- DELEG should be ortho (and included)
current ideas:
statuses before the
are open, after are closed. |
task completion: IDEA TODO WIP
DONE NIX |
substates of TODO task completion: ROADMAP PLAN READY NEXT substates of WIP task completion: GREEN YELLOW RED CHECK FINISH what you have to do: NEW TRACK REVIEW LATER RELY UNTRACK |
delegation: TODG DELEG FOLLOWUP RELY |
stop or go: WAIT PAUSE BLOCK DEP STEW HOLD |
what these mean: task completion: IDEA TODO WIP
task completion means how close the task is to being done
IDEA is an idea for a task that you haven't decided whether to do or not
TODO is a task that you want to do but haven't done yet
WIP is a task that is being working on
DONE is a task that has been completed
NIX is a task that has not been completed and is no longer planned to be done
substates of TODO task completion: ROADMAP BOOKED PLAN READY NEXT ROADMAP means that you are planning to do this task at some point BOOKED is a task that is not yet WIP but that we don't need to worry about finding time for because it has been scheduled/planned/delegated/booked PLAN means that you need to plan out how/when to do this READY means the task is ready to be done NEXT means that this task has been selected, possibly among some others, to be done "next", although multiple tasks can be in NEXT at once.
should BOOKED be a closed state? Alternately we need another distinction between TODOs that need attention, and BOOKED which does not. Should BOOKED be moved into 'what you have to do'?
we could extend the semantics of the
to mean any sort of distinction, then we get: |
substates of TODO task completion: ROADMAP PLAN READY NEXT
ROADMAP means that you are planning to do this task at some point
PLAN means that you need to plan out how/when to do this
READY means the task is ready to be done
NEXT means that this task has been selected, possibly among some others, to be done "next", although multiple tasks can be in NEXT at once.
BOOKED is a task that is not yet WIP but that we don't need to worry about finding time for because it has been scheduled/planned/delegated/bookedwhere the
means things that need attention, vs things that dont |
substates of WIP task completion: GREEN YELLOW RED CHECK FINISH GREEN means the task is coming along as planned YELLOW means there are some minor issues RED means there are major problems; the task requires major attention, and/or the task may not complete as planned and/or may be very late CHECK means that it is thought that the task is complete, but it still needs to be tested/double-checked/verified/approved by stakeholders FINISH means that the task is complete except for some finishing stuff (e.g. releasing to production, billing the client, etc)
delegation: TODG DELEG LOOK
TODG means you need to delegate this task
DELEG means the task has been delegated, but you still need to keep an eye on it
LOOK means the delegee says the task is done, and you need to take a look, and maybe send it on
RELY means the task has been delegated, and you can rely on the delegee to do it without you keeping an eye on it, unless something extraordinary happens (e.g. if the delegee quits)where the
means things that need attention, vs things that dont |
what you have to do: NEW TRACK DO STEW DEC FOLLOWUP REVIEW
NEW means the task is new to the system and may still need to be described/prioritized/categorized/scheduled/triaged
TRACK means you need to keep an eye on the task, and maybe plan when to do it
DO means you need to do the task
STEW means that you need to mull something over before continuing
DEC means that you need to decide something
FOLLOWUP means you need to follow up with someone
REVIEW means the task is closed except you should do a personal retrospective on it
LATER means that task is for a later phase of the project, and doesn't need to be tracked right now, although it probably will be tracked later
UNTRACK means that the task is not being 'tracked', for example, someday/maybe taskswhere the
means things that need attention, vs things that dont |
stop or go: GO STOP
GO means that the task can proceed (if someone does it)
STOP means the task is being stopped by something
HOLD means the task was put on hold, and does not need to be paid attention to unless and until is it taken off hold here, the
substatuses of stop: WAIT BLOCK
WAIT means the task is waiting for someone to get back to you, and may require followup
PAUSE means the task is waiting for time to pass or for some external event or condition to occur
BLOCK means the task has encountered some problem halting progress that needs attention
DEP means the task is waiting for another task to be completed before it progresses (maybe this should be PENDing?)where the
means things that need attention, vs things that dont (except to check if the condition is satisfied yet) |
now, which of these are mutually exclusive? If a bunch are mutually exclusive, then we can make them the orgmode 'TODO states'. Let's start with task completion. These can be combined with the substates of TODO and substates of WIP. They cannot be combined with delegation, because a task can be delegated before it is started or after. They probably can't be combined with 'what you have to do', b/c eg a task can be RED or GREEN, although here i'm not sure, and maybe RED YELLOW GREEN could be eliminated instead. I should think about this more.
STOP can't exactly be combined with task completion but it almost can; we just want to store the task status in a tag when it goes into STOP and then restore it later.
i think maybe we should split out the RED GREEN YELLOW.
maybe think about combining them like this: You sit down at your computer after going on vacation for two weeks, and need your memory refreshed about where things are at. As each task comes up, you think, "Oh yeah, that stupid thing. So where's this *#$*@! task at? And what do i need to do about it?". If any of these can answer those questions best, maybe they should be orgmode TODO states, even if they are logically ortho to task completion.
IDEA TODO WIP
DONE NIX? Yes, all of those. |
ROADMAP PLAN READY NEXT BOOKED? Yes, all of those. |
GREEN YELLOW RED CHECK FINISH? Yes, but we're taking out GREEN YELLOW RED, as per above. TODG DELEG LOOK RELY? Yes |
NEW TRACK DO STEW DEC FOLLOWUP REVIEW LATER UNTRACK? Some of them (NEW STEW DEC FOLLOWUP REVIEW); TRACK may not belong here, and maybe not LATER or UNTRACK either. |
GO STOP HOLD: HOLD and maybe STOP |
So, revised proposal:
completion: IDEA TODO WIP
DONE NIX |
TODO: ROADMAP PLAN READY NEXT BOOKED |
WIP: DO CHECK FINISH Delegation: TODG DELEG LOOK RELY |
What you have to do: NEW STEW DEC FOLLOWUP REVIEW Stopping: WAIT BLOCK PAUSE DEP HOLD |
That's 27 states! One too many for the 26 letters of the Latin alphabet! So maybe remove one of those. Maybe DO, b/c DO has the same semantics as its parent, WIP. So:
completion: IDEA TODO WIP
DONE NIX |
TODO: ROADMAP PLAN READY NEXT BOOKED |
WIP: CHECK FINISH Delegation: TODG DELEG LOOK RELY |
What you have to do: NEW STEW DEC FOLLOWUP REVIEW Stopping: WAIT BLOCK PAUSE DEP HOLD |
and ortho to all of those: TRACKED
mb change TODG to ASSIGN because none of the tohers start with A, but TODO starts with T.
alphabetically: ASSIGN BOOKED BLOCK CHECK DONE DEP DEC E FOLLOWUP FINISH deleG HOLD IDEA J K LOOK roadMap NEXT NEW NIX O PLAN PAUSE Q READY RELY STEW TODO U reView WIP WAIT X Y Z
OK rename DEP to reQuire. paUse. niX. relY. bOoked. DEC = STEW. NEXT can be/should be a tag rather than a status (TODO make NEXT a tag)
Now we have: alphabetically: ASSIGN BLOCK CHECK DONE E FINISH deleG HOLD IDEA J K LOOK roadMap New bOoked PLAN reQuire READY (could also be E) STEW TODO followUp reView WAIT WIP niX relY Z (pause)
so what should WIP be renamed/what letter should WIP be assigned to? Honestly PLAN may not need to be a status. We can always make separate tasks to plan things. So:
ASSIGN BLOCK CHECK DONE E FINISH deleG HOLD IDEA J K LOOK roadMap New bOoked wiP reQuire READY STEW TODO followUp reView WAIT niX relY Z (pause)
so right now we have: NEW(n) IDEA(i) TODO(t) WIP(p)
DONE(d) |
NIX(x) |
ASSIGN(a) DELEG(g) LOOK(l) RELY(y) WAIT(w) BLOCK(b) PAUSE(z) REQUIRE(q)HOLD(h) |
ROADMAP(m) READY(r) CHECK(c) FINISH(f) BOOKED(o) STEW(s) FOLLOWUP(u) REVIEW(v)
NEW conceptually belongs with STEW(s) FOLLOWUP(u) REVIEW(v) RELY BOOKED PAUSE REQUIRE REVIEW are open statuses that don't require attention
most common are probably: NEW(n) IDEA(i) TODO(t) WIP(p) WAIT(w) ASSIGN(a) DELEG(g)
DONE(d) NIX(x) |
maybe make those the first line (as long as there's a toplevel keybinding to go directly to DONE; otherwise probably want just NEW IDEA TODO DONE) (NEW is in here so that you can start on NEW and cycle to IDEA easily) (maybe dont have NIX there, i'm not sure)
and ortho to all of those: TRACKED
LATER UNTRACKED |
and ortho to all of those: NEXT
should we introduce STOP so that we have something like WAIT that generalizes WAIT BLOCK PAUSE REQUIRE that can go in the 'most common'?
and right now we have properties additional properties: completion, tracking, inMotion, isNext, health and computed properties attentionRequired, isOpen, isReady NEW STEW FOLLOWUP REVIEW can just be tags (or just todo states that act in place of tags). STEW FOLLOWUP REVIEW can be named something like 'microactions' or stdActions or something
maybe LATER is just a negative attentionRequired tag, rather than isTracking, and isTracking is a bool maybe we have: nexts \subseteq actionable \subseteq attentionReqd \subseteq tracked well not quite b/c you have have actionable untracked things -- but it's true that if something is both tracked and attentionReqd then there's something about that. Also the name attentionReqd is misleading because if it's low-priority and untracked you don't want to pay attention to it even when it is in an attentionReqd state.
someone else's: (setq org-todo-keywords (quote ((sequence "TODO(t)" "NEXT(n)" "
(sequence "WAITING(w@/!)" "HOLD(h@/!)" "|" "CANCELLED(c@/!)" "PHONE" "MEETING"))))
hmm mb get rid of the following as a separate data item (altho keep it conceptually): TRACKED
LATER UNTRACKED |
and instead compute that based on IDEA being UNTRACKED, LATER being a new status, and everything else being TRACKED? Well, that loses the ortho of having eg an untracked task be WIP. Hmm..
mb get rid of LOOK; just call it CHECK. How are we distinguishing b/t us checking and someone else checking? Maybe someone else checking is a WAIT?
why_nix: NOPE(-) CANT(c) WONT GAVEUP SKIP MISSED OSCOPE(0) DUP(r) CANCEL DELETE NOPE means someone decided they didn't want this to be done CANT means the task seems to not be feasible subtypes: CANTREPRODUCE WORKSFORME WONT means the task seems to contradict a design constraint or goal GAVEUP means we encountered difficulty and gave up SKIP means this task was skipped due to deprioritization MISSED means we missed our opportunity to do this OSCOPE means the task was decided to be out-of-scope DUP means the task has been merged into another (mb MOVED would be better; mozilla has both DUP and MOVED) CANCEL means that whoever desired/asked for the task changed their mind/unasked for it DELETE means that the task was deleted from this system for some reason INVALID
Internal planning as in how are we going to do this and X ternal planning as in how does this fit into the larger plan . Either of those can be in the plannING stage or plantnED.
booked description: You can have things scheduled for a certain day or you can just have things that are "Scheduled " Meaning that they are in some ordering or dependency chart or that someone else is responsible for them
One way to look at primary Task status is: whatever the kanban columns, should be?
(i mainly put requested not bc its a good state but bc it has a good abbrev: req)
- ASK is a nice short word, maybe should be a state. Could be used instead of ASSIGN or REQUEST. Could also be used for TOCONSIDER.
- definiteness (or committment) ortho status: idea, should, toconsider
- there's something in between IDEA and something definitely on the roadmap/in a sprint: "to consider", something that you are not sure if you are going to do, but you definitely are going to consider it at some (mb only slightly) later time; this is sort of a "definite maybe". For example, when renovating a house, you might thin "while we have that wall open, maybe put in ethernet cable"; maybe it's a good enough idea that definitely want to consider it, but you need to see how much it will cost and how long it will take, and maybe for some reason that information can't be available until some later step in the process.
- relationship between ROADMAP and either tracked or needsAttention? For example, do you only track things on the roadmap, or only pay attention to those tracked things on the roadmap?
- whenSeq is not quite but sortof a subset of READY or of ROADMAP -- in the sense that first you decide to do something, then you assign it to the current sprint. It's not quite, because something could be assigned to an upcoming sprint either before or after it is READY. In any case, you could give whenSeq keyboard shortcuts of digits in the same keymaps where you have the letters for todo statuses
- 4 trinary conceptual dimensions (so 81 states), which is too many states, but only a small subset of these are valid Todo statuses (certainly less than 26) (it would be nice to just have 3 dims (27 states), but I think that's too few)
- the 4 dims are used to have axioms whose theory which explains/defines which todo statuses are valid, amongst other things
- even though the software operates with the todo statuses, which have a sort of idiosyncratic structure between each other, it is explained with the 4 dims, which is somewhat simpler
- as of this writing, below i have 23 states, but i think we can cut some of those: NEW(n) IDEA(i) TODO(t) WIP(p)
ASSIGN(a) DELEG(g) LOOK(l) RELY(y)
WAIT(w) BLOCK(b) PAUSE(z) REQUIRE(q) | HOLD(h)
ROADMAP(m) READY(r) CHECK(c) FINISH(f) BOOKED(o)
STEW(s) FOLLOWUP(u) REVIEW(v)
- can mb remove the 'microactions' like STEW FOLLOWUP REVIEW LOOK, and maybe ASSIGN, for example
- mb CHECK, FINISH, except that CHECK is higher priority than WIP (and WIP should be higher priority than READY), so there is some semantics to CHECK (and same goes for FINISH, which is even higher priority than CHECK, although i'm not sure if we need both CHECK and FINISH); otoh the same goes for WIP vs READY, so maybe that's enuf
- also FOLLOWUP is different from WAIT in that it is actionable; could just create a new task for the followup but would be more convenient to have a FOLLOWUP status
- is importance or urgency or some combination one of the 4 dimensions? No, they are ortho to the TODO statuses (even though they are also trinary)
- even bulletjournals have todo statuses vs 'signifiers'
- similarly, "when" ("scheduled") dates, due dates are, like imp urg, 'planning' attributes that are not one of the 4 dims
- should map out the todo states (which ones are subsets of each other), and for each one, give its attributes on the 4 dims
- so what are the 4 dims? i think 3 of them are: completion/openness, activity (stop or go), actionability (or more generally, what you/the system have to do next)/needs attention. Not sure what #4 is?:
- committment/defineness (could would/toconsider should will must? or something trinary encompassing these)? or, related,
- firmness (eg is 'scheduled' a reminder or a when date? is the due date a hard deadline? when we say this is a TODO, does that mean we have selected/committed to it/we definitely (or close to that) want to do it?)
- trackedness (tracked/untracked/later)?
- needs attention?
- mb saying 'trinary' is a little overly prescriptive/numerology-ical. different dims can have different numbers of enums. Also, 4 might not be a hard rule either.
NEW: not started
started (any open), any activity, actionable, tracked |
IDEA: not startedstarted (any open), go, actionable?, untracked |
TODO: not startedstarted (any open), any activity (eg dep, ready), actionable?, tracked |
WIP: started, ready, actionable, tracked DONE: done, n/a, n/a, n/a NIX: done::nix DELEG: started?, go?, not actionable, tracked RELY: started?, go?, not actionable, later? untracked? WAIT: any open, stop, not actionable? or is it needs attention b/c followup?, tracked BLOCK: any open, stop, actionable?, tracked or later PAUSE: any open, stop, not actionable, tracked or later REQUIRE: any open, stop, not actionable, later HOLD: any open, stop, not sure about actionable?, untracked ROADMAP: not startedstarted (any open), not actionable? (not READY), tracked? later? |
READY: not started, actionable, tracked? (NEXT?: not started, actionable, tracked?) CHECK?: started, actionable, tracked BOOKED: not startedstarted (any open), not actionable and doesn't need attention, tracked? |
a lot of question marks there, suggesting that the choice of 4 dims either isn't quite right yet, or aren't formalized enuf yet also, a lot of things are unspecified w/r/t one or more dims, so an exhaustive enumeration like this may not be the right notation; it's too cluttered; so mb just mention the ones that are constrained w/r/t some dim
if you look at all those states, here are the ones that are very common: new idea todo wip check finish done nix wait
and here are the others: assign deleg look rely block pause require hold roadmap ready booked stew followup review
- recall that a use of SOON was to deal with things like i've delegated a big house project to a GC, but when they are closing the walls that means painting will occur soon, and i need to remind them about various details at that time; and a use of BOOKED was to deal with things where i've delegated a big project like that but i need to make sure the delegee doesn't forget some subproject (in other words, it doesnt need action nor does it need planning attention)
- could merge completion and commitment: a task journeys from uncommitted to committed before it gets scheduled etc
READY can mean two things:
- the task is not blocked by dependencies
- or, the task is not blocked by dependencies, and it's slated to start
BLOCKED can mean two things:
- the task is blocked by dependencies
- or, the task is stuck in some way that probably needs your attention to un-stick it
in one sense, it doesn't matter much to the task manager whether potential tasks have been 'accepted'/approved yet (eg. toconsider/explore have not been accepted yet), vs when they have (eg ROADMAP; backlog::icechest vs backlog::backlog); in either case, the task needs to be shown to the user for deciding/planning (perhaps at the proper time, after some dependencies have been resolved). On the other hand, it's something that the user probably wants to see, so it should be included. So, should we include stuff like COULD/WANT
WOULD/SHOULD/WILL/MUST or not? |
the orthoness of WAIT and DELEG is making me question trying to include all of this into a single status again
- OPEN: OPEN->CUT
- NEW: NEW->IDEA, NEW->ROADMAP
- IDEA: IDEA->ROADMAP
- TRACK
- {
- TODO:
- {
- {
- ROADMAP: ROADMAP->SOON
- SOON: SOON->READY }
- }
- READY: READY->DO
- WIP
- DO: DO->CHECK
- CHECK: CHECK->DO, CHECK->FINAL
- FINAL: FINAL->DONE }
actionable := (READY or WIP) and !WAIT and !DELEG needsYou := actionable or (TODO and !BOOKED)
so here we have 10 user-visible states (new idea roadmap soon ready do check finish cancel done), and 3 user-visible tags (wait deleg booked). Behind the scenes, we have 7 more concepts (open close track todo wip actionable needsYou). So 13 user-visible things and 20 things total.
should BOOKED be ortho with READY, also?
note: the naming convention is broken with BOOKED but i think just saying BOOK would be confusing, and i cant think of a better word.
i kind of like this one.
at this point we can give an explanation of the semantics of each state, and why it's useful:
NOTE: the state transitions above describe the 'ideal' path of a task through the workflow, but in reality, the software lets you change the status arbitrarily.
NEW: just entered into the system. May need to have stuff like importance, category set. IDEA: a potential future task; a someday/maybe. It has not yet been decided whether we are going to do the task in the forseeable future. We want to keep this task in the system, but we don't need to track it.
TODO states: things that we are planning to ROADMAP: a task that we are planning to do in the forseeable future. We need to regularly review this task to make sure it moves forward. SOON: similar to ROADMAP, but also indicates that this task will be done 'soon'. Perhaps you have some other things that you need to do to get ready for the task; now is the time to start doing those. READY: a task that is ready to be done now
WIP states: (W.I.P. = Work In Progress) things that are being worked on DO: a task that is being done CHECK: checking over/verifying/testing/validating the work that was done. This can be something we are doing, or it could be that we are waiting for someone else to look it over and approve it. FINAL: whatever needs to be done after the task has been checked and passed. For example, deploying software after it has been tested; billing clients after the client has signed off on a completed project; cleaning up a worksite; etc.
CLOSE states: CUT: the task wasn't completed and we aren't thinking about doing it DONE: the task was completed
(about 13 user-visible states+groups of states there, plus 3 tags below = 16 things for the user to understand well)
groupings of states: OPEN/CLOSE: OPEN states are things that we are thinking about doing. CLOSE are the others (CUT and DONE are CLOSE, and everything else is OPEN). TRACK: tasks that we plan to complete (and so they need to be kept track of). TODO or WIP
tags: BOOKED: this can apply to ROADMAP and SOON. It means that there is a schedule or plan to start doing this task at some point, so it is not in need of scheduling. WAIT: this can apply to anything in TRACK. It means that the task is waiting before it can proceed, so there's nothing you can do to push it forward now (except perhaps followup with someone else if the task is waiting for them to do something). Some reasons that a task may be WAIT are that it may: have been placed 'on hold' by you; be waiting-for someone else to do something; be dependent on some other task and waiting-for that task to complete; be waiting for time to pass or for some external event to occur. DELEG: this can apply to anything in TRACK. It means that you have delegated/assigned/hired someone else to do this task, so there's nothing you can do to push it forward now (except perhaps followup with the delegee)
predicates: actionable: Things that you might work on now. (READY or WIP) and !WAIT and !DELEG needsYou: Things that need you to do something (either do the task, or plan for it to be done/schedule it/push forward its planning) . actionable or (TODO and !BOOKED)
some other potential tags: IMP/LOW URG QUICK/LONG FLAG WARN QUESTION MAYBE NEXT LATER RELY microaction tags: dec stew todg followup rely? substates of WAIT? task types/contexts such as call meet errand? next? contexts like HOME, OFFICE? Or just combine these with categories to make intersection categories; "home" is a category which conceptually represents the "life" category with the "home" context. This means you can't quite represent something like "work task: when home, pickup that folder that you accidentally left at home", but that's probably worth the simplification (you would represent this as a "home" task even though it is conceptually a "work" task, not a "life" task). also maybe also add DO substates GREEN YELLOW RED, and add new OPEN states RELY and LATER and/or CLOSE state HOLD want a state like LATER or HOLD b/c sometimes a task in IDEA is being rejected for now but not permanently; want to get it out of IDEA so that it doesn't take up your attention when you go thru IDEA looking for things to move into ROADMAP. Not sure if we should have both an OPEN and CLOSED state of this sort, or if just one, which one. If just one, probably name it HOLD.
yeah, i think we want a CLOSE state HOLD, and an OPEN state RELY. We want a HOLD b/c when you decide you aren't going to do something in the forseeable future, you don't want it cluttering up IDEA. We want HOLD to be CLOSE b/c, like counting the number of open tickets in a foss project, you want the user to be able to minimize the number of OPEN things. We want a RELY b/c it's true that sometimes you delegate something with enough trust that you expect it to be taken care of even if you don't track it, and when this happens, you don't want it cluttering up TRACK.
- OPEN: OPEN->CUT, OPEN->HOLD
- NEW: NEW->IDEA, NEW->ROADMAP
- IDEA: IDEA->ROADMAP, IDEA->LATER
- TRACK: TRACK->RELY
- {
- TODO:
- {
- {
- ROADMAP: ROADMAP->SOON
- SOON: SOON->READY }
- }
- READY: READY->DO
- WIP
- DO: DO->CHECK
- CHECK: CHECK->DO, CHECK->FINAL
- FINAL: FINAL->DONE }
- CLOSE
- CUT
- HOLD: HOLD->IDEA, HOLD->CANCEL
- DONE
actionable := (READY or WIP) and !WAIT and !DELEG needsYou := actionable or (TODO and !BOOKED and !WAIT and !DELEG)
note: the transitions shown here flow in the direction of progress or at least increasing committment, except for transitions to HOLD or CUT. But in actuality, motion in the direction of decreasing committement is possible as well, eg moving something from ROADMAP back to IDEA.
note: in an actual statechart, there would be multiple states inside of WAIT, DELEG, BOOKED, to represent when each of these things are true or false; and maybe more states inside them as well.
and why we left some other things out:
- NEXT: this can be just a tag, because it doesn't describe the state of the task, but rather it describes how we have prioritized/scheduled it
- LATER: (a task that we intend to do (like ROADMAP; we are more committed to this than IDEA), but that is too far out to be worth tracking yet; keep things out of TRACK, but indicate that they are more than an IDEA) this is useful, but it is conceptually within ROADMAP, and the whole point of it is not to track things, but substates of ROADMAP are within TRACK. The same thing can be accomplished by making this a substate of WAIT (we can use hierarchical tags to represent this); then we just have to filter out LATERs in our primary view of tasks in WAIT.
- RELY: (a task that you have delegated to someone and that you no longer need to track. For example, let's say you have a plant that you water, but then you get married and your spouse takes over watering your plant. Perhaps for the first month or two you check to see if your spouse is remembering to water it, but eventually, if they aren't forgetting, you probably decide that your spouse can be relied upon to always water the plants, and you don't have to check on it anymore; so you put this task into status RELY. The reason you don't totally close the task is that perhaps someday your spouse will be sick or on a trip, and unable to do the things they normally do for you, and so you would like to be able to make a list of the things that they were doing for you so that you can do them until they come back. keep things out of TRACK) similarly to LATER, this can be a substate of DELEG
hmm, let's take out BOOKED and SOON too. SOON 'should' be a tag in some sense, and BOOKED is only necessary as a status (rather than a tag) because it needs to apply to both ROADMAP and SOON -- if there were just ROADMAP it would just be a substate of ROADMAP, which can be expressed as just a tag. It means that getting-ready-for things have to depend on a tag (SOON), but that may be less complicated than having two otherwise unnecessary states.
note: the transitions shown here flow in the direction of progress or at least increasing committment, except for transitions to HOLD or CUT. But in actuality, motion in the direction of decreasing committement is possible as well, eg moving something from ROADMAP back to IDEA. Similarly, there is no edge from DELEG to NO_DELEG, but in reality it's possible to take back a task which was delegated.
- OPEN*: OPEN->CUT, OPEN->HOLD
- NEW: NEW->IDEA, NEW->ROADMAP
- IDEA: IDEA->ROADMAP, IDEA->LATER
- TRACK:
- {
- TODO:
- ROADMAP: ROADMAP->READY
- WIP
- DO: DO->CHECK
- CHECK: CHECK->DO, CHECK->FINAL
- FINAL: FINAL->DONE }
- GO: GO->STOP
- STOP*: STOP->GO
- WAIT*
- DEP*
- NO_DELEG: NO_DELEG->REQ
- REQ*: REQ->DELEG, REQ->NO_DELEG
- DELEG*:
- CLOSE
- CUT
- HOLD: HOLD->IDEA, HOLD->CANCEL
- DONE
- : represented in the implementation as a tag (rather than as a status)
- : not present in the implementation, just conceptual
? X: an anonymous orthogonal region containing two states named X and NOT_X; implemented as a tag named X |
actionable := (READY or WIP) and !WAIT and !DELEG needsYou := actionable or (TODO and !BOOKED and !WAIT and !DELEG)
orthogonal state tags: WAIT DEP DELEG
WAIT vs LATER vs DEP: DEP means waiting on a dependency. WAIT means waiting for anything else. LATER means waiting for something far off, so don't bother showing this task in some views. These are all implemented as subtags of STOP; note that you could have a WAIT LATER or a DEP LATER.
substate tags (tags that are only valid upon a single state; i feel like these are simpler somehow): SOON BOOKED NEXT LATER RELY
some other potential tags: IMP/LOW URG QUICK/LONG FLAG WARN QUESTION MAYBE
substates of WAIT?
microaction tags: dec stew req followup?
- is next action is subtype of the ready task status? So we would have a status called NEXT
- current guess: no, it's a tag
- should we eliminate SOON and BOOKED as statuses, and make them just tags?
- disadvantage is that things that trigger upon SOON now trigger upon a tag, not a status. However, this may be worth it to eliminate two states.
---
alternately, I could be important, and i could be LOW (UNimportant). r would be ROADMAP, nothing would be BOOKED, and R would be READY; or, r would be IDEA, nothing would be ROADMAP, and R would be BOOKED
the reason i am even considering the schema where lowercase = -1, blank = 0, uppercase = 1, rather than the more natural blank = -1, lowercase = 0, uppercase = 1, is that with importances, it would be annoying to clutter everything with 'i' for the default (no importance tag; neither IMP nor LOW). However, i think lowercase=-1 is probably too unintuitive, so strike those.
---
- # Statuses
Statuses and status-like tags:
- NEW: newly entered into the system. May need to have stuff like importance, category set.
- IDEA: a potential future task; a someday/maybe. It has not yet been decided whether we are going to do the task in the forseeable future. We want to keep this task in the system, but we don't need to track it.
- TODO statuses: things that we are planning to
- ROADMAP: a task that we are planning to do in the forseeable future. We need to regularly review this task to make sure it moves forward.
- SOON (tag): this task will be done 'soon'. Perhaps you have some other things that you need to do to get ready for the task; now is the time to start doing those.
- BOOKED (tag): that there is a schedule or plan to start doing this task at some point, so it is not in need of scheduling.
- LATER (tag): a subtag of WAIT. The task is still on the roadmap, but not until much later; it does not need to be moved until then. The user probably doesn't want to review these tasks as often as other ROADMAP or other WAIT tasks.
- READY: a task that is ready to be done now
- NEXT (tag): out of the ready tasks, some of them can be tagged NEXT to indicate that you plan to do those before the others
- WIP statuses: (W.I.P. = Work In Progress) things that are being worked on
- DO: a task that is being done
- CHECK: checking over/verifying/testing/validating the work that was done. This can be something we are doing, or it could be that we are waiting for someone else to look it over and approve it.
- FINAL: whatever needs to be done after the task has been checked and passed. For example, deploying software after it has been tested; billing clients after the client has signed off on a completed project; cleaning up a worksite; etc.
- CLOSE statuses:
- CUT: the task wasn't completed and we aren't thinking about doing it anymore.
- STOP: the task wasn't completed and we might think about doing it later. Unless and until the user says otherwise, though, we don't want to think about it.
- DONE: the task was completed
Status-like tags that can apply to any TODO or WIP statuses (note: one task may be tagged with any combination of tags):
- WAIT: the task is unable to move forward at this time because it is waiting for something, such as waiting for someone to call you back. Typically, the user wants to review these tasks periodically to decide if they need to followup.
- DEP: a subtag of WAIT. The task is unable to move forward at this time because it depends on some other task which is not yet complete.
- SNOOZE: a subtag of WAIT. The user has put the task on hold temporarily.
- SAY: a subtag of WAIT. To move the task forward, you need to say something to someone the next time you talk to them, but there is no need to send them a message just to say it -- so you are waiting until you next talk to them. If you later decide that actually you should call/meet with them just for this, add a FOLLOWUP tag to make the task actionable. This can be used both for tasks where the whole task is to say something to that person, or also as an annotation to a task as a shorthand indicating that the next step towards completing the task is to say something to someone.
- DELEG: this task has been delegated to someone else, but still needs to be kept track of
- RELY: a subtag of DELEG. This task has been delegated to someone else, and the user doesn't need to track the task very closely because they can rely on the delegee.
- REQ: you need to ask someone else to do this task (you are trying to delegate the task to a delegee) NOTE: once you've asked the potential delegee, add WAIT to the task until you hear back. If they accept, then remove the REQ and the WAIT and add DELEG.
- FOLLOWUP: You need to followup with someone, for example someone you are waiting for, or to whom you have delegated a task. Even if the WAIT or DELEG tags have made this task not "actionable", adding this tag makes the task "actionable" again.
Predicates:
- actionable: a task that you can do now. A task is considered actionable if it is READY, or a WIP (work in progress), and is neither STOPped nor DELEGated; any task is also considered actionable if it has a FOLLOWUP tag.
- needsYou: a task that needs you to push it forward. A task is considered needsYou if is is actionable, or if it is ROADMAP and is neither STOPped nor DELEGated nor BOOKED.
See also Appendix: etd task status statechart and list of predefined tags.
Status and status-like tag key bindings: NEW(n) IDEA(i) ROADMAP(r) READY(e) DO(d) CHECK(h) FINAL(f)
DONE(o) |
SOON(s) BOOKED(b) LATER(l) NEXT(x) WAIT(w) DEP(p) SNOOZE(z) SAY(a) REQ(q) DELEG(g) RELY(y) FOLLOWUP(u) CUT(c) STOP(t) |
consider deleting BOOKED, LATER, SNOOZE, RELY, and replacing with one tag, ASIDE or OK or OKAY or UNTRACK or QUIET or MUTE, which indicates that you don't need to track this too closely (done)
---
old: (D) 2022-01-17 org could represent HOLD as just going back to IDEA. The difference is that HOLD is not in OPEN, IDEA is in OPEN
---
- can we have our own timestamp properties, eg lastReviewed, and then filter based on how long it's been since lastReviewed?
- YES WE CAN. Use relative date indicators eg <-5d>, <-10w>, <+3m>, <+1y>, like this in queries: test_property>="<-1m>"
- todo use for (a) reviews (b) reminders
- are these even different? (later: no, i combined them) if so, how?
- mb we just do reviews on top-level tasks ("projects"), but any task can have a reminder
- probably easiest to have a lastReviewed and a nextReminder
---
- i'm leaning towards saving the A-L priority system and allowing the priority field to do double-duty as the authoritative "whenEra" field
- at least A-E. But if we're only doing the first 5 that way, is there a point?
- previously i was thinking A-L. Then we would have had 14 letters left, which is enough for 3 sets of 4 (4 for high importance, 4 for normal importance, 4 for low importance).
- if we only used A-E, we would have 21 left, exactly enough for 3 sets of 7. But i don't think we need sets of 7, and it would be nice to have some leftover letters in case we think of something else to use them for, later. If we had A-E and also 3 sets of 5, we would have 6 letters left, which is attractive. F,H,I,J,K,L are six, but i don't think we should use them that way here. One idea is to use them for more eras: twoweeks, month, quarter, year, someday/indefinite.
- i don't think we really need a someday/indefinite era in that context because the low priority projects are already someday/maybe.
- eh, i changed my mind. keep whenEra separate. Also, mb keep it separate from the 'project priorities'. Can still maintain a canonical mapping between these things, and simpletask priorities tho.
- i guess the benefit of having them together is less stuff for the user to remember. But it's not as clean, data structure-wise, and for users that don't use simpletask, it's more to remember, not less
---
is what i want one of these 'transient mode's? Isn't that what hydra does? some ppl use transient instead of hydra. Apparently transient came from magit, and is now bundled with emacs 28.1+. https://www.google.com/search?channel=fs&client=ubuntu&q=emacs+hydra+vs+transient https://github.com/practicalli/spacemacs/blob/main/why-spacemacs/transient-state-menus.md https://news.ycombinator.com/item?id=15314571 i guess spacemacs has its own transient state machinery? See spacemacs
"I think hydra is more suitable for semi-modal interfaces (where the bindings stay active until you exit the hydra). It's possible with transient, too but more complicated. Transient is most useful to invoke command line applications because of it's infix arguments which hydra does not support. If all you need is a simple command dispatcher with a visible menu both will do."
https://magit.vc/manual/transient/Comparison-With-Other-Packages.html#Hydra
i think i'll just use a hydra
---
- MUTE: Doesn't need attention right now. Some views won't show MUTE'd tasks by default. Perhaps it is a task on the ROADMAP which is not slated to begin until much later. Perhaps it is a task which has been delegated to someone reliable, and does not need to be kept track of unless something unusual happens (such as the delegee getting sick, going on vacation, or quitting). Perhaps it is on ROADMAP but it has been scheduled/booked/arranged for/entered into some external plan, and so does not need to be reminded about in this system. Perhaps the user just wants to put it on the back burner for a little while, but not to fully suspend it with HOLD.
- so mb we should have all of: reviews, reminders, defer dates (or mb "defer until next review"; or mb don't respect mute if review date is in the past)
- mb have a key that unmutes and reschedules nextReview into the future (you press this key when you have reviewed an item), and then shift+that_key mutes and reschedules nextReview into the future. This way, after each review, the item will only remain muted if you want it to be.
- done: actually, i bet the custom agenda views will be easier to configure if you make a property "muteUntil"; otherwise you have to take the AND of MUTE and whether the nextReview date has passed or not. Should check the edge cases where you have some things with no muteUntil, some in the past, and some in the future.
---
- some views:
- done: actionable
- done: needsAttention
- done: imp&urg
- done: overview: short version of each of the above, plus needs review, plus flagged, plus overview of all projects (like, one to three lines per project)
- done: all of tracking (combined, or brokend into actionable and needsAttention)
- done: deep planning/selecting/pipeline: non-actionable stuff, including IDEA?
- eh, just have IDEA
done:
- how about: IMP, LOW apply to projects and are inherited ('global importance')
- priorities are not inherited and should be interpreted relatively/locally ('local importance')
- one issue with the way that i'm doing things it that the way to customize sorting in orgmode is org-agenda-sorting-strategy, but this has a fixed set of fields that it can look at -- so i cant sort by era
- wait yes you can: https://emacs.stackexchange.com/questions/26351/custom-sorting-for-agenda
---
- need to list view ontology ideas, and to design views
- need onto for microactions; stew, followup, dec, etc
- mb do redesign in view of orgmode's/paper's/todo.txt's limitations
- want system applicable to paper, too
- no computed properties
- orgmode has statuses, tags, priorities, properties (drawers?)
- yknow, my previous system ontology wasn't far off. whenTime really can be a subset of priorities, and later priorities can be used for relative importances within less important tasks. Categories can be used instead of areas/projects. We can stuff all those ortho things into todo statuses. We really just need some better keybindings, especially for 'snooze'/'defer'.
- keybindings
- start implementing. See how far you can get just using orgmode and not programming much
---
- what does orgmode currently do for homerow keys The home rows keys in colemak:
arst dh neio '
in qwerty:
asdf gh jkl; '
other 'big' keys include SPACEBAR, TAB, ENTER, BACKSPACE.
here's the default orgmode bindings in agenda views:
a: org-agenda-archive-default-with-confirmation r: org-agenda-redo s: org-save-all-org-buffers t: org-agenda-todo
d: org-agenda-day-view h: evil-backward-char
n: evil-search-next e: org-agenda-set-effort i: org-agenda-diary-entry o: delete-other-windows
': self-insert-command
f: org-agenda-later g: (prefix key: d: org-agenda-toggle-time-grid, g: evil-goto-first-line, r: org-agenda-redo) -- did i set this or is this default? i think i set this b/c according to docs, g is usually org-agenda-redo, and also G is usually org-agenda-toggle-time-grid, but now G is evil-goto-line. But i can't find where i set it. Oh.. it's in layers/+emacs/org/packages.el. I don't think i did that, i think it was spacemacs. They also did j and k and RET. See also https://develop.spacemacs.org/layers/+emacs/org/README.html#key-bindings-1 j: org-agenda-next-line (by default this would be org-agenda-goto-date but spacemacs overrode) k: org-agenda-previous-line (by default this would be org-agenda-capture but spacemacs overrode) l: evil-forward-char ;: org-timer-set-timer
RET: org-agenda-switch-to TAB: org-agenda-goto SPACE: org-agenda-show-and-scroll-up BACKSPACE: org-agenda-show-scroll-down
---