BA Playbook 07
The Story Has Been Carried Over for Four Sprints
How to find out what is actually stopping a story from getting done.
Surya · August 8, 2026 · 8 min read · 6 practices
For Business Analysts investigating a story that keeps carrying over, Scrum Masters and delivery leads triaging sprint carry-over, Product Owners deciding whether to re-scope a stuck story and Anyone who's said "it's almost done" three sprints in a row.
Sprint 1: carried over.
Sprint 2: carried over.
Sprint 3: carried over.
Monday morning.
Sprint 4.
And there it is again.
ABC-142.
Same title.
Same story points.
Same slightly uncomfortable feeling when somebody asks:
“What’s left on this one?”
Someone says:
“It’s almost done.”
Which is interesting.
Because it was almost done three weeks ago too.
At this point, I wouldn’t ask:
“How do we finish this story?”
I’d ask:
“Why has this story survived four sprints?”
Because a story that keeps carrying over is usually telling you something.
The mistake is treating the carry-over itself as the problem.
Let’s open the ticket.
First, stop calling it “almost done”
ABC-142 says:
Status: In Progress
The latest comment says:
“Development almost complete. Pending final validation.”
Sounds reasonable.
But “almost done” is not particularly useful.
So ask:
What exactly is unfinished?
Not:
“How much is left?”
Not:
“What percentage is complete?”
Actually name the remaining thing.
We ask the developer.
Turns out:
- UI is finished.
- Backend changes are finished.
- API integration is finished.
- Unit testing is finished.
So development isn’t really the problem.
QA is waiting.
Okay.
Now we have somewhere to look.
The story is not blocked by everything
This is a useful distinction.
A story can look stuck as one big object.
But usually only one part is actually stuck.
ABC-142 has been sitting in “In Progress” for weeks.
That makes it feel like the whole story is unfinished.
It isn’t.
Most of it is done.
The remaining issue is:
QA cannot complete one test scenario.
Much better.
Now ask:
Why?
QA says the expected behaviour is unclear
The scenario is simple.
An upstream service normally returns customer risk data.
But sometimes the service returns no record.
QA asks:
“What should happen when no risk record is returned?”
The acceptance criteria say:
System should handle the response appropriately.
There’s that word.
Appropriately.
Development interpreted that as:
Continue processing.
QA interpreted it as:
Stop processing and show an error.
The business hasn’t confirmed either.
So now we know something important.
ABC-142 is not really waiting for QA.
QA is waiting for a requirement.
So we check the requirement
Maybe the answer is already somewhere.
We look through the ticket.
Description.
Nothing.
Acceptance criteria.
Nothing.
Linked Confluence page.
Nothing.
Then we reach the comments.
Comment #38:
“Need business confirmation on expected behaviour when no risk record is returned.”
Posted 13 days ago.
No answer.
There it is.
Four sprints of carry-over.
And the actual blocker is one unanswered question sitting inside a Jira comment.
The story wasn’t blocked by development.
It wasn’t really blocked by QA either.
It was blocked by a decision nobody had made visible.
This is why carry-over is useful information
It’s tempting to treat carry-over as a planning problem.
Maybe estimation was bad.
Maybe the team took too much work.
Maybe velocity is falling.
Sometimes that is exactly what happened.
But repeated carry-over deserves a different question.
Not:
Why are we slow?
Ask:
What kind of unfinished work keeps surviving the sprint boundary?
Because “unfinished” can mean very different things.
There are at least six kinds of unfinished
When I see a story repeatedly carrying over, I try to classify the blocker.
1. Technical unfinished
There is genuinely more implementation work.
Code is incomplete.
Integration is incomplete.
A technical problem has not been solved.
Straightforward.
2. Requirement unfinished
The team does not actually know what the system should do.
Maybe:
- acceptance criteria are unclear
- an exception wasn’t defined
- a rule is missing
- two stakeholders interpret the requirement differently
The code may be waiting for understanding.
3. Dependency unfinished
Your team is done with its part.
But you are waiting for:
- another team
- an API
- infrastructure
- test environment
- vendor
- reference data
- approval
The story is technically “in progress,” but the work remaining sits somewhere else.
4. Testing unfinished
Development may be complete.
But behaviour hasn’t been proven.
Maybe:
- test data is missing
- QA environment is broken
- test cases are unclear
- defects remain
- business validation hasn’t happened
Different problem.
Different owner.
5. Scope unfinished
This one is sneaky.
Every time somebody touches the story, something else gets added.
“While we’re here, can we also…”
Then:
“This edge case should probably be included.”
Then:
“We should support another market too.”
The story is not finishing because the finish line keeps moving.
6. Decision unfinished
Someone needs to choose.
Option A or B.
Approve or reject.
Include or exclude.
Fail or continue.
But no one has clearly made the decision.
This is what happened to ABC-142.
And it’s incredibly common.
If a story keeps coming back, this is the first thing I’d try to identify.

