{% macro epic_progress(epic) -%} {% if epic.min_stories %}
{{ epic.stories_done }} of {{ epic.min_stories }} {% if epic.max_stories and epic.max_stories != epic.min_stories %} – {{ epic.max_stories }} {% endif %} stories completed
({{ percent_complete(epic) }}%) {% if epic_charts[epic.key]['scatterplot'] %} {% endif %} {% if epic_charts[epic.key]['cfd'] %} {% endif %} {% else %} Forecast not available {% endif %} {%- endmacro %} {% macro epic_forecast_percentile(epic) -%} {% if epic.forecast %} {% if epic.forecast.deadline_quantile is not none %} {% if epic.forecast.deadline_quantile > 0.95 %} > 95% {% elif epic.forecast.deadline_quantile < 0.1 %} < 10% {% else %} {{ (epic.forecast.deadline_quantile * 100) | round | int }}% {% endif %} {% endif %} {% endif %} {%- endmacro %} {%- macro epic_forecast_dates(epic) %} {% if epic.forecast %} {% for quantile, weeks in epic.forecast.quantiles %}
{{ future_date(weeks).strftime("%d %b %Y") }} @ {{ (quantile * 100) | round | int }}%
{% endfor %} {% endif %} {%- endmacro %} {{title}}

{{title}}

This report shows outcomes and their associated epics. For each epic, we forecast a completion date based on the expected number of stories in the epic, the historical or predicted throughput of that team delivering the epic, and the number of stories completed to date.

Configuration »

{% if story_query_template %} {% endif %} {% if epic_deadline_field %} {% endif %} {% if epic_team_field %} {% endif %} {% if epic_min_stories_field %} {% endif %} {% if epic_max_stories_field %} {% endif %}
Story query template: {{story_query_template}}
Epic deadline field: {{epic_deadline_field}}
Epic team field: {{epic_team_field}}
Epic min stories field: {{epic_min_stories_field}}
Epic max stories field: {{epic_max_stories_field}}
Teams {% for team in teams %} {% if team.min_throughput %} {% else %} {% endif %} {% endfor %}
Name Throughput Epic WIP
{{ team.name }}{{ team.min_throughput }} – {{ team.max_throughput }} stories/week Historical data {%- if team.throughput_samples_window %} over {{ team.throughput_samples_window }} weeks {% endif -%} {% if team_charts[team.name]['scatterplot'] %} {% endif %} {% if team_charts[team.name]['cfd'] %} {% endif %} {% if team_charts[team.name]['throughput'] %} {% endif %} {{ team.wip }}

{% for idx, outcome in enumerate(outcomes) %} {% if outcome.name %}

{{ outcome.name }} »

{% endif %}

Epics query: {{ outcome.epic_query }}

{% if epic_deadline_field %} {% endif %} {% for epic in outcome.epics %} {% if epic_deadline_field %} {% endif %} {% endfor %}
Epic Team StoriesDeadline Forecast (week starting)
{{ epic.key }}: {{ epic.summary }} {{ epic.team.name }} {{ epic_progress(epic )}} {% if epic.deadline %} {{ epic.deadline.strftime("%d %b %Y") }} {% else %} N/A {% endif %} {{ epic_forecast_percentile(epic) }} {{ epic_forecast_dates(epic) }}
{% endfor %}
{% for team in teams %}

{{ team.name }}

{% if epic_deadline_field %} {% endif %} {% for epic in epics_by_team[team.name] %} {% if epic_deadline_field %} {% endif %} {% endfor %}
Epic Outcome StoriesDeadline Forecast (week starting)
{{ epic.key }}: {{ epic.summary }} {{ epic.outcome.name }} {{ epic_progress(epic )}} {% if epic.deadline %} {{ epic.deadline.strftime("%d %b %Y") }} {% else %} N/A {% endif %} {{ epic_forecast_percentile(epic) }} {{ epic_forecast_dates(epic) }}
{% endfor %}
{% for team in teams %} {% if team_charts[team.name]['cfd'] %}
Cumulative Flow Diagram of historical samples for {{ team.name }}
Close
{% endif %} {% if team_charts[team.name]['throughput'] %}
Historical weekly throughput for {{ team.name }}
Close
{% endif %} {% if team_charts[team.name]['scatterplot'] %}
Cycle time scatter plot for {{ team.name }}
Close
{% endif %} {% endfor %} {% for outcome in outcomes %} {% for epic in outcome.epics %} {% if epic_charts[epic.key]['cfd'] %}
Cumulative Flow Diagram for {{ epic.summary }}
Close
{% endif %} {% if epic_charts[epic.key]['scatterplot'] %}
Cycle time scatter plot for {{ epic.summary }}
Close
{% endif %} {% endfor %} {% endfor %}