tags:

views:

181

answers:

6

From wikipedia:

During each “sprint”, typically a two to four week period (with the length being decided by the team), the team creates a potentially shippable product increment (for example, working and tested software). The set of features that go into a sprint come from the product “backlog,” which is a prioritized set of high level requirements of work to be done. Which backlog items go into the sprint is determined during the sprint planning meeting. During this meeting, the Product Owner informs the team of the items in the product backlog that he or she wants completed. The team then determines how much of this they can commit to complete during the next sprint. During a sprint, no one is allowed to change the sprint backlog, which means that the requirements are frozen for that sprint. After a sprint is completed, the team demonstrates the use of the software.

I was reading this and two questions immediately popped into my head:

1)If a sprint is only a couple of weeks, decided in a single meeting, how can you accurately plan what can be achieved? High-level tasks can't be estimated accurately in my experience, and can easily double what seems reasonable. As a developer, I hate being pushed into committing what I can deliver in the next month based on a set of customer requirements, this goes against everything I know about generating reliable estimates rather than having to roughly estimate and then double it!

2)Since the requirements are supposed to be locked and a deliverable product available at the end, what happens when something does take twice as long? What if this feature is only 1/2 done at the end of the sprint?

The wiki article goes on to talk about Sprint planning, where things are broken down into much smaller tasks for estimation (<1 day) but this is after the Sprint features are already planned and the release agreed, isn't it? kind of like a salesman promising something without consulting the developers.

BTW:

Although the word is not an acronym, some companies implementing the process have been known to spell it with capital letters as SCRUM. This may be due to one of Ken Schwaber’s early papers, which capitalized SCRUM in the title.

+2  A: 
  1. You are supposed to use the velocity to plan the next sprint. The velocity neatly handles the fact that your estimates are wrong, but they are consistently wrong. Also note that stories are supposed to be short, I'd say maximum 2-3 days. Stories that are bigger than that should be broken down into smaller stories.

  2. If one story is not completed as planned, then your velocity goes down and you wont be able to take on as much work in the next iteration.

Martin Wickman
+1  A: 

