subtasks proposal #3977
Replies: 4 comments 13 replies
-
|
Thank you for writing the proposal!
Providing examples for each point and comparing using subtasks vs using existing mechanisms (e.g. dependencies or projects) would be helpful here. Personally, I'm mostly interested in specific use cases. The main theme in the proposal is some kind of inheritance, propagation and restriction of attributes based on the parent-child relation. The tradeoff I see is between compactness (change one task's attributes and let the software propagate the change to its subtasks) and complexity (users need to remember how each attribute interacts subtasks). If I tag a parent-task as
|
Beta Was this translation helpful? Give feedback.
-
|
From a data-structures perspective, note that Taskwarrior's database is distributed and only eventually consistent. So global properties like "max depth" or "DAG" can't be enforced. As an example, consider task A -> B and C -> D. On replica 1, I add a dependency B -> C, and on replica 2 I add a dependency D -> A. On each of those replicas, no cycle is created, but after the changes are synchronized, the four tasks form a cycle. Dependencies have caused a bit of a performance issue, in the sense that calculating a tasks' dependees (e.g., to determine +BLOCKING) requires scanning the database. Dependencies are, luckily, only allowed among pending tasks, so we can limit the scan to the working set. We use a helper data structure (DependencyMap) to make this a bit more efficient. Thinking about how to handle this in advance would be useful. |
Beta Was this translation helpful? Give feedback.
-
|
@ryneeverett opening a new thread for the "how many upstream" topic (the DOM already has a parent for dependency so I'm gonna stick to upstream for now). Good question, because I mostly went intuitive there. Thinking aloud here: So a simplified data model might have some benefits:
I tried to think of tricky blocking scenarios, but I don't think there's an issue there. A somewhat unrelated question came to my mind: if all subtasks of a task are blocked should we block the task as well? But probably the answer is the same to whether we should complete it when all subtasks are completed (I'd say no). |
Beta Was this translation helpful? Give feedback.
-
|
A similar issue I've been running into is that our notion of dependencies and blocking is insufficiently nuanced because tasks can have dependency relations without being blocking. A dependency relation indicates that the dependent task cannot be completed until the needed task is completed, while a blocking relation indicates that the dependent task cannot be started until the needed task is completed. It seems like the current UI conflates these two ideas. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
This proposal tries to argue for a subtasks feature.
Current methods to approximate
A task-subtasks pairings generally would want to do two things:
- handle a group of tasks together for certain purposes
- describe a group of tasks together
- introduce a hierarchy among tasks for various reasons (even just ease of
reasoning about
Some of the above can be done via existing features, but not all of them together.
sub-projects at all steps
only incidentally, i.e. you can group-modify tasks, but the modifications are
essentially separate
transitive properties of this is not, what one would expect of subtasks (if
P is blocked by C1 and C2, then a T task blocking P essentially becomes C3,
instead of blocking all of P, C1 and C2).
Example and usecase
You're planning a wedding, with the following high level tasks:
T1 has a bunch of subtasks (an order of magnitude more than high level tasks), namely each person you need to invite (In). T4 also has two subtasks, S1: things you can buy locally and S2: things you need a car for.
There is also an unrelated task U1: your car is broken and needs to be fixed.
T2 blocks T1 and thus all of In. U1 blocks S2. Décor needs to be bought while it's cheap, so before December.
Things I would want to do is,
Let's see how we can approximate this and the problems.
I make projects like wedding.send_invitations
Tagging
It has similar limitations, but somewhat worse, because there is no hierarchy.
Using blockings
You imitate subtasks, by setting subtasks as blocking for their parent, that is all of In blocks T1, S1 and S2 block T4. The problems:
Proposed solution
Introduce a new property to track parent-child relationships (an added benefit of this would be that this is what many caldav servers do for VTODO, so people syncing tasks to caldav could trivially map this property as well), somewhat similiarly how blocking works.
Unfortunately,
parentis already taken, so maybeupstreamorchildof?Properties
Maybe not all of these make sense, but these are thing I have in mind:
Obviously, if an upstream is changed (e.g. tags) or an upstream gets a new upstream things would need to be propagated. But implementing all of the above could be broken up into smaller steps easily, with enforcement of certain things, especially propagating updates could be implemented later.
Impact on downstream applications
Shouldn't be anything since the new subtasks are still just tasks, although I assume things like
vitwould want to visually put subtasks somehow under their parents.Beta Was this translation helpful? Give feedback.
All reactions