Asana for Rails development

At work we use Asana as a Task Management System. It’s not only about Rails, but about any MVC based system, or any other system in which responsibilities are well divided.

We work on a project in team of 5 people:

  • Customer relations/Project evangelist/Task manager
  • Designer/UI/UX
  • Front-end developer/UI/UX (me)
  • Back-end developer/Models/Database
  • Back-end developer/Controllers/Helpers/Testing

The first guy keeps all progress in mind and takes care everything to be planned, well described and not forgotten. Also he should make customer fell happy.

Second and third ones are responsible for how web app will look like and how it will interact with user.

Last two guys are working on invisible part of web app, providing high speed and reliability for app.

How is everything set:

We have one workspace for our department with all projects on which we work or which we support.

Tags are used to mark tasks with special status ordered by their priority as following:

  • bug
  • urgent
  • (tasks with no tag)
  • incomplete description
  • non urgent
  • for future
  • docs

Tasks with incomplete description tag are those are not fully described, awaiting customer feedback or on which Task Manager now is working. Any member of team can assign this tag to a task which he think has not enough details, or has some missing information.

Tasks with for future tag are things that have low priority and were not discussed at all. This kind of tags can be added to be reviewed by Task Manager or discussed at daily/weekly meetings.

Docs are tasks/notes used to store some useful information about different aspects of the project.

All tasks are divided into pages by priority headings. For example if our app has a page with companies list, and a company details page, then tasks list may look like this:

There also can be some other priority headings (ex. General for tasks related to whole project). Priority heading has in their description all main details about that page with screenshots attached and any other useful documents.

Every task has 5 main things which we are using widely:

  • Description
  • Assignee
  • Followers
  • Tags
  • Comments

All tasks have sub tasks set in description as a list of item with preceding empty square brackets. Each sub task has the name of the person which should implement it. Sub sub tasks are done by preceding an item from the list with two spaces. Additionally tasks may contain links to other tasks or docs.

Task details usually are provided by Tasks Manager. After doing that, task is assigned to the person that is in charge of the first sub task. Now that person will have this task in My Tasks.

Normally people that are following are the ones that have sub tasks, but in fact anybody can subscribe. To be mentioned, Task Manager is always a follower.

We do not prioritize tasks by their position in list.

The workflow:

With this structure, workflow becomes really simple:

  • When a task is assigned to you can start to working on it
  • When you finished a sub task, you have to push changes (we use git), mark a sub task as done (inserting into square brackets a x sign) and assign the task to next person in the sub tasks list
It's almost all you do 95% of time (in case you are not a Tasks Manager). Of course there are few ifs:
  • If you had last sub task and you finished it - you have to mark the task as Complete
  • If after doing a sub task you have some important information to share - you should do it in task comments (for example indicating JSON link for some charts)
  • While doing your sub task you saw that one of the previous persons implemented the sub task wrong/poorly, you can comment it, unmark this sub task (empty its square brackets) and reassign back this task to that person.
  • If you can't complete a task (T1) because of a missing feature from some other task (T2) you can:
    • Add to T2 a sub task that will say to reassign T1 when sub task will be finished
    • Unassign T1
  • If you finished your sub task and assigned the task to some other person, and then realised that you are not done:
    • then you can reassign it back to you if that task wasn’t marked when it should be done (today, upcoming, later)
    • otherwise ask that person to assign this task back to you (using comments, or any other communication channels)

Built in Asana sub tasks:

As of end of August Asana introduced sub tasks. These are tasks inside tasks, but them are not assigned to the project of the parent task. As first it may seem that it's perfect solution for described in here sub tasks notation, but these sub tasks may work well only in case of one level of sub tasks (no sub tasks of sub tasks). If you'll have more than one level of sub tasks, than you'll get lost into them as there is no easy and fast way to visualize them.

Statistics and motivation:

By the end of the day we collect 2 types of statistics:

  • how many tasks where closed
  • how many tasks each person is assigned to

Motivation comes from:

  • Trying to have as few as possible tasks
  • Assign tasks to other people as fast as possible

Results:

After 4 weeks of using this approach we gained:

  • More than 200% boost in productivity
  • Time spent on reddit, reader and other unrelated to work websites decreased from 2h to 30 min per person (RescueTime)
  • Nobody argues about not having tasks
  • Less bugs and forgotten features
  • Easier estimation of needed time