GithubHelp home page GithubHelp logo

asana_snapshot's Introduction

Asana Snapshot

Asana is a great, versatile task management system. However, like many similar task management systems, being able to track meaningful progress across one or more projects; burn-down charts are great, but are not built to extract any immediate, actionable decisions. Tracking the progress of a project over a specified period of time can be quite cumbersome, if not impossible. This becomes even more difficult in Asana when using Boards that might all have different names for the swim lanes/columns or that have different terminology for what tasks are 'complete' and 'incomplete'.

Asana Snapshot has chosen to solve this issue by leveraging a change-tracking tool that is likely a part of most of our daily lives: git. Using git comparisons, one can gather information to drive useful & productive conversations about the progress of a given project, such as, overall velocity, project completeness and burndown, which specific tasks were completed in that time period, which specific tasks are at-risk (eg, which ones are assigned, but not completed or which remain unassigned within that given time period), etc.

From a technical side, this gem will fetch all tasks based on a specific set of user-provided conditions, write to a text-based project snapshot file (ie, using Markdown), commit & tag those project snapshot files into a git repository, while doing so in a simple and repeatable manner.

Sample snapshot

## Stats
Complete: 12
Incomplete: 23 (12 unassigned)

## Tasks
[X] 473716394 ["Done"] - Joe Smith - provision test server
[ ] 473716485 ["In Progress"] - John Doe - implement authentication service
[ ] 473164858 ["Ready To Dev"] - Unassigned - develop profitable feature

Tasks are ordered by Asana task id, and so should almost always remain on the same line within a snapshot file, making tasks updates easier to parse out from the git tag comparisons.

Installation

gem install asana_snapshot

or if you are using Bundler add the following to your Gemfile

gem 'asana_snapshot'

Configuration

Config Description Default
logger gem logging destination Logger.new STDOUT
token Asana API Personal Access Token nil
base_dir file directory where snapshots will be saved Dir.pwd
persistence Hash specifying the persistence store (requires an adapter key) {adapter: :git}

Example:

AsanaSnapshot.configure do |config|
  config.logger   = Logger.new('logfile.log')
  config.token    = '_my_personal_token_'
  config.base_dir = '/path/to/where/i/save/snapshots'
end

Usage

There are two primary entry points for executing AsanaSnapshot: via its Ruby API or via the shipped executable file.

In both cases, it expects the presence of a YAML config file which supplies information about the Asana workspace & projects upon which it will search for tasks. AsanaSnapshot will only search for tasks (as opposed to sub-tasks) that belong to the projects in the YAML file and which contain any tags defined in the YAML file.

Anatomy of a snapshot YAML file

title: 'Acme Boards'

The title key identifies how the snapshots will be organized. The sub-directory of the configured base_dir in which snapshots are saved will be an underscored version of this title.

workspace: 123456789

The workspace key identifies which Asana workspace id to query for tasks.

filters:
  tags: 234567890, 345678901

The filters key groups the possible query filters. As of now, only tags are supported. tags are a comma-delimited list of Asana tag id's that a task may contain.

projects:
  - id: 4567890123
    name: 'Phase 2 Widgets'
    columns:
      complete:
        - 'Done'
      incomplete:
        - 'In Discovery'
        - 'In Progress'

The projects key identifies the set of projects that will be searched. It contains the Asana project id, a helpful name to identify it in the YAML file (which would likely match the name of the project in Asana, but it can be anything you want), and a columns key which identifies the names of the Asana sections of the project board should be considered as complete or incomplete.

Ruby API

Example:

AsanaSnapshot.configure do |config|
  config.token = '_my_personal_token_'
end

AsanaSnapshot.execute './config/acme_boards.yml'

Executable

The gem ships with an executable named snap. snap takes a single argument, which is the path to the asana_snapshot config file.

The snap executable uses the following environment variables to override the default AsanaSnapshot configuration:

ENV Config
ASANA_SNAPSHOT_TOKEN token

Example:

ASANA_SNAPSHOT_TOKEN='_my_personal_token_' snap './config/acme_boards.yml'

asana_snapshot's People

Contributors

mtyeh411 avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.