GothenburgBitFactory / taskwarrior

Taskwarrior - Command line Task Management
https://taskwarrior.org
MIT License
4.47k stars 308 forks source link

[RFC] Nested tasks instead of projects #2279

Open xeruf opened 4 years ago

xeruf commented 4 years ago

Before I discovered taskwarrior I was thinking a lot about how I would like to structure my tasks. One thing I came up with was the fact that I want arbitrary hierarchies of tasks. When I discovered taskwarrior I was first unsure how fitting it is to that, but sort of accomodated to projects. But even though they might solve my problem in theory, it feels a little ugly: Whenever I find that a task should have multiple subtasks, I create a new project for it and add all the tasks to that project.

This is odd, because after reading https://github.com/GothenburgBitFactory/taskwarrior/issues/1807 I removed most projects and tried to make my tags more sensible. Yet I find myself drawn to create some hierarchy.

One of the main problems with projects is that this task I first created basically encompasses the whole project - often there are general steps that must be taken for the project. Then, when I see an appropriate subtask, I would create it as such, and when I'm done I continue working on the general task - that way, until a project is done, I always have a task that represents it, even if I don't currently have any smaller steps for it.

Oh, and don't suggest dependencies, it's already getting really messy over here...

xeruf commented 4 years ago

Okay, I have now realized why I want this so desperately: I don't want to assign the same tags & attributes to each subtask/task within a project. A task should get the tags of its parent by default, reducing the burden a lot when entering. Similarly, to boost the urgency of a whole project, I then don't have to create a separate config entry, I could simply boost the urgency of the parent task.

lingow commented 4 years ago

This is especially relevant for new tasks that get added into a project. Even if we could apply attributes like tags or dependencies en-masse to every task in a project by issuing $ task pro:myproject mod +a_tag dep:123 , if a new task gets added to the project, there's the extra chore to figure out what attributes have been added to every task within the same project and add them to the new task too. Furthermore, having a parent task to keep track of projects allows to annotate such task with general information for the project.

These parent tasks could have the virtual tag BLOCKED if every child task is BLOCKED. That's a way of knowing that progress can be done on a project. This use case is not available by having only the dep: relationship.

Of course, this doesn't sound trivial to implement.

xeruf commented 4 years ago

Yeah, at this point I am considering writing my own taskmanager or wrapping an existing one with this functionality - I am barely using taskwarrior anymore, even though I enthusiastically picked it up a few weeks ago, and I feel that this is the critical component.

xeruf commented 4 years ago

I am writing up a design spec of what I am seeking here: https://github.com/xerus2000/howtodo

koalp commented 4 years ago

I also thought of writing a wrapper of taskwarrior because of this issue but haven't found the time yet. Maybe this could be done with UDA ? UDA types are limited but bugwarrior uses orphan UDAs to store its data. And maybe a simple subtasks UDA containing a comma-separated list of the UUID of the subtasks would be enough to store the needed information.

Nelyah commented 4 years ago

A bit late to the party, but thought I'd share how I would do this. So, I'm using a similar workflow where I have a "main" task which generally exists until the end of the project, and to which I make some annotation.

I tag this main task +main, and there should be a single main task per project. This allows me to search to "archived" projects by only search for +main tasks.

To have project-wide tags that also apply to subtasks, I think this could be relatively easily implemented with a small script that runs in cron or through the hook (on-add) system, which I've not yet explored.

The script solution would check every project, then for each would apply the tags of the +main task to all the tasks of its project that lack them.

davidhealey commented 1 month ago

I see this is marked as completed but I can't see any documentation on the Taskwarrior website related to subtasks. Can someone point me to it?

djmitche commented 1 month ago

Hm, I suspect I just closed this because it was stale (almost four years old), but I should have at least added an explanation. I can leave it open for further discussion if you'd prefer.

xeruf commented 1 month ago

Fyi I ended up writing my own CLI task manager revolving around the concept of subtasks: https://forge.ftt.gmbh/janek/mostr Not posting this to advertise (it is still a bit esoteric in its usability) but maybe to inspire ;)