Back to ABC-142
Now that we know the blocker, the next step becomes obvious.
Instead of saying:
“Still pending QA.”
we update the story:
Blocker
Expected behaviour is undefined when the upstream Risk Service returns no customer record.
Decision required
Should the transaction:
A. Continue processing without risk data?
or
B. Stop processing and display an error?
Decision owner
Risk Operations
Impact
QA cannot complete Scenario AC-07 until expected behaviour is confirmed.
Owner
Business Analyst
Now the problem is visible.
That alone is an improvement.
A vague red status has become a specific decision.
Then ask whether this should still be one story
There is another question worth asking after multiple carry-overs:
Is this actually still one coherent piece of work?
Imagine ABC-142 contains:
- new UI
- backend service
- API integration
- data migration
- reporting change
- audit logging
- five market-specific rules
And six of those things are finished.
At some point, keeping everything inside one story stops helping.
Maybe completed scope can be separated.
Maybe the unfinished part deserves its own ticket.
Maybe the original story was simply too large.
The point isn’t to split stories just to improve metrics.
The question is:
Does keeping all of this together still help us understand and deliver the work?
If not, restructure it.
Check whether the story changed while people were building it
Now look at the history.
What did ABC-142 look like in Sprint 1?
What does it look like now?
Maybe acceptance criteria were added during Sprint 2.
Another market was added in Sprint 3.
An exception appeared during QA.
A reporting change was added last week.
This is useful because sometimes a story hasn’t “taken four sprints.”
Four different versions of the story have taken four sprints.
That is a different problem.
Look at:
- description history
- acceptance-criteria changes
- newly added scope
- comments containing decisions
- linked defects
- new dependencies
If the requirement keeps changing after implementation starts, call that out.
Don’t hide it inside the carry-over number.
Ask whether QA found a defect or a missing requirement
This distinction matters.
Suppose QA says:
“The system doesn’t show a warning when the upstream response is empty.”
Was a warning required?
If yes:
Defect.
The implementation failed to meet an agreed requirement.
If nobody had ever decided what should happen:
Requirement gap.
Those should not be treated as the same thing.
Otherwise teams end up logging defects against behaviour nobody actually specified.
And that creates a strange cycle:
The cycle
Name the real problem.
Find the owner of the blocker
“Waiting for business” is not ownership.
“Blocked by another team” is not ownership.
“Pending clarification” is not ownership.
Ask:
Who is the person responsible for getting the next answer or action?
Not necessarily the person who must make the decision.
For ABC-142:
Risk Operations owns the decision.
But the BA might own getting that decision.
That means:
- Decision owner
- Risk Operations
- Next-action owner
- BA
- Next action
- Arrange decision with Risk Operations
- Due
- Tuesday
Now something can move.
The five-minute carry-over test
The next time a story arrives in another sprint, ask these five questions.
1. What exactly is unfinished?
Be specific.
Not:
“Testing.”
Instead:
“QA cannot complete AC-07 because expected empty-response behaviour is undefined.”
2. Why is it unfinished?
Find the type of blocker.
Technical?
Requirement?
Dependency?
Testing?
Scope?
Decision?
3. Who or what are we waiting for?
Name it.
Person.
Team.
System.
Environment.
Decision.
4. Can the completed part be separated?
Maybe yes.
Maybe no.
But ask.
Keeping finished work trapped inside one enormous story may not help anyone.
5. What is the next concrete action?
Not:
“Follow up.”
Something real.
“Risk Operations to confirm fail-vs-continue behaviour by Tuesday.”
Now you can actually manage it.
What happened to ABC-142?
Risk Operations eventually confirms:
If no customer risk record is returned, processing must stop and the transaction should enter Manual Review.
Good.
Now we update the requirement.
Business Rule
Transactions without an available customer risk record must not proceed automatically.
Acceptance Criterion
Given no customer risk record is returned
When transaction validation runs
Then processing stops
And the transaction enters Manual Review status.
QA tests it.
Passes.
ABC-142 closes.
The development work wasn’t the thing that took four sprints.
The unanswered behaviour did.
That distinction matters.
A story can be green and still be stuck
This is another trap.
Teams often use Jira status as shorthand for health.
To Do.
In Progress.
Testing.
Done.
But the status doesn’t tell you whether understanding is moving.
A story can sit in “In Progress” while absolutely nothing useful happens for ten days.
So when something carries over repeatedly, ignore the status for a minute.
Ask:
What changed on this story during the last sprint?
Was a decision made?
Was a blocker removed?
Was a dependency delivered?
Was something tested?
Was scope clarified?
If the answer is basically nothing, moving it into another sprint will not magically change that.
Don’t automatically blame estimation
Sometimes the team simply underestimated the work.
Of course.
But repeated carry-over can also be a symptom of:
- vague requirements
- hidden dependencies
- delayed decisions
- scope creep
- poor story splitting
- missing test data
- environment issues
- unclear ownership
If you treat every carry-over as “bad estimation,” you may spend hours adjusting story points while the real blocker sits untouched.
That’s why diagnosis comes first.
The thing being carried from sprint to sprint usually isn't the story.
It's an unanswered question.
Next time a story appears in its third or fourth sprint, don't immediately move it again. Open it. Ask what is actually unfinished. Ask why. Ask who owns that answer.
Take this with you
Stuck Story Diagnostic
STUCK STORY DIAGNOSTIC Story: Sprint carry-over count: What is actually unfinished? Root cause: [ ] Technical [ ] Requirement [ ] Dependency [ ] Testing [ ] Scope [ ] Decision [ ] Other What are we waiting for? Decision / blocker owner: Next-action owner: What needs to happen next? Can completed scope be split or released separately? Next concrete action: Due date: What would make this story genuinely Done?
Get new playbooks first.