Mostly Drindal is pretty self explanatory when you understand the process described in the overview, especially if you've used other task management tools, but a few things are unique to Drindal and could use some explaining.
The Board is the main view in Drindal. It shows tasks for a selected Filter. You create Filters to specify which tasks you want to see, based on choices like team, users, tags, keywords, etc.. You use saved filters to navigate your tasks by clicking on them in the navigation. Clicking a filter link is filtering which tasks you see and how you see them.
Drindal is unique in that all the tasks across all the teams you have access to are effectively available to be shown in the board at any time, all together or in any combination you like. The filter is the key to decide what you see and how to see it.
Filters are created by viewing the details of an existing filter, making changes, including giving it a new name and then clicking the "Save As" button to create a new filter instead of updating the existing one.
In Drindal, tags and custom fields are one in the same. They are data you set on a task defined by you and we refer to them all as Tags. Tags are a name and value pair but you don't have to provide a value. For example:
Name only tags
Name & value tags
When setting a tag on a task, you can click the gear icon to define a set of fields on the tag. Values for the fields are then provided for each unique value of the tag, allowing you to drill down into the tag value for more information about that value. For example:
We have a "Customer" tag and we further setup it's details with the following fields:
Now we add the "Customer" tag to a task with the value being a customer name, "Madison Apples". When we view the task, we'll see an info icon next to the customer name and if we click it we'll get a dialog showing us a form with the tag's fields in it where we can enter values for the fields.
In this example we can tie tasks to our customers using the Customer tag and on any task we can simply click the info button next to the customer to see customer details.
We can also create a filter with the Tag Value Details view to show the details for all the values of a given tag. In this example, we'd have a filter that would show us all the values of the Customer tag and the associated details. Effectively, we get a table of customer details for any tasks and customers matching our filter.
You can use workflows to automate tasks in Drindal.
A workflow starts with a trigger. This is the event that makes the workflow happen. It can be things like a new task being created or an existing task being updated or deleted.
When a trigger event happens, a filter is compared to that event to more specifically see if the workflow applies. For example, you want a workflow to happen when a new task is created having a "New Customer" tag or when an existing task is moved from the "In Progress" section to the "Done" section.
Depending on the trigger, there could be more than one filter. For example, if the trigger is creation of a new task there will only be a single filer to test if the new task matches, but if the trigger was a task update, there would be a trigger for the old version of the task and another filter for the new version of the task so you can more precisely match against the change that actually happened.
The actions are what the workflow actually does once the trigger happens and the filters match.
For example, when a new task is created you may want to create a set of other tasks. Maybe you create a new task to add a new customer into your product and adding a new customer always involves doing 3 other things: Scheduling the welcome lunch, completing the document signing and sending the welcome packet. You could create a workflow so when the new customer task is created by a team member, it will trigger the workflow which will automatically create the other three tasks as dependencies.
A workflow action can access values from prior steps in the workflow using templates. For example, if your workflow creates two new tasks, the second task can have a dependency on the first, which has a dependency on the trigger task. Both tasks could be assigned to the same person as the trigger task and the name of the new tasks could contain the value of the customer tag in the trigger task.
The tail is a list of "things" that are the result of the triggers or actions in a workflow. What those "things" are depends on the trigger or action they are associated with. Take a workflow with a task update trigger that is kicked off when a task moves from "In Progress" to "Done". Lets say it has two actions for creating two new tasks.
When the task is moved, it's section field is updated from "In Progress" to "Done". This update triggers the workflow. The pre-update version of the task is added to the tail and then the post-update task is added to the tail. The first new task is created and added to the tail, then the same for the second new task.
The template used to define the second new task on the workflow has access to the tail which, at the time of the task's creation, looks like this:
The second new task can access the new section of the trigger task by using {{ tail[1].section }} in any of it's fields for the new task. The old section would be {{ tail[0].section }}.
The following template values are available. As an example, you would access the name of the updated trigger task with {{ tail[1].name }} where "name" could be any of these fields.
name | |
id | |
description | |
assignedTo | The id of the user the task is assigned to. |
section | |
startDate | timestamp in epoch milliseconds |
endDate | timestamp in epoch milliseconds |
comments | An array of comments, ordered with the newest comment first. A comment has an author and text field. Ex: Access the text for the second to latest comment on the first trigger task with {{ tail[0].comments[1].text }}. |
tags | An object containing the tags on the task. Ex: Get the value of the Customer tag on the trigger task with {{ tail[0].tags.Customer }}. Or get the phone number of that customer, assuming customer values have a phone field in tag value details, with {{ tail[0].tags.Customer.phone }}. |
Functions can be used to do calculations based on given values in order to get a new value.
dateAdd | Yields a date/time that is a given period from a given date/time. Ex: Get the time 3 weeks after the startDate of the trigger task with {{dateAdd(tail[0].startDate,3w)}}. Unit can be y, m, d, w or h for years, months, days, weeks or hours. |
next | Gives the next value in a provided list after some provided value which is also in the list. Ex: If a task assigned to Frank moves from "In Progress" to "Done", a workflow with the following value for assignedTo in it's create task action will create a new task assigned to "Kelly". And presuming that new task has the section equal to "In Progress", when it gets moved to "Done", another task assigned to "Ben" will be created. {{next(tail[1].assignedTo, [cijl2ojo0i,98jaln8jlk,2i09sijkjk])}} |