views:

1532

answers:

14

Hi,

I am working in an Agile environment and things have gone to the state where the client feels that they would prefer Waterfall due to the failures (thats what they think) of the current Agile scenario. The reason that made them think like this would be the immense amount of design level changes that happened during the end stages of the sprints which we (developers) could not complete within the time they specified.

As usual, we both were blaming each other. From our perspective, the changes said at the end were too many and design/code alterations were too much. Whereas from the client's perspective, they complain that we (developers) are not understanding the requirements fully and coming up with solutions that were 'not' what they intended in the requirement. (like they have asked us to draw a tiger, and we drew a cat).

So, the client feel (not us) that Agile process is not correct and they want to switch to a waterfall mode which IMHO would be disastrous. The simple reason being their satisfaction levels in a Agile mode itself were not enough, then how are they going to tolerate the output after spending so much time during the design phase of waterfall development?

Please give your suggestions.

+24  A: 

The agile development methodologies are particularly appropriate when you have unclear requirements and when you may need to make design changes at later stages in your project. Waterfall is a less appropriate approach in this case. The waterfall approach is appropriate for projects which are well understood and when the requirements are unlikely to change during the project's lifetime. It doesn't sound like that is the case here.

How long are your sprints? An alternative approach might be to decrease the sprint length - at least at the start of the project. Deliver new versions to the customer more often and discuss the changes with the customer. If you aren't doing what they want this will become apparent more quickly so less time will be wasted on implementing solutions that don't meet the customer's requirements.

Mark Byers
+1 to this - it sounds like you need to "fail faster" and the waterfall model is going to make you fail much more slowly
Paul Dixon
@Mark Byers: Each sprint's duration is 2 weeks and we have a mid-sprint review and a sprint demo for each of the sprints that we do. Life was good till 5 sprints. During the 6 and 7th sprint, these so-called numerous changes started pouring in which was impacting the already implemented features. More code rework and more modifications/ramifications. These eventually lead to/are leading to instability to the project and the doubt in delivering the project on-time.
Bragboy
@Bragboy: It appears that in recent sprints you have committed yourself to more than was possible. If you knew that the design changes were necessary then you should have taken this into account when estimating. Don't include more features in a sprint than you can deliver. If you weren't aware of the need for design changes until partway through the sprint then you will have to explain to the customer that your estimates were incorrect and you learned this during the implementation phase. Changing to waterfall would not help here - you would have even less knowledge when estimating.
Mark Byers
+14  A: 

I'm not sure what kind of shop you run, so it's hard for me to come up with good recommendations. I can offer two guiding principles though:

  1. If you have bad communication with the customer, no development methodology will save you.
  2. It's none of the diner's business how a chef organizes the kitchen, as long as the meal is tasty.
Ranieri
Then again, when the waiter comes sprinting to the table every 10 minutes with a message like: eeeerrr ... we're using cream now for the sauce to go with the ... errrr ... I think it's still turkey you're having, right? then perhaps the process between being seated and picking up the fork can use some improvement. The dialogue between client and kitchen is always important.
reinierpost
"Agile Chef"? Another celebrity cooking-contest program is born! ;)
Ranieri
+8  A: 

It sounds like you have serious project management and architecture/design issues, and it sounds like your communications have also broken down. Fundamentally I don't think changing your dev methodology is going to fix any of that, and is therefore the wrong thing to be doing (though it may restore some client confidence).

I would be especially concerned about moving towards waterfall since you are now choosing to essentially capture the requirements just once (which we know you have a problem with) with no capacity for input. That rigidity is good for inflexible delivery targets, but it's completely inappropriate here where you have changes all the time - that's agile!

  • Short term I'd step back and double check your requirements at this stage with them. Renegotiate and confirm your current state in relation to those.

  • Medium term, I'd open up more communications with the client - try and get them involved in a daily scrum for a while (until you restore confidence, then you can be more flexible).

  • Long term, you have to be worried about how your PM's and senior devs have managed to get you into this position. If the client is being unreasoanable that's one thing (but it's still up to the PM to manage that, so you're not absolved). It's not reasonable to complain about having too many changes, that just means you screwed up in determining requirements (which is a dialogue, not a monologue) or that you have to have more numerous, but probably shorter sprints.

Above all, I can't see moving towards waterfall is possibly correct. It doesn't fix anything directly and I can only see it exacerbating the problems you've already highlighted.

Caveat: I'm not really capable of a balanced view on waterfall since I've never seen it work effectively and imho it's just completely outdated for enterprise projects.

