DV-22
Epic Decomposition Ratio Too Low
Discipline
Default severity: medium
ProcessMetricsQuality
What it detects
An Epic has fewer child features or stories than expected based on its configured size and the team\'s configured average story size — the Epic may be underdefined or artificially kept at a high level. expected_children = CEIL(epic.story_points / config.discipline.avg_story_points_per_child) // configurable
Detection formula
IF expected_children > 0 AND COUNT(child_issues) / expected_children \< config.discipline.min_decomposition_ratio // default: 0.5 THEN FLAG under_decomposed Report: epic.sp, expected_children, actual_children, decomposition_ratioExamples in practice
- Assignee, field, hierarchy, or sprint hygiene rules are violated on active work.
- Issues miss mandatory fields or ownership while still in progress.
- A team shows an epic has fewer child features or stories than expected based on its configured size and the team\'s configured average story size while min decomposition ratio is set to 0.5.
Suggested response
Enforce assignee, field, hierarchy, and sprint hygiene rules your team agreed on.
Coaching playbook
Symptom
An Epic has fewer child features or stories than expected based on its configured size and the team\'s configured average story size — the Epic may be underdefined or artificially kept at a high level. expected_children = CEIL(epic.story_points / config.discipline.avg_story_points_per_child) // configurable
Why it matters
When "Epic Decomposition Ratio Too Low" keeps appearing, the team is signalling a repeatable process gap. Left unexamined, the pattern hides where work really stalls and makes improvement metrics harder to trust.
What you can achieve
Enforce assignee, field, hierarchy, and sprint hygiene rules your team agreed on.
Facilitation questions
- What system change would stop "Epic Decomposition Ratio Too Low" from firing again?
- What do the cited issues have in common — same root cause or same workaround?
- Who owns the two-week experiment and how will we verify on the next import?
Run this rule against your own tracker data with Flow Analyzer.