Using Drindal to manage your tasks

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.

One Board, Many Filters

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 filtering tasks

Create a Filter

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.

Tags & Custom Fields

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

  • Critical
  • Bug
  • Feature
  • Kids
  • Summer Trip

Name & value tags

  • Size: M
  • Customer: Joe's Gravel
  • Annual Revenue: 1,200,000
  • Feature: Super Button
  • Status: Open

Do More With Tags

Tag Details

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:

  • Contact
  • Phone
  • Email
  • Address
  • Annual Spend

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.

Tag and value details

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.

Tag value details filter view

Workflows

You can use workflows to automate tasks in Drindal.

Triggers

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.

Filters

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.

Actions

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.

Workflow Templates

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 Workflow Tail

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:

  • [0] - Pre-update task
  • [1] - Post-update task
  • [2] - New Task 1

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 }}.

Template Values

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
assignedToThe id of the user the task is assigned to.
section
startDatetimestamp in epoch milliseconds
endDatetimestamp in epoch milliseconds
commentsAn 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 }}.
tagsAn 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 }}.

Template Functions

Functions can be used to do calculations based on given values in order to get a new value.

dateAddYields 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.
nextGives 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])}}
The above list values are the ids for Ben (cijl2ojo0i), Frank(98jaln8jlk) and Kelly(2i09sijkjk).