Anyone knows how to implement fininsh-to-start task dependency in org-mode?

I have been scratching my head for a while now about how to handle task dependencies in Orgmode.

First off, I am aware of org-depend and org-edna as well as the ORDERED property. I am trying to find a way to make them work for a common, but specific type of dependency.

Tasks Dependencies

As defined in this blog page from the ‘projectmanager.com’ website, a Gantt chart will define 4 types of dependency. I find two of them essential in my task management workflow.

Finish to finish

The first one, and most commn I think, is the finish-to-finish dependency which is the one I believe is covered by org-mode; this is also the easiest to enforce (again imho) programatically with orgmode tools. Task A cannot be marked as DONE before task B and C are.

It is what org-enforce-todo-dependencies manages, and its info page defines it as a parent/children task relationship. This is how I use it, and how I understand the ‘finish-to-finish’ dependency in general.

The other tools I mentioned above all have the same definition of a task dependency, threfore address the ‘finish-to-finish’ handling. What they add is the possibility to define parent and children task relationships across different projects or files using a BLOCKER property instead of being limited to a linear, indented type of sub tasks defintion.

Finish to start

The other less common, but as important to me, dependency type I desperately need to implement in a practical way is the finish-to-start relationship. This one can be as much about planning and resource allocation as physical constraints.

For example, it is obvious that I need to get a permit from the city before starting construction work on my house, but, because my resources are limited I decided to start working on feauture request X only after I finished remodeling my kitchen, fixed bug Y and Z, and migrated my email accounts to Emacs.

I will certainly not remember I have to work on feature X after completing all those other tasks, so I need it to pop up on my task list when all those other tasks are completed; and I surely do not want it to unnecessarily clutter my task list in the meantime. Efficient and clear lists are supposed to be the basis for a happy GTD system after all, and I feel like org-mode was mostly built with GTD in my mind.

Using solutions like org-edna I could achieve something similar using a BLOCKER property. The problem I cannot seem to solve is: ‘how do I differentiate those tasks from the tasks blocked using the ORDERED property, or the org-enforce-todo-dependencies variable in my agenda views ?’

What I want to achieve

Practically speaking, let’s simplify a typical workflow, and say I have 3 task lists, or agenda views for that matter:

  • the ‘Active Projects’ for all the projects I have already started,
  • a ‘Projects Backlog’ for all the unhindered projects simply waiting to be started,
  • and a self-explanatory ‘Blocked Projects’.

Following the previous ‘finish-to-start’ example, let’s consider I have already started working on my ‘Kitchen Remodel’ project, and my ‘Bug Y’ issue. Projects ‘Bug Z’ and ‘Email To Emacs’ are ready to be started, and I previously decided to start ‘Feature X’ only when everything else is done. My lists should look like the following:

  • Active Projects
    • ‘Kitchen Remodel’
    • ‘Bug Y’
  • Projects Backlog
    • ‘Bug Z’
    • ‘Email To Emacs’
  • Blocked Projects
    • ‘Feature X’

Org-edna’s BLOCKER property seems the way to go to send ‘Feature X’ to the ‘Blocked Projects’ list testing with org-entry-is-blocked-p. When the blocker tasks are DONE, it should automatically move to the ‘Projects Backlog’.

The wall I am hitting

The problem is that since I am using org-enforce-todo-dependencies, all the other projects with children tasks will also end up in ‘Blocked Projects’.

I could check for the presence of the BLOCKER property, but since it is not removed by org-edna with blockers are done, it will defeat the purpose.

The only solution I am seeing so far is to use a STARTED tag for active projects, this is ok from a convenience point of view. But the ‘Backlog’ is trickier. I see only two non ideal solutions:

  • not adding any sub tasks for projects in the backlog,
  • using a BACKLOG tag (about which I do not have a good feeling).

(EDIT: After trying this out, I realized it does not work for lower level tasks if the STARTED tag is inherited).

Conclusion

The main issue here I think is that I am not finding a way to differentiate between different types of dependencies. I have just found while editing this post that there exists an org-mode gantt chart module, I will read about it to see how they are handling it.

If anyone sees or is aware of a better way to achieve this, I would greatly appreciate it. I am looking fr something convenient, and not too error prone.

Thanks in advance for your help.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.