If availability management is enabled for the project, the table is available from the sprint plan toolbar. Everybody having access to the sprint plan can see it.
The table displays total availabilities by day, by user and for the entire sprint. Current day availabilities have bold font and weekend availabilities have grey background.
At the project level, it is useful to compare availabilities between sprints. A chart that displays the total availabilities per sprint is available both from the project dashboard and the timeline views.
The traditional sprint burndown chart compares the remaining time to an ideal download line that starts from the remaining time at sprint activation and decreases linearly to 0. However, if you use availabilities then there is a must better curve to compare your remaining time with: the remaining availabilities!
In an “in progress” and “todo” sprints, you will find a new chart named “Sprint burndown (Availability)” that replaces the ideal line by remaining availabilities. Past availabilities values are recorded while the ones for the current and upcoming days are dynamically computed from the current availabilities taken from the availability table.
Be careful, you want the curves to have the same trend but you don’t want them to be superposed! Indeed, the remaining availabilities must be above the remaining time to take into account risks and additional time needed to manage emergencies. Read the next section about “sprint latitude”.
The latitude L that represents the latitude your team has between the expected work and the maximum work that can be done is calculated from the sprint total availabilities A and the sprint total remaining time R like so:
L = A – R
It is displayed in the sprint plan (for “in progress” and “todo” sprints). You can disable latitude display in your settings under the “team availabilities” section (e.g. if you don’t use the same unit for remaining time and availabilities).
For an “in progress” sprint, the latitude is calculated from the remaining availabilities (the sum of the availabilities from the current day included to the end of the sprint) so they can be compared to the current remaining time.
It is good to ensure that your sprints have enough latitude. Indeed, it allows working on unexpected tasks, absorbing underestimations or giving your team time to improve their work.
The latitude rate latitudeRate is calculated from the latitude L and the remaining time of the sprint R like so:
latitudeRate = L / R * 100
The latitude color is computed after the latitude rate, helping you to determine if there is enough latitude. Here is the default color scheme:
A project may be risky and require a lot of latitude while a project with a well known context may require a little latitude. You can adapt the color scheme according to this context by changing the thresholds in your project settings, under the “team availabilities” section.
Availabilities and latitudes are also displayed in project bundles.
Team members can edit their own availabilities until the sprint is closed. Scrum Masters and Product Owners can edit the availabilities of all users, regardless of the sprint state.
You can expand a cell of the availability table to copy its value to adjacent cells as you usually do in spreadsheets. You can also copy/paste availabilities from spreadsheets.
You can enter any integer or decimal value (using “,” or “.” as decimal separator). The only restriction is that values must be positive or zero.
By default, weekends have empty availability (zero). Moreover, if you have selected the “Hide weekends” preference in your project then weekend availabilities are read-only in the table.
When you add a team member, corresponding availabilities with default value are created for planned sprints. Empty availabilities (zero) are also created for the “in progress” sprint.
When you remove a team member, availabilities for planned sprints are deleted. Availabilities for “in progress” and closed sprint are kept.
If availability management is enabled, creating a sprint will automatically create its availabilities with default value.
When you activate a sprint, the total expected availability for the sprint is saved. It is displayed in the availabilities table and compared to the “actual availabilities”. “Expected availability” by user are also available through the Web Services API.
When you update your sprint dates:
Please note that shifting a sprint (e.g. delaying the beginning of the sprint but keeping its duration) will both create days and delete availabilities (here head availabilities are deleted and tail availabilities are created).
If you delete a sprint, all its availabilities are deleted.
GET http://:server/ws/p/:pkey/availability
[ { "id":1, "expectedAvailability":10, "sprint":{ "id":3 }, "user":{ "id":4 }, "days":[ 0.75, 0.75, 0.75, 0.75, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1 ] }, { "id":2, "expectedAvailability":10, "sprint":{ "id":3 }, "user":{ "id":2 }, "days":[ 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1 ] }, { "id":3, "expectedAvailability":10, "sprint":{ "id":3 }, "user":{ "id":3 }, "days":[ 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1 ] }, { "id":4, "expectedAvailability":0, "sprint":{ "id":4 }, "user":{ "id":4 }, "days":[ 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1 ] }, { "id":5, "expectedAvailability":0, "sprint":{ "id":4 }, "user":{ "id":2 }, "days":[ 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1 ] }, { "id":6, "expectedAvailability":0, "sprint":{ "id":4 }, "user":{ "id":3 }, "days":[ 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1 ] }, { "id":7, "expectedAvailability":0, "sprint":{ "id":5 }, "user":{ "id":4 }, "days":[ 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1 ] }, { "id":8, "expectedAvailability":0, "sprint":{ "id":5 }, "user":{ "id":2 }, "days":[ 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1 ] }, { "id":9, "expectedAvailability":0, "sprint":{ "id":5 }, "user":{ "id":3 }, "days":[ 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1 ] } ]
<?xml version="1.0" encoding="UTF-8"?> <list> <availability id="1"> <expectedAvailability>10.0</expectedAvailability> <sprint id="3" /> <user id="4" /> <days> <double>0.75</double> <double>0.75</double> <double>0.75</double> <double>0.75</double> <integer>0</integer> <integer>0</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>0</integer> <integer>0</integer> <integer>1</integer> </days> </availability> <availability id="2"> <expectedAvailability>10.0</expectedAvailability> <sprint id="3" /> <user id="2" /> <days> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>0</integer> <integer>0</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>0</integer> <integer>0</integer> <integer>1</integer> </days> </availability> <availability id="3"> <expectedAvailability>10.0</expectedAvailability> <sprint id="3" /> <user id="3" /> <days> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>0</integer> <integer>0</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>0</integer> <integer>0</integer> <integer>1</integer> </days> </availability> <availability id="4"> <expectedAvailability>0.0</expectedAvailability> <sprint id="4" /> <user id="4" /> <days> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>0</integer> <integer>0</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>0</integer> <integer>0</integer> <integer>1</integer> </days> </availability> <availability id="5"> <expectedAvailability>0.0</expectedAvailability> <sprint id="4" /> <user id="2" /> <days> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>0</integer> <integer>0</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>0</integer> <integer>0</integer> <integer>1</integer> </days> </availability> <availability id="6"> <expectedAvailability>0.0</expectedAvailability> <sprint id="4" /> <user id="3" /> <days> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>0</integer> <integer>0</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>0</integer> <integer>0</integer> <integer>1</integer> </days> </availability> <availability id="7"> <expectedAvailability>0.0</expectedAvailability> <sprint id="5" /> <user id="4" /> <days> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>0</integer> <integer>0</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>0</integer> <integer>0</integer> <integer>1</integer> </days> </availability> <availability id="8"> <expectedAvailability>0.0</expectedAvailability> <sprint id="5" /> <user id="2" /> <days> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>0</integer> <integer>0</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>0</integer> <integer>0</integer> <integer>1</integer> </days> </availability> <availability id="9"> <expectedAvailability>0.0</expectedAvailability> <sprint id="5" /> <user id="3" /> <days> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>0</integer> <integer>0</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>0</integer> <integer>0</integer> <integer>1</integer> </days> </availability> </list>
GET http://:server/ws/p/:pkey/:sprintId/availability
[ { "id":1, "expectedAvailability":10, "sprint":{ "id":3 }, "user":{ "id":4 }, "days":[ 0.75, 0.75, 0.75, 0.75, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1 ] }, { "id":2, "expectedAvailability":10, "sprint":{ "id":3 }, "user":{ "id":2 }, "days":[ 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1 ] }, { "id":3, "expectedAvailability":10, "sprint":{ "id":3 }, "user":{ "id":3 }, "days":[ 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1 ] } ]
<?xml version="1.0" encoding="UTF-8"?> <list> <availability id="1"> <expectedAvailability>10.0</expectedAvailability> <sprint id="3" /> <user id="4" /> <days> <double>0.75</double> <double>0.75</double> <double>0.75</double> <double>0.75</double> <integer>0</integer> <integer>0</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>0</integer> <integer>0</integer> <integer>1</integer> </days> </availability> <availability id="2"> <expectedAvailability>10.0</expectedAvailability> <sprint id="3" /> <user id="2" /> <days> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>0</integer> <integer>0</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>0</integer> <integer>0</integer> <integer>1</integer> </days> </availability> <availability id="3"> <expectedAvailability>10.0</expectedAvailability> <sprint id="3" /> <user id="3" /> <days> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>0</integer> <integer>0</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>0</integer> <integer>0</integer> <integer>1</integer> </days> </availability> </list>
GET http://:server/ws/p/:pkey/availability/:userId
[ { "id":2, "expectedAvailability":10, "sprint":{ "id":3 }, "user":{ "id":2 }, "days":[ 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1 ] }, { "id":5, "expectedAvailability":0, "sprint":{ "id":4 }, "user":{ "id":2 }, "days":[ 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1 ] }, { "id":8, "expectedAvailability":0, "sprint":{ "id":5 }, "user":{ "id":2 }, "days":[ 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1 ] } ]
<?xml version="1.0" encoding="UTF-8"?> <list> <availability id="2"> <expectedAvailability>10.0</expectedAvailability> <sprint id="3" /> <user id="2" /> <days> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>0</integer> <integer>0</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>0</integer> <integer>0</integer> <integer>1</integer> </days> </availability> <availability id="5"> <expectedAvailability>0.0</expectedAvailability> <sprint id="4" /> <user id="2" /> <days> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>0</integer> <integer>0</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>0</integer> <integer>0</integer> <integer>1</integer> </days> </availability> <availability id="8"> <expectedAvailability>0.0</expectedAvailability> <sprint id="5" /> <user id="2" /> <days> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>0</integer> <integer>0</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>0</integer> <integer>0</integer> <integer>1</integer> </days> </availability> </list>
GET http://:server/ws/p/:pkey/:sprintId/availability/:userId
{ "id":2, "expectedAvailability":10, "sprint":{ "id":3 }, "user":{ "id":2 }, "days":[ 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1 ] }
<?xml version="1.0" encoding="UTF-8"?> <availability id="2"> <expectedAvailability>10.0</expectedAvailability> <sprint id="3" /> <user id="2" /> <days> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>0</integer> <integer>0</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>1</integer> <integer>0</integer> <integer>0</integer> <integer>1</integer> </days> </availability>
PUT http://:server/ws/p/:pkey/:sprintId/availability/:userId