diff --git a/Actiondependencies.textile b/Actiondependencies.textile new file mode 100644 index 0000000..1aa184b --- /dev/null +++ b/Actiondependencies.textile @@ -0,0 +1,219 @@ +h1. Adding dependencies to Tracks + +This is meant to become a proposal for adding dependencies to Tracks. Please feel free to comment and update with your ideas. + +h2. Motivation + +Actions in Tracks are supposed to be next actions. In reality actions could become dependent on other actions to be finished first. Tracks need to be able to handle this. _Please note that Tracks is not a planning tool. Tracks is a tool for managing GTD-like next actions_ + +h2. Scope + +The scope of this proposal is dependencies between actions. + +h2. Database + +h3. Todo state machine model + +[[Image:todo_fsm.png]] +A _pending_ state is added to the Todo state machine, and a new event _block_ is introduced for switching from active to pending state. + +h3. Single vs multiple dependencies + +This seem to be one of the main questions for debate, i.e. if an action should be able to depend on more than one action. Trying to summarize the discussion it boils down to the question: +
Do the benefits of multiple dependencies outweigh the added complexity?+ +More on this under open issues below. + +h2. GUI + +The dependency information is used in the GUI for displaying only _actionable_ active actions. The views affected are: New/Edit Action, Home, Project, Tickler, Context, Tag and their mobile counterparts. + +h3. Adding the dependencies information + +Use cases are: + +1. Adding a predecessor to an existing action. +2. Adding a predecessor to a new action. +3. Removing a predecessor for an existing action. +4. Showing the predecessor of an action. + +[[Image:action_form_with_predecessor2.png]] + +The add and edit action forms have an added field for adding predecessors named "Depends on". Ideally, it would work as a Gmail-like multi value autocompletion field. + + +RB: I don't know if the autocomplete will work. You need to know exactly the wording of the action. But other options are perhaps even more cumbersome to use (i.e. first select project and then the action) + +HB: Advanced auto completion fields like Gmail's and Firefox's address field does not actually require exact wording. They start matching words inside sentences. Also, drag and drop as Yoichi mentioned may work to add dependencies, especially in project view. + + +h3. Displaying the dependencies information + +Use cases are: +1. The user only wants to see the actionable actions. +2. If an action is completed, any pending actions should be displayed. +3. The user wants to add or delete dependencies and see pending actions. + +h4. 1. The user only wants to see actionable actions + +In the _Home_ and _Context_ views, the GUI does not _have_ to be visibly changed to implement a first version. The user will experience that only _actionable_ actions are displayed. + +h4. 2. If an action is completed, any pending actions should be displayed + +In the _Home_, _Context_, _Project_ and _Tag_ views, if an action is completed any pending actions will become active. + +h4. 3. The user wants to add or delete dependencies and see pending actions. + +The _Project_ view is probably the best view to view and edit dependencies and pending actions. + +Example project view: +[[Image:project_view_with_dependencies2.png]] +Let's say that we have the following actions in our Add dependencies to Tracks project: + +1. Create GUI proposal +2. Collect opinions +3. Implement revised GUI proposal +4. Learn Ruby +5. Learn ORM + +The second action is dependent on the first action. The third action is dependent on the second, fourth and fifth action. + +Using dependencies when displaying Active actions we get 1, 4 and 5, since they are not dependent on other actions. So, what about 2 and 3? How shall we display them? We could use a new section called "Blocked actions in this project" or rename the Deferred section. After the Context link the > and < links represents unique successors and uncompleted predecessors respectively. + +The Create GUI proposal action is placed on top because it has the greatest number of successors (unblocks largest number of actions). +The Collect opinions action is placed on top of the blocked actions because it has the least number of predecessors (most likely to be unblocked first). + + +RB: Why do you want to show < and the >. I think the depends-on relation is enough. How relevant is information on the > relation? + +HB: Especially for the active actions I think it is relevant to see the number of pending actions for an action. For the pending actions, it may be more relevant to see the predecessors. + + +Today we use due date, show date and entry order for calculating the display order for actions in the Home, Tickler and Project page. The current display order in the project page is as follows (TBC): + + +RB: I was thinking of adding a plus to a next action that has one or more dependent actions + +HB: You mean in order to be able to expand/collapse the "depends on"/"pending" actions? I am pretty ok with that also, but see that more as a generic way to display more information about an action. If it is simple to implement, go for it, otherwise I think it would be enough with the simple visual cues given by < and > symbols with tool tips. + +RB: I think it could be a good way to start with the dependencies with a container with the 'blocked' actions and later-on bring the plus to it. Indeed to be able to hide the non-next actions in the view, but be able to show them for review / edit + +HB: Is this related to your concern of showing actions more than once? Can this information be display in a tool tip or pop up instead? + +RB: with n-m yes. With 1-n, the plus is not easy to implement. So, just phasing here... + + +h4. Active actions + +Displayed in Home and project views. + +Condition: show date=null or show date<=today. +Sort order: due date, entry order + +h4. Deferred actions + +Displayed in Tickler and project views. + +Condition: show date > today. +Sort order: show date, due date, entry order + +Dependencies gives us one further condition for displaying actions. + +h4. Active actions in project view + +RB: this is the same heading as before. Is this the project view versus the home page view above? + +HB; The intention was rather project page in "No dependencies" vs "Dependencies" view + +RB: ok, changed the title + +This is quite straightforward. Filter on uncompleted predecessor count. + +Condition: (show date=null or show date=today) and uncompleted predecessors=0 +Sort order: due date, descending number of successors, entry order + +h4. Deferred and blocked actions + +Treat a blocked action as having the latest show date of its predecessors. This makes the blocked action to be sorted into a place where it typically makes sense. + +RB: I'm not sure what this means for the home page. + +HB: The home page only displays active actions, so it will mostly affect the Project, Tickler and Tag views I guess? + +Condition: show date > today or uncompleted predecessors > 0 +Sort order: show date, due date, predecessor count, number of successors, entry order + +RB: I'd like in a second phase +1. Create GUI proposal (+) + - Collect opinions + - Implement revised GUI proposal +2. Learn Ruby +3. Learn ORM + +RB: I find this very complex. Can't we just use < and > and use the tooltip to sum up the dependencies. This is probably why a favor the plus :-) + +HB: For users or developers (or both)? I hate it when users don't understand how user friendly my apps are :-). Ok, my intention with multiple < and > was except displaying the number of dependencies, also the possibility to link or display information on the different actions. What you're after is perhaps something more along the Notes toggle icon? So, what about some sort of "link" icon instead of the plus sign? + +RB: in this case both :-) I think it is to much information in a few icons. + +h2. Open Issues + +