Risk Awareness
Release calculates a risk level for each release based on different factors such as flags, failed or failing states, or due dates. You can see the releases with a high risk level and take the appropriate actions.
In the release overview, you can see if a release has a high risk level. An icon next to the release indicates the risk level.
Shows At risk state, the reason (Example: Release has tasks flagged as red.
), and a message (Example: Task name: Flag comment
)
Shows Attention needed state, the reason (Example: Release has tasks flagged as amber.
), and a message (Example: Task name: Flag comment
)
Shows On track state when the release is on track.
Click the icon to see the detailed risk information and the risk score.
Important To order the release overview by risk level, click Order by and select Risk. The sorting is done based on risk calculation, displaying the release with the maximum risk score at the top. If multiple releases have the same maximum risk score, a second sorting rule is applied calculating the total risk sum for each release.
Risk assessors
These are the risk assessors used to calculate the risk level of a release:
- Release flags: Red or Amber
- Release state: Failed or Failing
- Task flags: Red or Amber
- Release past due date
- Current task past due date
- Retries for a failed task
Custom risk assessors
Release allows you to create custom risk assessors. To do that, extend the RiskAssessor
class with the execute method implemented where any new risk condition is defined.
Example:
@Metadata(label = "ReleaseFlaggedAtRiskAssessor", versioned = false)
public class ReleaseFlaggedAtRiskAssessor extends RiskAssessor {
private static final String RELEASE_AT_RISK_HEADLINE = "Release is flagged as red";
private static final String RELEASE_FLAGGED_MESSAGE = "%s: %s";
@Override
public RiskAssessment execute(final Release release, final RiskProfile riskProfile) {
RiskAssessment assessment = new RiskAssessment();
assessment.setRiskAssessorId(this.getId());
List<String> messages = new ArrayList<>();
if (release.getFlagStatus() == FlagStatus.AT_RISK) {
assessment.setScore(riskProfile.getValueFor(getType()));
assessment.setHeadline(RELEASE_AT_RISK_HEADLINE);
messages.add(getMessage(release.getTitle(), release.getFlagComment()));
} else {
assessment.setScore(OK_SCORE);
assessment.setHeadline(OK_HEADLINE);
}
assessment.setMessages(messages);
return assessment;
}
private String getMessage(String releaseTitle, String flagComment) {
return format(RELEASE_FLAGGED_MESSAGE, releaseTitle, ofNullable(flagComment).orElse(""));
}
}
Markdown in risk assessment messages
In Release 8.6.0 and later, assessment messages support Markdown which allows you to format them with hyperlinks and custom icons. For example:
return String.format("[release forecast](%s)", url);
The default risk threshold:
Flag | Score | Description |
---|---|---|
Red | 50 - 100 | The release is at risk. |
Amber | 10 - 49 | The release requires attention. |
Green | < 10 | The release is on track. |
The default risk score
The default values for the risk assessors are used in the default risk profile. For more information about risk profiles, see Configure risk profile settings.
Risk assessor | Score |
---|---|
Release flags | Red - 80 |
Amber - 30 | |
Release state | Failed - 90 |
Failing - 70 | |
Task red flag | Red |
* 1 red flag: 65 | |
* 2-3 red flags: 70 | |
* 4-6 red flags: 75 | |
* >6 red flags: 80 | |
Task amber flag | Amber |
* 1 amber flag: 10 | |
* 2-3 amber flags: 20 | |
* 4-6 amber flags: 30 | |
* >6 amber flags: 40 | |
Release past due date | 30 |
Task past due date | 1 task - 25 |
>1 task - 35 | |
Retries for failed task | Task failed once - 50 |
Risk score increases by 10 for each subsequent task failure | |
When task failed more than 6 times, the score is 100 |