getting-things-gnome / gtg

Getting Things GNOME! trunk
https://wiki.gnome.org/Apps/GTG
GNU General Public License v3.0
555 stars 166 forks source link

Figure out how to visually represent subtasks blocking multiple parents #634

Open nekohayo opened 3 years ago

nekohayo commented 3 years ago

One big design problem is how to visually represent a task being a child of more than one parent task.

Because in practice, in life and my daily use of tasks, there are many cases where I think one task is blocking multiple other independent tasks. For example, upgrading my web server might be blocking the creation of two different websites, etc. Apparently I'm not the only user facing this problem, whether in GTG or elsewhere (and in Asana for example, many people are asking for this)

Some technical/diagram reference:

Some knee-jerk ideas of potential approaches to represent this in the main window:

example of tree with nodes having multiple parents

In the task editor of a child with multiple parents, the "Open parent" button could be a multi-function menubutton with a dropdown arrow on its right to allow adding more parent tasks... so:

Other ideas welcome!

diegogangl commented 3 years ago

I think before going all out on multiparents, we should figure out why we want them. If it's only to make a task block other tasks, we can solve this by adding a "blocked by" field and linking to those tasks. Then in the UI we could dim the label, show and icon with a link to the blocking task. This would avoid the whole need for a DAG and more complicated UI solutions.

I mean, the diagram looks sick but it feels like it would be more work to plan for the work than the actual work itself.

Actually, there could be a Gantt chart visualization mode for GTG, since it has all the info needed for that (including start/due dates)!

IIRC we had a plugin or something that did that. Or there was a PR, or something like that.

agerhbour commented 3 years ago

I think before going all out on multiparents, we should figure out why we want them. If it's only to make a task block other tasks, we can solve this by adding a "blocked by" field and linking to those tasks.

If I could give my two cents here. IMO, not having multiparents would make a hard line between what is a subtask and what is a blocker. It is a paradigm choice about how to use GTG. As an example, suppose I have a DIY project task, and a subtask is to go to the hardware store and buy hardware. However, my car has a flat tyre. Changing the car's tyre is a blocker to going to the hardware store, but it isn't a subtask of my DIY project.

This would avoid the whole need for a DAG and more complicated UI solutions.

Not sure about this, as you would still require a DAG to ensure there is no blocked by circular hell, and users would likely want to visualise the blocker dependency DAG.

In short, I don't think having a blocked by field solves the problem so much as it moves the problem over to blocked by. Thus it seems the best solution would be to have both multiparents with full DAG and blocked by field that also operates as a DAG structure.

nekohayo commented 7 months ago

Potentially a combination of #1027 + #1031 might help a bit with a portion of this, but indeed this does not tackle the definition of "blockers" (instead of "parent"), as @agerhbour rightfully pointed out. It's just an extra set of complementary tools to make it easier for users to navigate in something that remains very close to the current workflow and ontology.

Potentially relevant as a curiosity: Kanboard's ontology of internal task links
(I never really saw the point of going further than "blocks"/"blocked by" and "related", personally…)