views:

255

answers:

7

I have been using agile approaches (XP and Scrum) for my projects for several years with great results. But in all cases, all members of the dev team were committed 100% to the project.

Now I am faced with doing this when the team is not stable. For instance, one iteration there may be four people working, the next maybe only two or three.

I realize this makes it hard (or impossible) to estimate using the normal velocity approach since it will fluctuate to much and not be stable. What follows is that one cannot really expect to be able to release at the end of each iteration.

Maybe another approach is needed here. Just grab stuff from the backlog and just muddle through and release whenever it is possible. I really don't like that though...

Any thoughts?

A: 

Let the individual developer that will be working on the story estimate the effort required to complete the story. You can take into account historical variances in that developer's estimations, but the idea is that you can take their estimates and then figure out how many stories you'll be able to finish in that sprint.

Joel Martinez
+1  A: 

Maybe instead of agile approaches, you can slow things down with other iterative and incremental approaches. Instead of having iterations measured in weeks, having longer iterations (perhaps measured in months) would be better if you keep adding and dropping people from the team.

This doesn't mean that you still can't use some Agile techniques. I would still maintain your Backlogs and burn down charts, with the realization that instead of having a release every 2 weeks, you'll release every 6 weeks (~2 months). If you have new developers joining more experienced developers, use pair programming, assign the new developers to bug fixes, or assign the new developers to maintaining unit tests to help them learn the code base.

Thomas Owens
Ah, but agile is iterative and incremental, I take it you mean using something like RUP? Have used it, dont like it :-)I think it would be useful to keep releasing early and consistently (to solicit feedback etc), but it may not be possible to plan exactly _what_ will be included in the next release, only that there _will_ be a release ever other week.
Martin Wickman
Agile is iterative and incremental, as is RUP. You can take pieces of all of them and pick and choose. Think of it like a make-your-own-process.
Thomas Owens
+1  A: 

Velocity is only an estimation.

Naively, if you have a given velocity v with a team of 4 developers, then schedule your iteration with a velocity of (v/4)*number_of_developers

You can fudge this value if the members you are losing are particularly stronger or weaker than the average.

This is basically what PivotalTracker does with its team strength metric.

DanSingerman
I thought about that, but if you have a new developer (to the project), he will be slower than an existing developer simply because he doesn't know the code base. I don't think you can just say that every member of the team has the same velocity.
Thomas Owens
Agreed, which is why I think you need to fudge it a bit based on the individuals involved
DanSingerman
I don't think fudging it is the right answer. It's too imprecise.
Thomas Owens
Velocity is based on estimates. Iteration scheduling against velocity is based on estimates. It's all imprecise.
DanSingerman
+2  A: 

From the question I assume you have some developers (probably, 2) 100% commited to the project and some (another 2-3) only participate at a times.

One thing you can do is set different process for core developers who are 100% commited and everyone else. Use you normal agile process for core people and release their work at normal iteration cycle. For non-core people, do little planning and assume their (and your) estimates would be way of at a times. Ideally their changes should be isolated and merged into stable branch of code by core members, but not every project's architecture and team roles allow this.

The point is to separate and isolate source of chaos and leave the heart of a project and team unaffected.

Alex Lebedev
I like this approach. Still being able to be agile with the core. The other "unstable" team members' work is mostly considered bonus I guess. I think that they should only work to support the core team and maybe only on peripheral stories.
Martin Wickman
A: 

Don't forget that average velocity is largely used for lookahead release planning; the team is responsible for selecting in each iteration how many backlog items to take on (although knowing historical velocity can assist them).

If your team size (and hence velocity) is fluctuating from iteration to iteration, you can still do useful release planning by using average velocities over the past N sprints, assuming the team fluctuations will continue and hence their long-term average velocity will actually be stable.

Jon Moore
A: 

Your main problem here is that the team will find it hard to give predictable estimates and deliveries since the team is changing from sprint to sprint. This can also hurt the team commitment and continuous improvement.

This case might actually be well suited for a Kanban approach. Check out Henrik Knibergs introduction to Kanban for a quick overview.

Good luck!

mattek
Thanks for the response, and I agree. But I don't get how Kanban could help the team to give more predictable estimates although I'm sure it is helpful in other ways.
Martin Wickman
A: 

So, you have a project with a continually changing team size and your boss wants you to give him an accurate estimate of how long it will take? You can do this, as long as you keep in mind the difference between accurate and precise. Your precision will depend largely on the number of items and how granular (decomposed) each item is; the more items you have the more the Law of Large Numbers works for you, averaging out over- and underestimates.

Your accuracy is a function of confidence. Note that estimates aren't single-point values, they're a range with numbers with a percentage of confidence. For instance, a proper estimate wouldn't be "2 weeks" it would be "50% confidence of 2 weeks, 80% confidence of 4 weeks."

If I were the person assigned with the unenviable task of providing an estimate to completion for a project being managed as arbitrarily as in the original post, I'd try to figure out a range based upon the minimum number of folks assigned (e.g., "48 to 66 weeks given 2 developers [50% to 80% confident]"), and a range associated with the average number of folks assigned (e.g., "25 to 45 weeks with 5 developers [50% to 80% confident]"), and use the low figure from the average number along with the high figure from the minimum number (e.g., "25 to 66 weeks given anywhere from 2 to 5 developers [50% to 80% confident]"), and even then I'd put a disclaimer on it ("plus 10% for the lost time due to context switching").

Better yet, I'd explain exactly why this arrangement was, to be polite, sub-optimal, and why multi-tasking is a primary signpost on the road to project Hell.

As someone else suggested, changing the workflow from iteration-based to flow-based (Kanban) might well be a good strategy. With Kanban you handle changing project priorities by changing the priority of items in the backlog; once an item has been grabbed by the team it is generally finished (flows all of the way through the workflow, stakeholders aren't allowed to disrupt the team by screwing around with work-in-progress). I've used Kanban for sustained engineering projects and it worked very well. Re how it would help with estimates, the key to continuous flow is to try to have each work item be roughly the same size (1x, 2x, 3x, not 10x, 20x, 100x). You should track movement of items through the workflow by tracking dates of process state changes, e.g., Queue 1/15, Design 1/22, Dev 1/24, Test 2/4, Integrate 2/7, etc., and then generating a cumulative flow diagram regularly to evaluate the time-in-state durations over time. Working out how long the project should take given that you know the size of each item and the time through the workflow for items is a trivial computational exercise left to the reader. (The more interesting question is how to spot constraints... and then how to remove them. Hint: look for long times in states, because work piles up in front of constraints.)

John Clifford