Connect to Jira REST API to collect completed story points, calculate weekly velocity, and estimate completion date
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
config Initial commit with base boss cement May 19, 2017
jav Updated default settings Jun 20, 2017
LICENSE Initial commit with base boss cement May 19, 2017

Codacy Badge Build Status

Jira Agile Velocity (JAV)

Built around Cement This script has been created to look at historical data from Atlassian JIRA REST API, calculate velocity, extract trends and estimate remaining work.

Velocity can be calculated using either story points (best) or ticket count (far from ideal).

Charts, generated with Bokeh, can assist teams in identifying possible challenges, difficulties and the impact of various events. The resulting HTML page can then be automatically published to github pages

Bokeh Report

Daily statistics can be posted to slack to inform the team about progress.

Slack Message

Jav tries to be as friendly as possible with your Jira instance, it will progressively build a cache and only loads new or modified content from the REST API.

Note: This script is useful at identifying trends, how realistic a timeline is, but is by no means an accurate nor perfect way of planning.


$ git clone
$ pip install -r requirements.txt
$ python install


In order to produce its statistics, JAV needs 2 JQL Queries, to calculate completed work and estimate remaining work.

Ticket Completion (Velocity)

The script will collect those details day by day by looking at when tickets are transitioned in a particular state such as Closed or Completed. The script automatically append the date to the query and will loop until a data cache is built (with the end date configured during jav setup).

Sample Query:

project = "My Project" AND status changed to "Merged"

The script will automatically append a date to this query, for example "ON ('2017-02-23')"

Remaining work

The script will then use a secon JQL query to identify the amount of work remaining for the team. In our particular case, all tickets in any open sprint but neither Merged nor Closed.

Sample Query:

sprint in openSprints() and project = "My Project" AND status not in (Merged, Closed)


Once you identified (and tested in Jira) those 2 queries, it's time for you to configure jav, running its setup sub-command.

jav setup

The system will automatically prompt you to enter various configuration settings.

WARNING: JIRA credentials and slack webhook URLs are stored in clear text within the configuration file.


To help in getting the system running, jav has been broken down in multiple sections, to prevent unneeded Slack spamming, the script is silent by default (only output messages to console), you need to manually tell it to send messages to slack.

jav --help
usage: jav [-h] [--debug] [--quiet] [-s] [-p PATH_CONFIG]
           {chart,clear,crunch,load,msg,publish,run,setup} ...

Connect to Jira REST API to collect completed story points, calculate weekly
velocity, and estimate completion date

optional arguments:
  -h, --help            show this help message and exit
  --debug               toggle debug output
  --quiet               suppress all output
  -s, --send            Send message to slack, by default prints to console
                        Path to the directory storing data and config, will be
                        created if does not exist

    chart               Create charts from cached data
    clear               Clear previous data (USE WITH CAUTION)
    crunch              Obtain updated data from Jira and crunch numbers
    load                Load latest data from Jira into cache
    msg                 Send latest stats to the team on Slack
    publish             Publish charts to github pages
    run                 Get data, crunch numbers, do stuff
    setup               Enter setup mode and provide configuration parameters
                        (jira creds, slack details)

If you issue the "run" sub-command, the system will execute the following actions:

  • load: Run queries against JIRA to collect data
  • crunch: Go through the data cache to extract statistics
  • chart: Build Bokeh charts
  • publish: Publish Bokeh charts to github pages
  • msg: Send a message to Slack

Those actions can be executed independently, but obviously you need to follow a logical sequence during first execution (you can't generate charts if you don't download data and crunch it first).

Contribute (dev)

$ virtualenv /path/to/myapp/env
$ source /path/to/myapp/env/bin/activate
$ pip install -r requirements.txt
$ python develop


You can check out the full license here.

This project is licensed under the terms of the GPLv3 license.