annakata
pourquoi downvote?
annakata
Like you said yourself, a biased reply, not even considering waterfall development even though effective waterfall development processes obviously happen all the time.Though I could guess not even the original poster wanted a fair assessment waterfall merits in a situation like this, instead wanting reaffirmations that sticking with agile is in the best interests of the client as well.
Nakedible
+37  A: 

First off - ask yourself are you really doing Agile? If you are then you should have already delivered a large portion of usable functionality to the client which satisfied their requirements in the earlier sprints. In theory, the "damage" should be limited to the final sprint where you discovered you needed large design changes. That being the case you should have proven your ability to deliver and now need a dialogue with the client to plan the changes now required.

However given your description I suspect you have fallen into the trap of just developing on a two week cycle without actually delivering into production each time and have a fixed end date in mind for the first proper release. If this is the case then you're really doing iterative waterfall without the requirements analysis/design up front - a bad place to be usually.

Full waterfall is not necessarily the answer (there's enough evidence to show what the problems are with it), but some amount of upfront planning and design is generally far preferable in practice to the "pure" Agile ethos of emergent architecture (which fits with a Lean approach actually). Big projects simply cannot hope to achieve a sensible stable architectural foundation if they just start hacking at code and hope it'll all come good some number of sprints down the line.

In addition to the above another common problem with "pure" Agile is client expectation management. Agile is sold as this wonderful thing that means the client can defer decisions, change their mind and add new requirements as they see fit. HOWEVER that doesn't mean the end date / budget / effort required remains fixed, but people always seem to miss that part.

Paolo
+7  A: 

Agile development does not save you from the burden of actually coming up with a design which both you and the customer understand similarily. Agile just makes it possible to come up with the design in smaller increments and not all at once. And, in the case of a difficult customer, coming up with a proper design takes time.

So, I would spend more effort in sitting down with the customer, with a whiteboard, going over what is it that they actually want. I don't think it really matters in this case if the development process is agile or waterfall.

Nakedible
+3  A: 

For me it sounds as if there was no "Big Plan[TM]" in the agile project. Using an agile process does not mean that there is no long term plan, it is more about to deal with the increasing uncertainty in the farer future. For example there should be a release plan with the planned features for all releases in the next 2 months (and a lesser detailed plan with features for the releases after that), so it is clear to the customer when to expect a feature, and when there is a possibility change requirements.

Also to me it seems that there was not (enough) customer involvement in the process. I know that this is a very problematic point, but it helps a lot if the current progress can be discussed with the customer at the end of each iteration. As @Mark Byers already wrote, the more feedback you can get from your customer the better you are.

Also try to not assign blame, as this keeps people to block. Try to use the inspect-and-adopt approach to get a better process instead.

Rudi
+3  A: 

It's not clear what sort of design changes you mean. Graphical design? User experience design? Code design?

In any event, the best solution is more, and earlier, discussions with the client. Jointly develop explicit, concrete examples that satisfy the client's requirements. You can turn these examples into regression tests to ensure that you continue to satisfy them.

Also, continue the discussions as you progress. Show your output as it is available--don't wait until near the end of the sprint. And work on the part most likely to generate problems first. Also look at ways to make it easier to change the things you're finding often change.

The point is to get the client more involved, even to the iteration of a design. Perhaps you'll want to have some discussions focused only on the design.

George Dinwiddie
+7  A: 

Agile or waterfall are just words. There are only things that work, and things that don't. Software development seems virtual to many people and they don't understand why it's hard to change a small thing they request.

Your customers should understand that building a software is just like building a house : when you have built all the foundations and walls, it's hard to change all the house final plan, and room design.

Some practices helps avoid this kind of problem : data modeling, data dictionary, data flow diagrams... the goal being to know every requirement in complete detail. Cutting your product in many independant blocks help starting coding while continuing designing or specifying other parts of your final product.

See Steve McConnell book : "Rapid Software Development : taming wild software schedule" for all the practices that work.

Jérôme Radix
+1 for "Agile or waterfall are just words." See my comment to [Dan's answer](http://stackoverflow.com/questions/3226711/giving-up-agile-switching-to-waterfall-is-this-right/3230772#3230772)
GreenMatt
Even in building a house the client want changes.... although here they can see that replacing cheap ceramic with marble will hit their wallet. Or adding another room will also take more time. It is easier for the client to understand this when they see it in front of them
aqwert
The sole voice of reason.
Rock and or Roll
+1  A: 

If the communication issue between the Team and the Customer is not fixed, the situation could be worse with waterfall, if the customer only sees the product once it is complete (tunnel effect).

You commented changes from sprints 6-7 started to cause rework of tasks achieved in earlier sprints. Those changes should have been detected earlier - during the Sprint Review.

If there is a misunderstanding in a feature description, and the Team does not implement what the customer is expecting, this should be detected no later than the Sprint where the feature is implemented, and ideally fixed in the current Sprint.

If the customer changed it's mind, the new ideas shall be added to the Product Backlog, prioritized and selected for a Sprint, as any other backlog item. This should not been deemed as rework.

Do you deliver the software to the customer after each sprint, or are you just demoing it ?

The origin of the miscommunication could be at the Sprint Planning: the Team should only commit on Backlog Item that are clearly defined. The definition of the items should comprises the acceptance criteria. Is the customer the Product Owner, and is it the Product Owner ?

philippe
+3  A: 

The reason that made them think like this would be the immense amount of design level changes that happened during the end stages of the sprints which we (developers) could not complete within the time they specified.

Scrum is in a way a "short waterfall", and you should be isolated from changing requirements for the sprint duration. It seems that this is not happening! Therefore, don't see you will gain anything from switching to traditional waterfall, but you should stick to freezing requirements for the sprint duration. Maybe your iterations are too long? (I assume you follow Scrum, since you mention sprints).

Talk to your clients and agree the following:

- Shorter iterations, up to 3 weeks max.
- No changes in requirements during the iteration. 
- Features are planned at the beginning of the iteration 
- Every iteration ends with deliverable: fully functional software with all features that are fully operational
- Iteration length does not change. Unfinished features are left for the next iteration (or maybe discarded if client changes his mind).
- Number of "feature points" you can deliver in a single iteration should be based on the team metric, not client insistence. This is your "capacity".
- Client decides what features (but not how many of them) are planned for the iteration 

Another thing you should ask yourself is why there are so many "design level changes" in your application. By now, you should have basic architecture and design in place. Maybe you should review the actual design and try to impose some design guidelines and implement some patterns. For example, in a typical enterprise web app, you will probably end up using something like DAO. When you add new features, you create new DAO, but basic architecture and design will not change.

It seems however, that you are not delivering what the client wants. In that case, it is of outermost importance to deliver working product to the client, so he could provide sensible feedback for the next iteration.

Regarding

"we (developers) could not complete within the time they specified."

The client should not be the one to specify the iteration time-frame. Iteration length should be always the same. The requirements that enter into the iteration should be obtain as a result of client prioritization, but the amount of requirements that is planned for the iteration should be based on the estimation that team performs and number of "points" you are able to deliver during iteration.

Dan
+1 for 'Scrum is in a way a "short waterfall"' - I keep wondering why there are holy wars about this when this sentence pretty much sums up my viewpoint.
GreenMatt
@Green Because this is wrong. QA should start with the iteration and should be an on going activity, not something just done at the end of an iteration. See [Iterative Development Gone Wrong - The Mini-Waterfall Anti-Pattern](http://community.ative.dk/blogs/ative/archive/2007/03/18/Iterative-Development-Gone-Wrong-_2D00_-The-Mini_2D00_Waterfall-Anti_2D00_Pattern.aspx) and the many other posts that you can find on this topic.
Pascal Thivent
@Pascal Thivent: If you're doing things well, then you are doing QA from the beginning in ANY engineering/development process, including a waterfall approach in software development.
GreenMatt
@Matt Oh? This is new to me then. AFAIK, Waterfall is a **sequential** process and the verification phase is done **after** the implementation. At least, this is how it is described by Winston Royce in the original paper. So, by definition, what you're describing can't be called Waterfall in my opinion. I'm not saying you can't do it, just saying this can't be called Waterfall (and that this is certainly not what people have in mind when using the term Waterfall). Hence the mini-waterfall anti-pattern.
Pascal Thivent
@Pascal: Firstly, I'm not trying to defend the waterfall method. My original comment was trying to say there's a lot of "shouting" that is unnecessary. AFAIK, there's no hard and fast definition of the waterfall method (Dr. Royce's paper does not use the term) and I've seen articles in which people talk about doing QA from the start of what seems a waterfall approach. However, <sigh> we seem headed into the type of fruitless back and forth that I'm complaining about, so I'll stop here.
GreenMatt
+3  A: 

Fire the client. Even if it is your fault for not understanding what they mean, waterfall would give them 1 chance to give you feedback instead of a chance at the end of each sprint. Some people/clients are literally so stupid that they are not worth working for. Fire them, or tell them that you're using Waterfall without actually switching.

Josh
Whoo! Fire them?! It is them who are giving us work and even if someone has to be fired, its me. :)
Bragboy
+1 for firing the clients:)
vodkhang
+2  A: 

