Rolling up time from sub-tasks to epics in Jira Cloud: estimates, time spent and remaining by level
Also published on Atlassian Community
In this guide
Ask a delivery lead how many hours an epic has used, or how much is left, and you will often get two numbers: the one on the epic, and the one from a spreadsheet built after the epic looked suspiciously cheap.
MarginRadar is a Forge app from Radrly that turns Jira Cloud worklogs into cost, budget and margin. This guide climbs the Jira hierarchy one level at a time, from a sub-task up to the whole space, and notes at each step what native Jira adds up, where it stops, and what changes once the question turns to budget. The app comes in after the native part.
The sub-task
A worklog belongs to exactly one work item, so the Time Spent field on a sub-task is the time logged directly on it. Original Estimate and Remaining Estimate are also per work item. In JQL you can filter on timeSpent, originalEstimate, remainingEstimate and workRatio, and each of them reads the work item's own value.
The story
The Σ fields appear here: Σ Time Spent, Σ Original Estimate and Σ Remaining Estimate add a work item's own values to those of its direct children. Two details catch people out. Σ fields cannot be placed on the main work item layout; you see them as columns in the list view, in reports and on dashboards. And a CSV export only carries the roll-up if you add the Σ Time Spent column before exporting, as described in this Atlassian knowledge base article.
The epic
This is where the native roll-up ends. Atlassian's own note on JRACLOUD-70150, open since 2018, says that time tracking rolls up one level only. The epic's Σ Time Spent includes its stories, and leaves out the sub-tasks under those stories.
Two native workarounds:
- A list view sum. Run
parent = WEB-12, show the Σ Time Spent, Σ Original Estimate and Σ Remaining Estimate columns, export, and add the epic's own values to the totals. Each story's Σ value already includes its sub-tasks, so this gives the full three-level figures, once, by hand. - An Automation rule. A scheduled rule uses Lookup work items to fetch the stories, then their sub-tasks, and writes the sums of time spent, original estimate and remaining estimate into number fields on the epic. Atlassian's service limits cap a lookup at the first 100 work items, and the number is only as fresh as the last run. On the plus side, a number field can be searched in JQL, which the Σ fields cannot.
The space
There is no Σ field for a whole space. The common trap: someone exports every work item in the space with the Σ Time Spent column and sums it. Every sub-task hour is then counted twice, once on the sub-task and again on its parent. For a space total, filter with space = WEB and sum the plain Time Spent column. Because each worklog sits on exactly one work item, that counts each hour once.
Where hours stop answering budget questions
Even a perfect three-level sum is still hours. A budget question usually needs three more things: a rate for each person or role, the rate that applied on the day the work was logged, and costs that are not worklogs at all. None of these live in Jira, so they end up in a spreadsheet.
What MarginRadar adds at each level
MarginRadar reads native Jira worklogs and multiplies them by rate cards for roles, people or one space. Every rate has an effective date, so a worklog is costed at the rate valid on the day it was logged. It never changes fields or worklogs; on Advanced, budget alerts can add a Jira comment.
At the story. On Standard, the work item panel shows cost to date, hours, billable value and margin.
At the epic. The epic panel has an Include subtasks checkbox, on by default, that rolls up work logged on the epic, its stories, tasks and bugs, and their sub-tasks (the panel header then reads "Epic + subtasks"). Clear it to see "This epic only". The roll-up of cost, hours, billable value and margin works on Standard; the epic budget bar is Advanced. Viewers do not see the checkbox.
In both editions, the Report tab groups cost, billable value, hours and expenses By epic for a month, a quarter or a custom range, with sub-task hours counted under the epic above their story. CSV download included.
On Advanced, an epic can have its own budget, and it counts work logged on sub-tasks of its stories too. Each worklog is tagged with its epic when it arrives or is imported, so after moving a story to another epic, run Import worklogs again to move its older hours along. For a slice that does not follow the hierarchy, an Advanced scoped budget takes a JQL query, limited to the current space.
At the space. On Standard, the space total includes every worklog in the space, sub-tasks included, each counted once. The budget can be money, hours or both, and the space page shows spent, remaining, burn rate and margin, with expenses counted in spent. On Advanced, the hybrid forecast combines recent burn with remaining estimates on open work and shows a P50 to P90 run out range.
Across spaces. On Advanced, the Portfolio page lists every budgeted space you can browse, with spent, estimate at completion and status.
Honest limits
- MarginRadar's figures live in the app. They do not become Jira fields, so you cannot search them in JQL.
- MarginRadar does not roll up Original Estimate or Remaining Estimate into fields. For a pure estimate roll-up, the list view sum or the Automation rule above is the right tool.
- MarginRadar does not read Tempo or other trackers directly. Their time counts only once it syncs into native Jira worklogs.
Quick answers
Does Jira Cloud roll up time from sub-tasks to the epic?
No. Native time tracking rolls up one level only. The epic's Σ Time Spent includes its stories and leaves out the sub-tasks under those stories (JRACLOUD-70150).
How do I get a correct time spent total for a whole space?
Filter with space = WEB (your space key) and sum the plain Time Spent column. Summing Σ Time Spent counts every sub-task hour twice.
Can an Automation rule sum time onto the epic?
Yes. A scheduled rule can use Lookup work items and write the sums into number fields on the epic. A lookup is capped at the first 100 work items, and the number is only as fresh as the last run.
Does MarginRadar write rolled-up estimates into Jira fields?
No. MarginRadar's figures live in the app and cannot be searched in JQL. For a pure estimate roll-up, use the list view sum or an Automation rule.