Skip to main content

Command Palette

Search for a command to run...

Your Scrum Carryover Problem Is Probably Not a Carryover Problem

Unfinished sprint stories are usually a symptom of deeper flow, sizing, WIP, or Definition of Done problems.

Updated
Your Scrum Carryover Problem Is Probably Not a Carryover Problem
A
I’m Abbas Afsharfarnia, an Engineering Manager and hands-on Technical Lead based in Germany. I write about backend architecture, engineering leadership, developer experience, and AI-assisted software delivery. My focus is practical: scaling systems, improving code quality, reducing legacy complexity, mentoring engineers, and building teams that deliver with ownership.

At the end of the sprint, the board often tells the real story.

A few tickets are done.
A few are in code review.
One is waiting for QA.
Another is stuck in product review.
Something is “basically done, just needs release.”

Should we just move these to the next sprint?

Most teams do exactly that.

They drag unfinished stories into the next sprint, maybe adjust the dates, maybe keep the same estimate, and continue as if nothing important happened.

But something important did happen.

The sprint gave you a signal. 🚦

💡
Carryover is rarely the real problem. It is usually a symptom of something deeper: story size, flow, handoffs, overcommitment, unclear Definition of Done, or too much work in progress.

The goal is not to become better at moving unfinished stories.

The goal is to make unfinished work:

  • rare

  • visible

  • small

  • intentionally handled


✅ First, be honest about “done”

A story is not done because the coding is done.

If a story is still in code review, QA, product review, release, or waiting for validation, it is not done unless your team’s Definition of Done clearly says otherwise.

  • “Almost done” is not done.

  • “Dev complete” is not done.

  • “Only QA left” is not done.

  • “Just waiting for release” is not done.

This may sound strict, but it matters.

A sprint should measure finished, usable work, not effort spent.

If an 8-point story is 90% done at the end of the sprint, the team completed 0 points for that story in that sprint.

Not 4.
Not 6.
Not “let’s count half.”

Zero.

Partial credit feels harmless, but it damages the signal. Velocity becomes fiction. Planning becomes optimistic. Retrospectives become polite storytelling.

If the work does not meet the Definition of Done, it is unfinished.


🔁 The worst habit: automatic carryover

The most dangerous version of carryover is the quiet one.

Nobody discusses the story.
Nobody asks why it did not finish.
Nobody checks whether it was too large.
Nobody challenges the original plan.

It just moves.

That is how teams normalize unfinished work.

At sprint end, every unfinished story should be reviewed intentionally.

For each item, ask:

  • Should we carry this over as one coherent story?

  • Should we split the done part from the remaining work?

  • Was this story too large from the beginning?

  • Do we need to re-estimate the remaining work?

  • What did this reveal about our process?

The point is not to blame anyone.

The point is to stop losing information.

Every unfinished story is a small retrospective waiting to happen.


🔍 Why stories usually roll over

In my experience, recurring carryover usually comes from a few predictable places.

1. Stories are too big

Many “stories” are actually small projects.

They include backend changes, frontend changes, review, QA, product validation, release work, tracking, documentation, edge cases, and maybe coordination with another team.

Then everyone is surprised when the story does not finish in one sprint.

A useful rule:

Most stories should be finishable in 2–3 days of active work.

Not because 2–3 days is magical.

Because small stories expose problems earlier. Large stories hide risk until the end.

Instead of slicing work like this:

  • Build booking API

  • Build booking UI

  • Test booking flow

Slice it around user-visible progress:

  • User can view available times

  • User can select a time and submit a booking

  • User receives a booking confirmation

  • Admin can see the booking in the dashboard

That kind of slicing gives the team more chances to finish real value.


2. Too much work starts too early

A board with many columns can create a false sense of progress.

  • Todo.

  • In Progress.

  • Code Review.

  • QA.

  • Product Review.

  • Release.

  • Done.

It looks organized.

But if many items are spread across those columns, the team may be starting too much and finishing too little.

That is not delivery.

That is inventory. 📦

  • Work sitting in review is inventory.

  • Work waiting for QA is inventory.

  • Work waiting for product validation is inventory.

  • Work waiting for release is inventory.

Inventory gets stale. Context disappears. Merge conflicts appear. Acceptance criteria get reinterpreted.

The team feels busy, but value is not landing.

A better daily question is not:

What am I working on?

It is:

Which item is closest to done, and how do we finish it today?


3. Planning is based on coding capacity, not completion capacity

This is one of the most common mistakes.

During sprint planning, teams often ask:

How much can we build?

The better question is:

How much can we finish end-to-end?

Those are very different questions.

A story does not only need implementation. It also needs review, testing, acceptance, and whatever your Definition of Done requires.

If review, QA, product validation, or release is constrained, that is the real capacity limit.

Ignoring that limit does not make the team faster. It just creates more unfinished work.

