Don’t Give Partial Credit

WRITTEN BY Andrew Fuqua

What do you do with stories that don’t finish before the end of the sprint? Do we get partial credit?

I’m asked that a lot. Everyone wants to know whether to split the story and what to do with the points. Don’t give partial credit for unfinished stories or make untestable splits.

Don’t Bother Splitting Unfinished, Untestable Stories

Move unfinished, untested stories to the next sprint, without splitting. What benefit would come from splitting?

Sometimes people tell me that in the future they will need to know what work was done in this sprint, so that’s why they split stories. I’ve never seen the need to do that. If that question does arise, your agile tool’s history will show what you need to know.

It’s too easy to make these lousy splits. Every user story must be a proper user story. Don’t get sloppy. Slitting a story into an unfinished and untestable portion is sloppy. It’s a bad habit that will begin to show up as poor stories in your product backlog. You have to be disciplined at being disciplined.

Don’t Give Partial Credit

Others tell me that they want the velocity to look right for this sprint, to take into account the work they did on the unfinished story. They want partial credit. Bad idea.

Once you’ve begun development, once you’ve done some design and dug into the detail, it’s difficult to correctly estimate a piece of a story relative to other stories that you haven’t started developing yet. For a longer explanation of this, see the post Don’t Estimate In Sprint Planning. It’s difficult to correctly estimate such work relative to the rest of the stories in your product backlog, those that you haven’t started working on. It’s especially hard if you are trying to estimate some poor split to an unfinished story, a piece that doesn’t meet your definition of done. Just don’t do it. Just move the whole story to the next sprint.

I do, however, recommend adjusting the estimate on the story downwards (never up) if the estimate of the remaining work is smaller than the original estimate. I care a great deal about being predictable, about conservative planning, and about not overstating my velocity. The problem with giving all the points in the next sprint (n+1) is that it makes the recent average velocity (usually over 3 sprints) be too high a month and a half later when this sprint (n) drops out of the average. A month and a half later no one will remember that we carried over all the points for some story into that next sprint. No one will realize that the velocity they are using to evaluate their release plan is abnormally high.

In Fact, Don’t Give Credit at All

Others tell me they want to get credit for the work done on the story.

I teach against the notion of “partial credit”. I teach against the notion of getting credit in general. There is no credit. It isn’t about getting credit. That’s the wrong way of thinking about velocity. Dangerous even.

Velocity is a tool to help us with release planning. If the team feels they need to get credit, there is dysfunctional behavior in the organization. Perhaps teams are being challenged to increase their velocity, or are reprimanded if their velocity dips, or are being compared against another team’s velocity. If the team feels they need to get credit, they will game the numbers and velocity will not be useful for its intended purpose.

Velocity is what it is. It’s not about credit.

A Better Plan: Finish Sprints Cleanly

In training, I make a big deal about the problem of unfinished stories. Whatever you do, however you handle them, unfinished stories are difficult to deal with and they mess with your velocity. There is no good solution other than finishing sprints cleanly.

Better than knowing the how to handle unfinished stories is to not have unfinished stories. Don’t start work you can’t finish in the sprint. Before starting any story, first see if the team agrees that it and everything else already started can be finished cleanly.

Stop starting and start finishing

That was coined by David Anderson, right? It means to focus on finishing stuff that is already started before starting new work. Scrum teams can learn a lot from David. Study his books on Agile Management and Kanban.

Each day, before starting work on another user story, the team should consider whether it can finish all other in-progress work and this additional story before the end of the sprint.

In the last half of a sprint, the team should start asking whether there is anything they need to pull out so that they can swarm and finish the other stuff cleanly. If it looks like multiple stories aren’t going to make it, sacrifice one or two stories, stop working on them now, split them appropriately (see below) or throw them out of the sprint, so that you can finish all the other stories cleanly.

Split Splitable Stories

There is a scenario in which I would split an unfinishable story, but you should do that before the last day of the sprint, both halves must meet the INVEST criteria, and the done half must fully meet the definition of done.

Sometimes this happens when the team has a story generally working and tested but is having trouble with some particular error scenario or some advanced usability issue. I’ll split it into a basic and advanced story, or a happy path and an error handling story. But I will always split such a story so that both parts meet the INVEST criteria. They must both be true User Stories. And the part that is done has to meet the definition of done and be accepted by the product owner.

In that case, I might split the points if the team can decide how to allocate the points. (But never such that the total is greater than the original.)

Conclusion

So there you have it. Any time you split a story, for whatever reason you split it, make sure each half is a proper user story, meeting the INVEST criteria. Don’t cause velocity inflation and risky release planning by increasing the total points on underestimated stories. Finish sprints cleanly. And just forget about trying to “get credit” for unfinished work.

leave a comment

Leave a comment

Your email address will not be published. Required fields are marked *

3 comments on “Don’t Give Partial Credit”

  1. George Dinwiddie

    Great post, Andrew! I agree completely that the point is to get things done, not get credit for work expended.

    In my experience, the problem usually derives from stories that are too big, too vague, or both. If you’ve got some “executable specifications” (i.e. acceptance scenarios) that are working and demonstrate a cohesive subset of the story, I’m fine with splitting the story along those lines. To do so, however, it’s important to define the executable specifications for the rest of the story, so you’re not continuing to fool yourself with a fuzzy concept of a story.

    In fact, these days I approach story splitting from that direction in the beginning. In “Three Amigos” meetings, I list the scenarios that need to pass in order to have confidence the story is working. Then it’s easy to split the story into small bundles of these scenarios. The happy-path scenario might be one story. A couple of alternate flows might be another. And the error scenarios might be a third, except for that really tough error scenario that requires lots of corrective action–that’s a fourth.

    Begin with the end in mind, and the subsequent work stays on track.

    Reply
    • Claire

      In my experience after 2 years of running in an agile environment rather successfully, we learned that it’s not so much about partial credit as much as it was about looking at the story and agreeing that the acceptance criteria has been met. In some cases, it’s possible to identify gaps or scope creep that allows us to create a new story and accept the current story as completed.

      QA sometimes has an issue with identifying a gap and not wanting to close a story due to that gap, however, we have clearly implemented a process that allow current story credit. From a human psychological perspective, enabling progress is great motivational factor.

      Reply
  2. Anthony Brown

    Great post Andrew. I had experience like this with a team. It caused a problem that we eventually go corrected with more understanding.

    Reply