Availabilities (R6) – iceScrum

Obsolete iceScrum documention (R6#14+) This documentation applies only to old iceScrum R6. For new iceScrum v7, click here.


Sometimes, some team members are not fully dedicated to your project: training, conferences, sick leave, part-time etc.. Availabilities vary over time and may affect your velocity. iceScrum Pro makes it easy to record availabilities and interpret them.

Configuration

By default, availability management is disabled so you need to enable it in your project preferences. Then, availabilities with the chosen default value will be automatically created for your sprints (“in progress” and planned ones).

You can change the default availability at any time, but keep in mind that it will only affect new availabilities.

If you disable activity management, availabilities for planned sprints will be deleted. Availabilities for “in progress” and closed sprints are kept so you will get them back when re-enabling availability management.

Availability display

Availability table

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.

Project availabilities charts

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.

Availabilities and remaining time

If your use the same unit (e.g. hours) for remaining time and availabilities then it is interesting to compare their values. In addition to this section, you can also read our blog post about availabilities: https://www.icescrum.com/blog/team-availabilities-why-and-how/.

Sprint burndown chart

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.

Remaining time vs Availability
Remaining time vs. Availability

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

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:

  • latitudeRate > 40%: blue
  • 30% < latitudeRate < 40%: green
  • 20% < latitudeRate < 30%: orange
  • latitudeRate < 20%: red

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.

Edition

Permissions

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.

Edit your availabilities

Accepted values

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.

Weekends

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.

Team updates

Add a team member

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.

Remove a team member

When you remove a team member, availabilities for planned sprints are deleted. Availabilities for “in progress” and closed sprint are kept.

Sprint updates

Create a sprint

If availability management is enabled, creating a sprint will automatically create its availabilities with default value.

Activate a sprint

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.

Update sprint dates

When you update your sprint dates:

  • If you add days to the sprint, corresponding availabilities with default value will be created.
  • If you remove days from the sprint, corresponding availabilities will be deleted.

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

Delete a sprint

If you delete a sprint, all its availabilities are deleted.

Web Services API

Availability Web Services are available only if both Web Services and availability management are enabled in the project. Please refer to the main iceScrum API documentation for more information.

Get all availabilities

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 all availabilities for the given sprint

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 all availabilities for the given user

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 user availabilities for the given sprint

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>

Update user availabilities for the given sprint

PUT http://:server/ws/p/:pkey/:sprintId/availability/:userId

Input


availability.days
Required - Use comma to separate values (JSON array is also accepted)


Try it for free now
All you need for your Agile project management