Return the sum of the original estimates of all descendant work items of the current work item. This includes all work items located at any level below the current work item (e.g. all epics in an initiative, all items in those epics as well as their sub-tasks). This is especially useful if you have additional levels defined above Epic in your Jira cloud work type hierarchy.
Configuration
To use the Sum original estimates of all descendants template, simply select it from the template grid. Filter by Portfolio roll-ups & delivery KPIs to find it faster.
Parameters
This template does not require any additional parameter configuration.
Edit formula mode
If you click on Edit formula you can see the formula field in the Expression Parser. You can now tweak the expression to create a custom formula field based on this template.
Expression
General expression:
%{sum(append(fieldValue({issue.originalEstimate} , allIssuesUnder()),[0])) * 60 * 1000}
“Initiative” is a sample name for the parent’s work type. Replace it with a custom one if needed.
Display as
Duration
Formatting style
short (default)
Used parser functions
The links lead to the JWTC documentation because the parser functions are shared functionalities.
Details
1. What does the expression do?
It adds up the “Original estimate” of all work items under the current work item, and then converts that total into milliseconds.
Expression:
%{sum(append(fieldValue({issue.originalEstimate} , allIssuesUnder()),[0])) * 60 * 1000}
2. Step-by-step breakdown
-
Get all child work items
-
allIssuesUnder()-
Returns a list of all work items underneath the current work item in the hierarchy (i.e., everything “below” it).
-
-
Read the Original estimate from each of those work items
-
fieldValue({issue.originalEstimate}, allIssuesUnder())-
Extracts the Original estimate field from each returned work item.
-
In Jira, time fields like Original estimate are typically handled in minutes in these expressions (that’s consistent with the SF4J templates that convert minutes using
/60).
-
-
Make sure the sum won’t fail if there are no results
-
append(..., [0])-
If there are no child work items (or no estimates), it appends a
0so the next step can still run safely.
-
-
Add all estimates together
-
sum(...)-
Sums up the list of original estimates into one total number (total minutes).
-
-
Convert minutes to milliseconds
-
* 60 * 1000-
* 60converts minutes → seconds -
* 1000converts seconds → milliseconds -
Final output: total original estimate in milliseconds
-
3. Examples
Example A: Two child work items
-
Work item 1 original estimate = 30 (minutes)
-
Work item 2 original estimate = 90 (minutes)
-
Sum = 120 minutes
-
Convert:
120 * 60 * 1000 = 7,200,000 ms
Example B: No child work items
-
fieldValue(...)returns an empty list -
append(empty, [0])→[0] -
sum([0]) = 0 -
Result =
0 * 60 * 1000 = 0 ms
4. Real-life use cases
-
Feeding another field that expects milliseconds: Some calculations, SLA-style metrics, or integrations store durations in milliseconds, so this expression prepares the total estimate in that unit.
-
Roll-up estimates on parent items: Show a parent’s total estimated effort based on all underlying work items (but in a machine-friendly unit).
-
Advanced reporting/automation: When exporting or processing data, having a consistent base unit (milliseconds) can make further calculations easier.
Sources used: the SF4J Confluence templates show that these expressions commonly treat Jira time fields as minutes and convert via /60 for hours (e.g. “Total original estimate of blocking work items”). Total original estimate of blocking work items