Let me provide a comprehensive solution that addresses all three focus areas: modeling acceptance criteria as subtasks, using custom fields for requirement completion, and understanding sprint carry-over behavior.
Problem Analysis:
The core issue is that Jira treats subtasks as tightly coupled to their parent story. When you move a story between sprints, Jira’s default behavior is to move all subtasks with it, which breaks your ability to track partial completion in sprint reviews.
Solution 1: Modeling Acceptance Criteria as Subtasks (Current Approach, Optimized)
If you want to keep using subtasks for acceptance criteria, you need to handle sprint carry-over manually:
Step 1: Configure Sprint Carry-Over Behavior
Jira 8 has a setting that controls whether subtasks move with parents. Go to:
Board Settings → General → “Allow subtasks to be in a different sprint than their parent”
Enable this setting. This allows subtasks to remain in their original sprint even when the parent moves.
Step 2: Manual Sprint Assignment for Completed Subtasks
When moving a partially completed requirement story to the next sprint:
- Move the parent story to Sprint 2 (this will initially move all subtasks)
- For each completed subtask, manually edit and change sprint back to Sprint 1
- Incomplete subtasks remain in Sprint 2 with the parent
This preserves sprint history but is tedious. To automate:
Step 3: Automation Rule to Preserve Completed Subtask Sprints
Create a Jira automation rule:
- Trigger: Issue moved to a different sprint
- Condition: Issue type = Story AND has subtasks
- Action: Branch on subtasks where status category = Done
- Sub-action: Set sprint field to {{parent.originalSprint}}
This automatically keeps completed subtasks in their original sprint when the parent moves.
Solution 2: Using Custom Fields for Requirement Completion
A more robust approach is to track completion percentage on the parent story using a custom field:
Step 1: Create Custom Fields
Create two custom fields on Story issue type:
- “Acceptance Criteria Completed” (Number field)
- “Acceptance Criteria Total” (Number field)
- “Completion Percentage” (Calculated field or automation-updated Number field)
Step 2: Automation Rule to Calculate Completion
Create an automation rule that triggers when any subtask changes status:
// Pseudocode - Key implementation steps:
1. Trigger: Issue transitioned (subtask)
2. Action: Get parent issue
3. Action: Lookup issues - all subtasks of parent
4. Action: Count subtasks where status category = Done
5. Action: Update parent field "Acceptance Criteria Completed" with count
6. Action: Update parent field "Acceptance Criteria Total" with total count
7. Action: Calculate percentage: (completed / total) × 100
8. Action: Update parent field "Completion Percentage" with result
This gives you a real-time completion percentage on each requirement story that persists across sprint moves.
Step 3: Sprint Review Reporting
Create a custom JQL filter for sprint reviews:
sprint = "Sprint 1"
AND "Completion Percentage" > 0
AND status != Done
ORDER BY "Completion Percentage" DESC
This shows all partially completed requirements from Sprint 1, even if they’ve moved to Sprint 2.
Solution 3: Sprint Carry-Over Behavior for Subtasks vs. Parents
Understanding Jira’s sprint mechanics is crucial:
How Jira Handles Sprint Assignment:
-
Parent Story: Sprint field is a single value. When you move a story from Sprint 1 to Sprint 2, the sprint field changes from “Sprint 1” to “Sprint 2”. The story no longer appears in Sprint 1 reports.
-
Subtasks: Subtasks have their own sprint field (if enabled in board settings). By default, subtasks inherit the parent’s sprint, but can be assigned independently.
-
Velocity Calculation: Jira’s velocity report aggregates story points based on the sprint field value. If a subtask is in Sprint 1 and has 3 points, those 3 points count toward Sprint 1 velocity, regardless of where the parent is.
Key Insight: Story Points Assignment Strategy
To track partial completion correctly, you must assign story points at the subtask level, not the parent level:
Before (Parent-Level Points):
Requirement Story: "User can reset password" [8 points]
├─ Subtask: Email validation [0 points]
├─ Subtask: Token generation [0 points]
└─ Subtask: Password strength check [0 points]
Problem: When story moves to Sprint 2, all 8 points move with it, even if 2 subtasks are done.
After (Subtask-Level Points):
Requirement Story: "User can reset password" [0 points]
├─ Subtask: Email validation [3 points] - Sprint 1, Done
├─ Subtask: Token generation [3 points] - Sprint 1, Done
└─ Subtask: Password strength check [2 points] - Sprint 2, To Do
Benefit: When story moves to Sprint 2, 6 points remain credited to Sprint 1 (from completed subtasks), and only 2 points move to Sprint 2.
Implementation Steps:
-
Migrate existing stories: For each requirement story with parent-level points:
- Divide parent points among subtasks based on relative effort
- Set parent points to 0
- Assign points to each subtask
-
Update team practices: Train team to estimate at subtask level during sprint planning
-
Adjust velocity tracking: Jira will now aggregate subtask points for velocity reports automatically
Solution 4: Alternative Modeling - Acceptance Criteria as Linked Stories
If subtask management becomes too cumbersome, consider modeling acceptance criteria as separate story issues:
Structure:
Requirement Epic: "Password Reset Feature"
├─ Story: Email validation [Sprint 1, Done]
├─ Story: Token generation [Sprint 1, Done]
└─ Story: Password strength check [Sprint 2, To Do]
Link these stories to the Epic using “implements” or “satisfies” link type.
Benefits:
- Each acceptance criterion is an independent story with its own sprint assignment
- No carry-over complexity-done stories stay in their sprint naturally
- Better visibility in sprint reports (each story shows up individually)
- Team can work on acceptance criteria in parallel across multiple sprints
Drawbacks:
- More issues to manage (3 stories instead of 1 story + 3 subtasks)
- Requires discipline to keep stories linked to parent Epic
- Epic-level reporting needed to see overall requirement status
Recommended Approach (Best Practice):
Combine Solution 1 (subtasks with proper sprint handling) and Solution 2 (custom completion fields):
- Model acceptance criteria as subtasks (keeps them visually grouped under requirement)
- Assign story points at subtask level (enables accurate velocity tracking)
- Enable subtask sprint independence (allows completed subtasks to stay in original sprint)
- Add completion percentage custom field (provides at-a-glance progress visibility)
- Create automation rules to:
- Calculate completion percentage when subtasks change status
- Preserve completed subtask sprints when parent moves
- Add comment to parent when moved with partial completion
Sprint Review Reporting Setup:
Create a custom dashboard for sprint reviews with these gadgets:
- Velocity Chart: Shows points completed per sprint (will correctly show partial completion from subtasks)
- Sprint Report: Filtered to show issues with completion percentage > 0 and < 100
- Custom Filter Results: JQL showing carried-over requirements:
project = REQ
AND sprint = "Sprint 2"
AND "Completion Percentage" > 0
AND "Completion Percentage" < 100
Stakeholder Communication:
During sprint reviews, present carried-over requirements with context:
- “Requirement REQ-123 was 67% complete in Sprint 1 (2 of 3 acceptance criteria met)”
- “The completed criteria (Email validation, Token generation) delivered 6 story points”
- “The remaining criterion (Password strength check) carries 2 points into Sprint 2”
This gives stakeholders clear visibility into partial progress and avoids the perception that incomplete stories represent zero value.
Handling Edge Cases:
- Story moved multiple times: Completion percentage tracks cumulative progress across all sprints
- Subtasks added mid-sprint: Automation recalculates total and percentage automatically
- Subtasks reopened: Percentage decreases, reflecting actual state
- Parent story completed with incomplete subtasks: Add validation rule to prevent story completion until all subtasks are done
This comprehensive approach has worked well for teams managing complex requirements across multiple sprints. The key is decoupling subtask sprint assignment from parent sprint assignment and using story points at the subtask level to track partial completion accurately.