Your client does not know about how to develop software, or how to manage the software development process. Don't expect the client to provide meaningful instruction on these matters. As a special case, the client does not really know what terms such as 'waterfall' and 'agile' mean; don't expect them to provide meaningful input on your development methodology. Moreover, the client will not really care about these details, as long as the requirements are met within the agreed budget and timeframe. Don't expect them to care, and don't confuse them with lots of inadequate builds and irrelevant information on your internal process.

Here is what the client does care about, and is trying to talk to you about (partly using your own technical jargon): their requirements, their disappointed expectations, and the way you communicate with them. On these matters, the client is the absolute authority. Interpret what they are saying as being about your relationship and the product, not as usable commentary on internal process. Don't cloud the water with your internal deadlines and processes, discuss progress and expectations and the relationship. (If they insist on talking about internals you can remap the terms: e.g. what they understand as being 'the next release' may be internally known as 'the next major release', or whatever).

It sounds to me like the client may want a higher threshold before they get asked for feedback or play with a bad build. It's worth verifying if this is true. If so, you should honor that - and still use agile methods internally if that is what your team feels is best. If they say "waterfall," you may be able to interpret that internally as meaning "we set a deadline for requirements, and then we don't allow more features to be added for a while." Discuss with the client whether it will suit them to have a requirements deadline followed by this sort of freeze.

