views:

381

answers:

7

IF the client asks me for a estimated time for completion for the whole project can this be given using Scrum?

Using for instance the (dreaded) waterfall methodology I will have a technical spec to use to give a half decent estimation.

+2  A: 

Yes, you can (and do) estimate Scrum projects. [Note "Scrum" is an English word, not an acronym or abbereviation. It should not be in all-capitals.]

You estimate a Scrum project this way.

  1. Write down the backlog.

  2. Break the backlog into sprints.

  3. Prioritize the sprints from most valuable to least valuable.

  4. Provide this prioritized list of sprints to the customer.

They are free to stop work at any time, since each sprint is useful and the first sprint is the most useful and important part of the system.

That's the estimate. It's theirs to manage.

S.Lott
For an estimate _for the whole project_, you do not even need to prioritize anything. Just estimate/calculate the points for each item on the backlog, then calculate sum(points)/velocity.
ammoQ
@ammoQ: "Whole Project" is usually impossible to define. If you could define it, the waterfall would actually work. Since you can't define it, you resort to Agile methods. The Buyers will struggle with where to draw the line in the backlog of sprints. Indeed, the struggle so much that they eventually ask you to define "whole" for them. (Which is absurd, but they often can't decide on how much they want.)
S.Lott
I wouldn't bother assigning backlog items to sprint, I'd prioritize them only. And actually, I wonder how you do step 2 (without estimates and without the velocity).
Pascal Thivent
@Pascal Thivent: Decomposing a sprint -- in advance -- essentially *is* the estimating. It doesn't require a deep technical specification do this, however. Further, the velocity of delivery is never known in advance, so the initial estimate is always wrong. Nothing can be done about that.
S.Lott
I get your point but I believe that the content of your sprints will be inaccurate so you'll have to postpone items from one sprint to another and to cascade this shift (which is very close to *plan the work, work the plan* of waterfall). I think this is waste and useless.
Pascal Thivent
@Pascal Thivent: I was under the impression that one of the points behind and Agile method is permitting shifts from sprint to sprint. After all, the priorities change during the project. And our ability to predict the future is generally quite weak. Are you saying that Scrum should not be flexible and responsive to change and learning?
S.Lott
Absolutely not. I'm just saying that putting all items into sprints upfront is waste and useless. You should do that just in time. With Scrum, this occurs during the first half of the Sprint Planning Meeting. And BTW, the team should pick up items, not someone else.
Pascal Thivent
@Pascal Thivent: Agreed. In the current question, however, someone is asking for an overview, and they're asking "now", not "just in time". Under the constraint of this question, one has to imagine a potential future with some potential sprints and a potential velocity of delivery. I'm not sure that there's an alternative that doesn't involve precognition or magic.
S.Lott
I agree on the *potential velocity* part, not on the rest. Just use the potential velocity to give an approximative number of sprints (= total amount of work in points / velocity). Assigning items to sprints doesn't give you more information and doesn't help more, it just gives a false impression of control à la waterfall. That's why I think it's useless work (and bad), which is my point :)
Pascal Thivent
@Pascal Thivent: assigning items to sprints forces the customer to prioritize. That is the point of the exercise -- inform the customer as to the consequences of their prioritization. Without the sprints, it's a "waterfall"-style massive requirements document, removing any sense of Agility. With sprints, it becomes an Agile exercise in deciding what comes first and what does not come first.
S.Lott
No, you do **not** need to prioritize to give a project duration estimation, you need to estimate the product backlog items and the velocity (this would be required to assign items to sprint BTW). Then, you can prioritize items **without** assigning them to sprints. Just add an "importance" field to your items in the backlog which is what Scrum advocates. There is nothing in the literature that says you need to assign items to sprint to prioritize. This is a misconception. The theory just says that items must be prioritized before a planning meeting so the team can pick up the most important.
Pascal Thivent
@Pascal Thivent: My experience is that if you do not assign things to sprints as part of prioritizing, the stakeholders don't understand the backlog, the sprints or the priorities. My experience is that these things must be very tangible and specific to be useful. Smarter people may be able to work at a higher level of abstract. I haven't found many people who can separate backlog from sprint from deliverable now matter how many times you repeat that it *can* be done. I haven't seen it done, and I can't see the point in trying to be abstract. Make sprints and prioritize.
S.Lott
I gave you the point: doing it the Scrum way to avoid useless work and rework (which is pure muda i.e. waste). But let's just say we have different point of views.
Pascal Thivent
@Pascal Thivent: Your view seems to involve knowing things that are unknowable at the beginning of a project. Once these things are known, you're approach is the only good way to manage the ongoing effort. But on day 1, these magical "velocity" and "estimates" can't be created without starting from somewhere. I provide an approach to get started when nothing is known.
S.Lott
Well, I never said that I was following this approach. I just said that assigning items to sprint was involving the **same** magic that you are referring to (roughly estimating the size of items and what can be done in one sprint) but that this was useless and a source of rework. But you don't seem to agree on that. Fine. I'll live with it.
Pascal Thivent
Hey I enjoy the back-and-forth guys, interesting discussion!
Mathias
A: 

