Hi everyone,
Having worked as a Scrum Master and developer for many years, I rely heavily on time estimations and time-tracking for sprint planning and progress reporting.
Over time, I’ve consistently faced a reporting dilemma with Jira's standard Burndown Chart:
In a typical sprint, we see the Original Estimate line go down, while Time Spent climbs. In reality, Time Spent often shoots far past the original estimate, while the estimate line rarely hits zero because planned scope was left unfinished.
The core issue: The burndown line only jumps upward when estimated tickets are added mid-sprint. However, the majority of unplanned work consists of urgent bugs, ad-hoc support, or small operational requests that are added without an estimate (or with 0h).

A classic example from one of my past sprints (see image above):
Planned scope started around 270h, but ~80h remained incomplete at sprint end.
Notice specifically the second week (starting around July 1st): While the remaining estimate line almost stagnates, the Time Spent curve spikes massively all the way up to over 350h.
In this specific case, that divergence was caused entirely by incoming unestimated tasks, urgent operational requests, and support items that absorbed the team's capacity without moving the planned burndown.
To an outside stakeholder looking just at remaining estimates, it looks like a missed commitment — while in reality, the team delivered ~350 hours of pure output, mostly absorbed by untracked shadow work.
What I define as "Shadow Work":
By Shadow Work, I mean all the invisible, unestimated tasks and mid-sprint additions that consume real development hours, silently destroy sprint goals, but leave almost no trace in standard burndown analytics.
The Workarounds I've Tried
When planning sprints, I include capacity buffers per person depending on their role. But tracking and isolating where that buffer actually went afterwards remains difficult:
Custom JQL Queries: Filters like created > SprintStartDate AND (originalEstimate is EMPTY OR originalEstimate = 0) help catch newly created items, but they completely miss existing backlog tickets dragged into an active sprint (as standard JQL lacks a clean timestamp for sprint assignment).
External Spreadsheets (Excel/Sheets): I ended up building spreadsheets that pulled Jira data directly via API/exports. While it gave me the numbers, maintaining external sheets created unnecessary overhead, and constantly jumping between Jira and Excel just to run a retrospective feels disconnected and inefficient.
Analyzing these tickets inside our primary workspace is critical, as they are usually the exact reason a sprint misses its commitment.
My Questions to the Community:
How do your teams isolate and visualize unestimated/unplanned work vs. original commitment?
Do you rely on custom dashboards/JQL, third-party reporting, or do you also fall back on external tools like Excel?
How do you clearly demonstrate to stakeholders that a missed goal was due to absorbed shadow work, not low team output?
Looking forward to your workflows, setups, and perspectives!