Someone on your team needs to be the client advocate, and sit on top of the client's issues and fight for them. This advocate must not be sidelined, nor can they take the team's side against the client; they should be the proxy-boss. Then you can separate the internal process communication (team to advocate) from the external communication (advocate to client). The advocate can in some measure insulate the client from the chatter and the builds they don't appreciate, without artificially imposing a certain sort of management or scheduling on your internal process.

To clarify, I do not at all think that you should be secretive or distant with the client, but you should (A) listen to what the client is saying about the relationship and how you are communicating and honor that, (B) keep that separate from internal development process, which should be managed in whatever way will ultimately meet client's expectations.

Sasha
@Sasha: Thank you for your bold feedbacks.. We also feel the lack of that 'advocate' and in fact we discussed in the meeting we had yesterday. Thanks again for your inputs.
Bragboy
+1  A: 

Remote debugging of a development process is sufficiently difficult that I would hesitate to offer any opinion about what you should do. It seems to me noone outside your team can plausibly have enough information to make a very useful judgement about that.

A lesser jump to a conclusion would be to make a guess as to what went wrong. From your description, it sounds like early deliverables, which you thought were progress in the bank, ended up being majorly reworked.

One common cause of that is the late discovery/creation of 'all' requirements, things that are supposed to be true about everything in the scope of the project. These can be pretty fatal if taken seriously: something as simple as 'all dialog boxes must be resizable' is, for example, apparently beyond the capability of Microsoft to retrofit to Windows.

A classic account of this kind of failure (albeit in a non-agile project) can be found here

"Once they saw the product of the code we wrote, then they would say, 'Oh, we've got to change this. That isn't what I meant,'" said SAIC's Reynolds. "And that's when we started logging change request after change request after change request."

For example, according to SAIC engineers, after the eight teams had completed about 25 percent of the VCF, the FBI wanted a "page crumb" capability added to all the screens. Also known as "bread crumbs," a name inspired by the Hansel and Gretel fairy tale, this navigation device gives users a list of URLs identifying the path taken through the VCF to arrive at the current screen. This new capability not only added more complexity, the SAIC engineers said, but delayed development because completed threads had to be retrofitted with the new feature.

The key phrase there is 'all the screens'. In the face of changes of that nature, then, unless you have some pre-existing tool support you can just switch on (changing all background colours really should be trivial), you are in trouble. The progress you think you had made up to that point will have retroactively turned out to be illusory.

The only known approach to such issues is to get them right first time. If that fails, live with having them wrong.

soru
+1  A: 

Obvious problem here is communication with customer. If you really want to do agile you have to communicate with customer on daily basics. Only customer should be able to make decision. If you communicate with customer only during mid spring and at the end of the sprint it is natural that later on you will found problems in your application. Also features implemented in sprint has to be accepted and tested by customer. Until that features are not completed.

I'm writing this because I have similar problem on my current project but I know where we failed.

Ladislav Mrnka