Absolutely, in scrum you fix cost and time. Then you let the features vary. So you can tell the customer it will be done on XX/XX/XXXX at a cost of $YYY.YY. It is up to them to then prioritize the features they want to ensure the most important ones get done under those constraints.

DancesWithBamboo
+3  A: 

For a given budget you know how much iterations can be done. The Product Owner should then prioritize the work to get the most value of the product backlog. This is how Agile works, fixed time and team size with variable scope (Agile is about scope management). And once the team velocity is known, you can forecast how much work (in points) can be done (# of sprints x velocity = size of the work that can be achieved).

Often, customer don't get it and wants "everything they think they need at a given time" (i.e. fixed scope). In this situation, you end up doing some kind of upfront analysis to brake down everything into small enough items to estimate them. Once this work has been done, you can forecast how much sprints you'll need by guessing on the velocity (# of sprints = total size / velocity). This is a very common situation for people with a waterfall background and will often lead to inaccurate end date (fixed scope and team size with variable time) because you can't really guess the velocity and the start of a project is the worst moment to do estimates.

In both cases, you'll need the velocity. The problem is that the velocity is actually 1) unknown before the team start to work and 2) will vary over time.

To solve 1), you could estimate guess the velocity as discussed in the second situation but this isn't very "Agile". Ideally, you should instead get the team start working to measure the actual velocity (which will be likely inaccurate during early iterations). An intermediary scenario is to give a first very rough estimate and to come back to the customer after a few iterations with a more precise one, once you've gathered more knowledge about the project and reduce the uncertainty.

To solve 2), I track measured velocity over time and use the highest and lowest velocity and the average velocity of the last 3 sprints as work hypothesis. This allows me to do optimistic, pessimistic and realistic forecasts (respectively).

Pascal Thivent
A: 

Yes and No. I believe that Scrum is a great approach in getting the owner involved in the planning of the sprints.

So in the case of estimation, it would be difficult to say "we'll get the project done in 30 days". Instead, the owner will have an expectation on what will get done say in the first and second given week, and a perception of what will get done in 30 days.

In my opinion, this is more valuable than giving an estimate of 30 days and then being lucky, or way off the mark.

Also, you'll have a WAY better estimation of what will be done in the near future. Another great thing about Scrum is that you can tailor your deployment to possible alter or remove items to have a more usable product after 30 days, than potentially something completely unusable using waterfall.

Mark Kadlec
A: 

It depends on what you want to predict.

You can promise that a n-week sprint takes exactly n weeks and m sprints take n*m weeks. Therefore schedule estimation is easy. Cost/effort estimation is also easy, given a certain team size and project duration. What you cannot reliably promise is what features eventually get delivered and what don't.

There are four main control variables for a project: scope, cost/effort, schedule, quality. You can choose which variables are the drivers (i.e. fixed) for your project and which are not. You cannot have them all as drivers at the same time at least one variable needs to be kept free to allow for balancing the project.

With traditional waterfall you have fixed scope (the spec) and usually a fixed schedule (target date). You can balance the project by increasing cost/effort (e.g. adding more people, working overtime) or taking shortcuts in quality. These balancing factors do not behave linearly and you get problems in other areas if you push them too far.

With agile including Scrum you have fixed schedule (iterations or sprints) and fixed quality level (definition of done). Cost/effort is proportional to how many people you have in the team. Scope is the main balancing factor. It has the nice property of behaving quite linearly: increases or decreases in scope do not cause hugely non-linear changes in the other drivers. The key to success is feature prioritization to get the maximum value out of the scope you can deliver.

laalto
99% of the time we write the spec etc hand it to the client to read and sign then they ask the question. When will I have my application done by? (31/12/2009). without knowing what's totally involved it would be hard to predict the completion date. Unless we write the whole sprint backlog at the start before the first sprint. this in-turn would more or less end up the functional / technical spec
Antony Delaney
A: 

As Steve McConnell says in Software Estimation, whenever you need to provide an estimate:

  1. Count
  2. If you can't count, then compute
  3. If you can't compute, then judge

"Expert judging" or reckoning is a last resource. Try counting real things and/or referring to historical data to compute a meaningful figure.

This is applicable regardless of the method you use, be it Scrum or whatever else.

CesarGon
A: 

Here you can find a short but handsome information on how to estimate and plan with Scrum

Doro