When we did SCRUM in an earlier project, we first agreed on a rough sprint plan including high-level features (stories), then refined the plan by breaking each of these down to groups of concrete tasks of preferably 1 days max length, estimating each task. After this we often found out that the original plan was overcommitted to some extent (typically because we didn't take into account that developing a story includes unit testing, code review and documentation too), so we adjusted it accordingly. Btw we used "estimation poker": each member chose a card with a number on it (work hours/days) and everyone showed his card to the count of 3. If the numbers differed a lot, we briefly discussed why, and then had a new round until we reached near consensus.

Note also that estimation is very domain and technology dependent. In that project, we understood both fairly well, and we were building a new app from scratch, so our estimations were fairly accurate. In my current project we are working with legacy code, in a domain we don't quite understand yet, so our estimates are often wildly out of range.

As the project rolls on, estimates are gradually getting better (related to the fact that more and more risks and tricky issues are being resolved, and the team's domain expertise grows), so the velocity of the team can actually grow over time.

Péter Török
+1  A: 

In answer to #2, if a feature isn't done at the end of the sprint, you don't deliver it. You may be able to deliver part of it, and if you can do so in a useful fashion, do so. But if you can't deliver it this sprint, remove it, and deliver it in the next sprint.

In answer to #1, there are numerous ways to try to improve the accuracy of your estimates. You might use function-point analysis or just a simple exercise where the entire project team takes the list of tasks separately and comes up with their own estimates for each task, then reviews each task and shares their estimates, and discusses the reasons why (for instance) Bob's estimate for this task is 8h and Tina's is 16h. The team figures out who is right (hopefully) or comes to consensus, and uses that as the estimate.

Over time, you'll come to learn which of your estimates tend to be overly optimistic, and which are overly pessimistic, and thereby improve your ability to estimate your own tasks.

The burn-down chart can really help you here. It is an early warning system for the whole project team, to let you all know when one or more people are falling behind. Then the team can reorganize to help make the sprint commitment if necessary, or cancel the sprint due to unforeseen circumstances, and kick off a new sprint with their improved understanding of the problem space.

Finally, you might consider that statistics are on your side. If you overestimate 10% of the tasks, and underestimate 10% of the tasks, you'll probably be OK.

Jim Kiley
But my point is it's inherently impossible to give analytic estimates of high-level tasks based on stories, without breaking them down to a development level. Sure, you get a feel for it, but my client isn't happy when I tell him all my computer _science_ training boils down to educated guesstimates with a fudge factor thrown in to cover my back! until you break it down, you can't spot problems on the technical side.
John
I agree -- it is impossible to give analytic estimates of high-level tasks. That's why, on the projects I've worked on, we've tried to break the tasks down to chunks of no more than 16 hours -- preferably more like 4 hours.
Jim Kiley
@John: Estimates are, well, _estimates_. They are by their very nature wrong (they wouldn't be estimates otherwise). But they are mostly consistent, and as long as your team estimates the same way in each iteration meeting (and the team is stable), you should be able to plan ahead using velocity. I recommend "ideal days" as points to start with.
Martin Wickman
A: 

It's actually quite simple: You priorize the Tasks and if you see that you don't have enough time then the low-priority tasks simply get dropped or moved into the next sprint.

The Project Owner decides what he wants and sets the priorities and you develop following that order. You should have a useable product at the end of the sprint, not the fully-featured product.

dbemerlin
That's not what wikipedia says... in my understanding at least it say the sprint is locked once agreed?
John
It's locked in the sense that noone is allowed to change the order or add to the backlog, it is still ok to drop things from the end of the backlog if your time runs out. Just make sure to drop from the end as those items should have the lowest priority.
dbemerlin
Gotta go -1, sorry. But when you sign up for the sprint you are making a commitment to deliver ALL of the stories. If that means working 60 hours then that is what you do and then you take that into account in your retro and then in your next sprint planning.
DancesWithBamboo
Thats wrong, Scrum does not support overworked developers. If you have to work 60 hours then your developers will only work 20 hours a week in the next sprint which would be pointless. Scrum tries to create a constant high productivity. Of course everyone will try to reach the sprint goal but if the burndown shows that your velocity is too low then you have to reconsider this goal, forcing 60h weeks won't help. Sometimes the delay can't be prevented because the developer needs information from a third party before he can finish a task, if they need too much time then working more is useless.
dbemerlin
@dbemerlin: You missed the point. Its not forced work; its following through with commitment. If the team over-commits, it is their responsibility to do what it takes to deliver on time. Of course they will only do that until they figure out what the right balance is to get their workload in the "sweet spot". Also, the team can't drop stories, only the PO can do that as he owns the backlog.
DancesWithBamboo
I have to agree with those who say you didn't get the process: With Scrum, you do commit to a fixed set of user stories and then that's what you're supposed to deliver. If you undercommit it's the team's responsibility to tell the PO and add more work to the sprint, if they overcommit it's the team's responsibility to see to it that they a) still deliver on time or b) tell the PO and figure out what to do to make it a successful sprint (e.g. drop a story or drop certain requirements of a story). The commitment still stands, although it is flexible.
Anne Schuessler
A: 

in answer to #1, I'm not sure I agree with some built in assumptions in the question. In my experience, Agile (including Scrum) is not about time estimates. The whole idea is to move away from that and instead move to a system where you have a known velocity and specific sprint times. For instance, you release every 2 weeks (a good sprint time) with some new code. You see how many story points (not time units, but story points) you get done over a sprint, and then another, and after you've done a few sprints you know your rough velocity (ie, how many story points you can do on average per sprint).

The idea is that the customer gets continuous updates to the application as each sprint is finished and can see constant progress. They know which items are scheduled to come in future sprints but they are aware that if something slips (because of an incorrect difficulty rating, ie. the story point estimation, or an outside problem) it will instead come in the next sprint and everything else will be moved out a little.

So its not about developing the software based on some seemingly arbitrary estimation. Instead, its about planning what functionality or features you want and assigning difficulty (story points) to those features (relative to the other features) and working through them to determine a velocity. Only then can rough estimates be obtained. Once the average velocity is known, we can make some rough guesses about time frames. However, even these should be considered rough approximations because again, its not about time, its about constant feature releases. Clearly, this mindset must exists with EVERYONE on the team, not just the engineers.

Here is a link (wikipedia) that goes into it a bit more.

Anyway, I hope this helps you, good luck!

Marshall Alsup
+1  A: 

The wiki article goes on to talk about Sprint planning, where things are broken down into much smaller tasks for estimation (<1 day) but this is after the Sprint features are already planned and the release agreed, isn't it?

Wrong, they are done in the same meeting. The sprint stories are not agreed upon until everyone leaves the sprint planning meeting. Whatever questions you need to ask the PO to enable your commitment to the stories; you do before or in the SP meeting

Since the requirements are supposed to be locked and a deliverable product available at the end, what happens when something does take twice as long? What if this feature is only 1/2 done at the end of the sprint

The functional objective of the story is locked, not the implementation details. The details come out in conversation during the sprint. Any details considered to large to be contained in the current sprint scope are put back on the Backlog for later prioritization. Remember, you are building incremental products here. Its like peeling an onion. The story must be satisfied and the code must be working at the end of the sprint. That doesn't mean the whole feature is entirely complete and releasable to a user.

If a sprint is only a couple of weeks, decided in a single meeting, how can you accurately plan what can be achieved? High-level tasks can't be estimated accurately in my experience, and can easily double what seems reasonable. As a developer, I hate being pushed into committing what I can deliver in the next month based on a set of customer requirements, this goes against everything I know about generating reliable estimates rather than having to roughly estimate and then double it!

You are correct here, you can't estimate accurately. Scrum embraces this fact and uses velocity, trending, averaging, and gut-feel to get close. If you don't come to grips with forgetting about accurate hour increment measurements you won't ever feel comfortable with scrum.

DancesWithBamboo