If 25–30% of work usually rolls over, the answer is not a motivational speech about commitment.

The answer is simple:

Plan less until completion stabilizes.

Overcommitting is not ambition. It is bad forecasting.

A team that finishes 70% of planned work every sprint is not more ambitious than a team that plans realistically and finishes consistently.

It is just generating noise.


4. The Definition of Done is unclear

Many teams use the word “done” without agreeing what it means.

Does done mean merged? QA passed? Accepted by product? Released to production? Production-ready behind a feature flag?

There is no universal answer. But there must be a team answer.

A useful Definition of Done might include:

  • code is complete

  • code review is complete

  • tests are added and passing

  • QA is complete

  • product acceptance is complete

  • deployment or agreed release state is complete

  • documentation, tracking, and feature flags are handled where relevant

The exact list depends on the team.

But ambiguity is expensive.

If “done” means one thing to engineering, another thing to QA, and another thing to product, unfinished work will keep piling up at the edges.


5. The team optimizes for starting, not finishing

Near the end of the sprint, many teams still behave like a group of individuals.

One developer starts a new story. Another waits for review. QA is overloaded. Product has three items to check. The board is full of nearly finished work.

This is where the team needs to swarm. 🐝

At some point, the question should stop being:

What is my task?

And become:

What can we finish together?

That may mean reviewers prioritize reviews over new coding. Engineers help reproduce QA issues. Product reviews happen earlier. Someone pairs on the oldest blocked item.

This is not less efficient.

It is often the fastest path to actual delivery.

Starting more work while existing work is stuck is usually just a way to look busy.


🧭 A better carryover policy

If a team has recurring carryover, I would start with a simple working agreement.

At the end of the sprint:

  1. Every unfinished story is reviewed one by one.

  2. If it does not meet the Definition of Done, it is unfinished.

  3. Unfinished stories get 0 completed points in that sprint.

  4. No story is moved automatically.

  5. Each unfinished story is either intentionally carried over, split, or reworked before the next sprint starts.

  6. Carryover is made visible and discussed in the retrospective.

If the story is almost done and still one coherent item, carry it over intentionally.

Mark it as carryover. Do not count its points in the previous sprint. Discuss it during next sprint planning.

If the story contains a truly finished part and a remaining part, split it.

But be careful: the finished part must be independently valuable and meet the Definition of Done. Otherwise, it is not finished. It is just a comforting explanation.

If the story was too large from the beginning, do not carry the oversized story as-is.

Split it before the next sprint starts.


🛠️ The practical fix

I would not start with a big process transformation.

I would start with four changes.

1. Make stories smaller

Most stories should be finishable in 2–3 days of active work.

Any story likely to span most of the sprint should be split before the sprint starts.

2. Define Done clearly

Decide whether done means deployed to production, production-ready behind a feature flag, or something else.

But decide.

3. Limit work in progress

Especially in:

  • In Progress

  • Code Review

  • QA

Scrum teams can still use Kanban flow practices. There is no law against being practical.

4. Plan from historical completion, not optimism

Look at what the team actually finished in previous sprints.

Include review, QA, product availability, release constraints, meetings, support work, vacations, and interruptions.

If a team usually rolls over 25–30% of the sprint, reduce planned scope until completion becomes stable.

That may feel uncomfortable.

Good.

The discomfort is the old process telling you the truth.


⚠️ Anti-patterns to avoid

A few habits make carryover worse:

  • moving unfinished stories automatically

  • keeping giant stories alive across multiple sprints

  • giving partial points for incomplete work

  • starting new work while review or QA is overloaded

  • treating “code complete” as done

  • changing Scrum ceremonies while keeping old batching and handoff behavior

That last one is common.

Some teams adopt Scrum meetings but keep waterfall-style behavior inside the sprint.

That is not agility.

That is waterfall in two-week costumes.


🎯 The point

Carryover is not always bad.

Real things happen. Dependencies appear. Production incidents interrupt the sprint. A story reveals hidden complexity. A product decision changes.

That is normal.

But if carryover is common, predictable, and treated as routine, the team should stop asking how to move unfinished stories more efficiently.

Ask why so many stories are unfinished in the first place.

A sprint should be planned around finishing small, end-to-end valuable stories.

Not around starting many stories and hoping they somehow reach Done before the calendar runs out

Engineering Leadership Notes

Part 1 of 1

Practical notes on engineering leadership, team flow, delivery habits, planning, code quality, and building software teams that finish valuable work.

More from this blog

E

Engineering Notes by Abbas Afsharfarnia

2 posts

Abbas Code is a practical engineering blog about backend architecture, engineering leadership, developer experience, and AI-assisted software delivery.

I share lessons from building SaaS platforms, modernizing legacy systems, improving engineering quality, leading teams, and applying AI tools to real-world software development.