summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Brox <tobias@redpill-linpro.com>2021-10-18 23:12:29 +0000
committerTobias Brox <tobias@redpill-linpro.com>2021-10-18 23:27:17 +0000
commit10578e19e65dd3bbc2134535df201ca8a21b4db2 (patch)
treefd40ffc144b5b030df1427f47d4f23f30100d172
parent91836fddfaf82f854f4a9cb94e28a903eb2e0fa2 (diff)
downloadcalendar-cli-10578e19e65dd3bbc2134535df201ca8a21b4db2.zip
thoughts after CalendarFest, and minor updates/tweaks on the task management document
-rw-r--r--NEXT_LEVEL.md51
-rw-r--r--TASK_MANAGEMENT.md36
2 files changed, 70 insertions, 17 deletions
diff --git a/NEXT_LEVEL.md b/NEXT_LEVEL.md
new file mode 100644
index 0000000..f80025c
--- /dev/null
+++ b/NEXT_LEVEL.md
@@ -0,0 +1,51 @@
+## Some potential requirements from a good calendaring system:
+
+* 100% of all calendar users wants the possibility to "strike out" a thing from a calendar (I heard it at CalendarFest event, so it must be true).
+
+* It may be useful to take meeting notes directly from a calendar application (it was also said at CalendarFest).
+
+* Project management and accounting systems needs information on time estimates and tracking the time spent working on a task (this is a matter of fact). Project management and accounting systems ought to be tightly coupled with the calendar system (that's my opinion). How much time does one expect a task to take, and how much was spent on the task? How many of the hours spent on the tasks should be billed (and how many of those should be billed at over-time rates?). Should the employee get paid at normal rates or overtime rates for the working hours spent?
+
+* Recurring tasks is a very useful thing! (this is my personal opinion, also ref the TASK_MANAGEMENT document) Some of them should be done at a fixed time, no matter when it was done previous time, i.e. "prepare gym bag for my sons gym class" should be done every Tuesday, with deadline Wednesday morning. At the other hand, the task "clean the floor" should typically be done one week after it was done previous time.
+
+* In my opinion (ref TASK_MANAGEMENT), it makes sense on a daily basis to take out relatively short sorted list of tasks, look through it and keep the list short by procrastinating the things that seems less urgent. I've been using the DTSTART attribute for such procrastination, but it feels a bit wrong.
+
+## Standards as they are now:
+
+* Tasks (VTODOs) can be "striked out", but they don't stick very well to the calendar, and it cannot be used for tracking the time spent working on a task
+
+* VJOURNAL entries on a calendar is meant exactly for meeting notes ... probably as well as recording things like who was really participating in an event, and how much time did they spend on it?
+
+* Tasks have a DTSTART and either a DUE or a DURATION; the latter two are interchangable, the standard defines that the DURATION is the difference between DTSTART and DUE. The standard is a bit unclear on exactly what those timestamps are to be used for. I assume the DUE is the "hard" due date where a task should be completed. It makes sense to let DURATION be the time estimate for the task, then DTSTART will be the latest possible start time if the task is to be completed before the DUE date. In my opinion DTSTART is the natural attribute to be used either for the actual expected starting time for working with the task, but I've rather been using it for something like "the time when I should start considering thinking about when the task should be done".
+
+* Calendar components can be linked through the RELATED-TO-attribute. Valid relationship types are "CHILD", "PARENT" and "SIBLING". I suppose it is intended for direct asynclic graphs, where a calendar component preferably should have only one PARENT, and where there shouldn't be loops (my grandchild cannot possibly also be my grandparent) - and that two SIBLINGs have the same PARENT.
+
+## Suggestion for work flow and use (or abuse?) of the icalendar standard:
+
+### Time tracking
+
+When marking a task (VTODO) as completed, also make it possible to mark up how much time was spent on it (i.e. "2 hours"), optionally when it was done (default, worked on it until just now), optionally a description of what was done. A VJOURNAL entry is then automatically added to the calendar, marked as a child of the task. Overtime and billing information is considered site-specific and outside the scope - eventually, one can use X-style attributes in the vJOURNAL entry for that.
+
+Actual participation (and time usage) on an event can also
+
+### Striking out something from the calendar
+
+A "striked-out" calendar item should be presented by a vJOURNAL entry, possibly linked to a vEVENT or a completed vTODO. If the vJOURNAL entry is linked to a vTODO that is not marked as completed, it should not be marked as "striked-out" in the calendar.
+
+Simple tasks can be "striked out" by marking them completed, ref above.
+
+### Task management
+
+* A vEVENT linked up as a child to a vTODO means we've (tried to) allocate some time for doing the vTODO (hence "sticking" the task to the calendar). If the task isn't marked completed by the end of the event, the calendar system should point it out. The user should then either reschedule, procrastinate, cancel or mark it as completed.
+
+* A vEVENT linked up as a parent to a vTODO means the vTODO needs to be completed before the event. Once the event has passed, the vTODO should probably be cancelled if it wasn't done yet.
+
+* DURATION should be used for time estimates (this breaks with my previous usage of DTSTART for prioritizing tasks). For tasks with children tasks, DURATION in the vEVENT should only indicate the "independent" time usage. Total duration including all children tasks should eventually be calculated and presented by the calendar application.
+
+* PRIORITY should indicate how important it is to do the task by the indicated DUE date/timestamp. If PRIORITY=1, then the task is extremely important AND the DUE is a hard deadline. PRIORITY=9 may mean either that DUE is a "fanciful wish" OR that the task should simply be cancelled if it's difficult to get it done prior to the DUE date.
+
+* The calendaring system should make ite possible to sort tasks based on the ratio between duration and available time until due date, and show tasks that ought to be prioritized during the next few days.
+
+* The calendaring system should make some simple-stupid algorithm to predict the "load", how likely one is to manage the upcoming due dates. Some parameters can be given, i.e. that one expects to be able to spend 2 hours a day for this category of tasks during the next 30 days and that tasks with priority 7 or higher can be ignored.
+
+* If the upcoming task list is too daunting, it should be possible to semiautomatically procrastinate (move the due) upcoming items based on their priority.
diff --git a/TASK_MANAGEMENT.md b/TASK_MANAGEMENT.md
index 5745235..f84c3b8 100644
--- a/TASK_MANAGEMENT.md
+++ b/TASK_MANAGEMENT.md
@@ -1,9 +1,7 @@
Managing tasks through calendar-cli
===================================
-While the RFC does draw some lines on what fields are admissable in the todo-entries in the calendar, it doesn't really give good guidelines on how to use the different fields. One often gets into dilemmas ... when to use the category field vs when to use the location field vs when to branch out a completely distinct calendar, etc. This document was originally written for myself, trying to make my own task management consistent and efficient.
-
-I haven't done much research in how different software packages handles tasks, but I've been using calendar-cli for some task management, the document has been updated with my experiences.
+While the RFC does draw some lines on what fields are admissable in the todo-entries in the calendar, it doesn't really give good guidelines on how to use the different fields. One often gets into dilemmas ... when to use the category field vs when to use the location field vs when to branch out a completely distinct calendar, etc. Here are my considerations.
Calendar scope
--------------
@@ -33,7 +31,9 @@ A geo is a location given by coordinates. It probably makes great sense to use
* if you want to stick the tasks to a map. Probably very useful if your tasks have to be done on lots of different locations (i.e. if you are a travelling salesman or a plumber).
* if you want to set up the phone to automatically remind you about tasks i.e. when you are close to the supermarked, etc. (however, most of us probably have several supermarkets we can go to, so geo doesn't make sense for that)
-Practical experience: I haven't used the geo field myself.
+At the other hand, one rarely needs to go to some exact supermarked, hence "supermarked" probably fits better in the category field.
+
+I've never used the geo field.
Categories
----------
@@ -47,38 +47,40 @@ While the categories field is a freetext field, it's important that the same cat
Pending-Dependent
-----------------
-If task A cannot be done without task B being done first, we say that A depends on B. It may make sense to hide A from todolists, or maybe fade it away. It may also make sense to ensure the due date for B is before the due date for A.
+If task A cannot be done without task B being done first, we say that A depends on B. We may want to construct a bikeshed, then paint it red. Obviously the painting depends on the construction. It may make sense to hide the paint job from the todolists, or maybe fade it away - when checking the list of immediate tasks to be executed, "painting the bikeshed" is just noise. It may also make sense to ensure the due date for the construction is before the due date for the painting.
-The VTODO-standard does not support this kind of relationship, but it's possible to use parent-child. The parent will then be the dependent, and the child will be the pending. See below for practical experiences.
+The VTODO-standard does not support this kind of relationship, but it's possible to use parent-child. Think of the parent as the dependent and the child as the pending. See below for practical experiences.
Parent-child relationship
-------------------------
-With the parent-child relationship one can make a hierarchical task list. It makes a lot of sense when having a big task that can be split up in subtasks. Say, the task may be "build a bicycle shed". That does take quite some planning, purchases and work, so one will definitively want to break it up in subtasks. Ordering such a thing by categories is probably not so productive. This is more or less compatible with the "Pending-Dependent"-situation above; the task "build a bicycle shed" is dependent on "buy some planks", one would need to buy planks before building the bicycle shed.
+With the parent-child relationship one can make a hierarchical task list. It makes a lot of sense when having a big task that can be split up in subtasks. Say, the task may be "build a bicycle shed". That does take quite some planning, purchases and work, so one will definitively want to break it up in subtasks.
+
+A shopping list may also be considered to be a parent-child relationship. "Buy cucumber" seems to be a subtask of "buy vegetables" which again may be a subtask of "go shopping at the supermarket".
+
+Every parent-child relationship can also be seen as a dependency as well, but it's a bit in reverse. One cannot build the bike shed without first buying planks. One cannot tick the checkbox for "go shopping" if the cucumber was not bought. (or is it the other way? One cannot "buy cucumber" before one has started the procedure of "go shopping"?)
-What about the shopping list? "Buy squash" seems to be a subtask of "buy vegetables" which again may be a subtask of "go shopping at the supermarket". From a pending-dependent-perspective it still sort of checks out; you could say that one need to "go shopping" before one can "buy squash", but atoh one cannot successfully complete the "go shopping" without buying the squash.
+There is a bit of a difference between the typical pending-dependent and the typical parent-child relationship. In a typical "parent-child"-relationship one may want to take out hierarchical lists with the parent first, or take out simple overviews where all the details (i.e. grandchildren) are hidden. In a typical "pending-dependent"-relationship one may want to hide the dependent (parent) and emphasize on what's needed to be done first (child).
-The causality is turned on it's head in the shopping example - the purpose of "go shopping" is to "buy squash", the purpose of "build bike shed" is not to "buy planks".
+There is another relationship also ... purpose and means. The purpose of the shopping trip is to buy cucumber - but the purpose of building the biking shed is not to buy planks (Unless the owner of the planks shop used some clever marketing for tricking you into building the bike shed, that is).
-I'd first add "build a shed" on the todo-list and then try to plan and see what subtasks are needed - but wrg of the sugar, I'd start with "bake a cake", then "buy sugar" and only then I would add "go shopping" to the todo-list. (Though, my wife would probably first add "go to the shop" and then start thinking what to buy in the shop).
+The purpose for buying sugar could be "bake a cake". I would then start by adding "bake a cake" to the task list, then "buy sugar", and only then I would eventually add "go shopping" to the todo-list. (That's maybe just me. My wife would go to the shop to buy a cucumber, and then come home with everything needed for baking a cake and more).
-Practical experience:
+From my practical experience, "supermarket" and "hardware shopping" can as well be categories. So eventually when I really need that cucumber, I can check up the full list for the category "supermarket" and come home with all ingrediences needed for making a cake. I've never felt a compelling need to group the shopping list inside the calendar.
-* I've been using "supermarket" and "hardware shopping" as categories. This have been working out fine for me, it makes much more sense than to have "supermarket shopping" and "hardware shopping" as tasks on the list.
-* I never felt a compelling need to group the shopping lists inside the calendar. On big shopping trips it makes sense to do that, but I'd typically do it externally (i.e. one of the shops I frequently go to - Biltema - I'll make the shopping list inside their web interface, then I get it out with shelf location, information if they are out of stock, prices, etc).
-* Although I haven't created any bike-sheds, I've had some "projects". First I toss the project into the task-list, with the categories "keyboard" and "thinking". Later I take up that task and I start creating sub-tasks. The project then disappears from my regular overview because it has unresolved dependencies. This has worked out reasonably well for me.
+Although I haven't created any bike-sheds, I've had some "projects". First I toss the project into the task-list, with the categories "keyboard" and "thinking". Later I take up that task and I start creating sub-tasks. The project then disappears from my regular overview because it has unresolved dependencies. This has worked out reasonably well for me.
-It must be said that parent-child-relationships aren't very well supported yet in calendar-cli.
+Parent-child-relationships aren't very well supported yet in calendar-cli yet.
Recurring tasks
---------------
-The standard allows for recurring tasks, but doesn't really flesh out what it means that a task is recurring - except that it should show up on date searches if any of the recurrances are within the date search range.
+The standard allows for recurring tasks, but doesn't really flesh out what it means that a task is recurring - except that it should show up on date searches if any of the recurrances are within the date search range. Date searches for future recurrances of tasks is ... quite exotic, why would anyone want to do that?
There are two kind of recurrances:
* Specified intervals - say, the floor should be cleaned every week. You usually do it every Monday, but one week everything is so hectic that you postpone it all until late Sunday evening. It would be irrational to wash it again the next day.
-* Fixed-time. If you actually get paid for washing the floor and you have a contract stating that you get paid a weekly sum for washing the floor weekly, then you'd probably want to wash the floor again on Monday, even if it has been done just recently.
+* Fixed-time. If you actually get paid for washing the floor and you have a contract stating that you get paid a weekly sum for washing the floor weekly, then you'd probably want to wash the floor again on Monday, even if it has been done just recently. Or perhaps one of the children is having swimming at school every Tuesday, so sometime during Monday (with a hard due set to Tuesday early morning) a gym bag with swimwear and a fresh towel should be prepared for the child.
There can be only one status and one complete-date for a vtodo, no matter if it's recurring or not.