Monday, January 15, 2007

Waterfall or Agile? Neither

This is the debate of the century. Waterfall or agile? Everybody has an opinion, emotions run high on both sides of the line and those who don't have an opinion are confused. It looks like everyone must have an opinion to be respectable. OK, I want to be respectable too so here is my opinion.

The first and IMHO, most important point is that the debate makes it look like there are only two alternatives for the "right" software development methodology. If it's not waterfall, then it must be agile. If it's not agile, then it must be waterfall. I say "not so". There are more alternatives. For me it's not waterfall, nor agile. Or should I say "both"? The closest methodology to what I like (and try to do) is Iterative Development. Yes, many of you will say that iterative development is a fundamental component of agile development and they will be right. However, agile development also has several things that I don't like. So, I cannot honestly say that I support agile principles.

Let me say up-front that, in my mind, classical waterfall is completely out of the question. I think that this methodology is so defunct that there is no need for me to explain and justify this position. So, in regards the question "waterfall or agile?", one half of the answer is straight forward: surely not waterfall. But if not waterfall, then what? Well, for me it's not agile either.

Let's cover briefly the major principles of agile and see what I think about them. I will take the principles directly from the original Agile Manifesto:

Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.

This I like. At the end of the day, customer satisfaction is the ultimate goal. I also like the important principle of useful software. With regard to rapid and continuous, I like that too, but remember that it takes two to tango. Meaning, the customer needs to agree and work with us to accept our deliverable and rapidly test and provide feedback. You might be surprised, not all customers will want that.

Which brings me to the an important point. Agile experts agree that full customer cooperation with the project team is essential for the success of the agile methodology. This means that the customer must:

  • Thoroughly understand agile techniques.
  • Agree to work with the project team by the agile principles.
  • Do their part in the "deal".

The above requires significantly more involvement, commitment and resource allocation from the customer. So, not only you need all of the above from your own company, you need the customer to deliver too. Double challenge. My experience:

  • Rarely will the customer deliver on the above requirements.
  • Most companies that try to implement agile methodology fail to secure the customer's cooperation but still go ahead with the methodology. In this tango you dance alone and the results are accordingly.

Welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage.

I have a problem with this. Change is usually unavoidable in software projects, but welcome? No, I don't think so. This is engineer talk. Project managers call it Scope Creep. I am not saying that change must be blocked "at any price". I am saying that change has to be controlled carefully and allowed only under the right circumstances. Both the project team and the customer (again the customer) have to answer the following questions:

  • Is the change really necessary?
  • Is it necessary now?
  • What will be the benefit?
  • What will be the cost?

If the answers show that the change must happen, then so be it. But welcome? Changes are a necessary evil. Sorry, I am the old fashioned type.

Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.

I like that. It's a good technique and it works of you are disciplined enough. Agile is even more strict. It requires timeboxing - even better.

Business people and developers must work together daily throughout the project.

Absolutely. But I think this is true and critical in any methodology. Show me a methodology that will disagree. So, even though this is true, it's not unique to Agile.

Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.

There are two parts here:

  • Support the team members. Again, true but universal. Not unique to agile.
  • Trust them. Well, where I come from, we had a saying (crude translation): "Respect him and suspect him". As an experienced project manager, I like that better. Not that I think that team members are evil or anything. Just that they are human beings. And that includes me - the project manager - too, of course.

The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.

This one probably irks me most. Not because of what it says but because of what it does not say. What it does not say is: "we hate documentation". Yes, I know. We all hate documentation. More precisely, we hate to write the documents. I have never met a project team member that did not like (and actually appreciated) documentation if:

  • It was good quality
  • Other people wrote it

It's much easier and more fun to communicate verbally. But verbal communication has serious drawbacks. This is a significant issue that deserves its own post, so I will not go into detail. I will just note here: face-to-face conversation has no records (other then in people's minds) and, therefore, no memory. Again and again, experience shows us that there is no escaping documentation. The big trick is to cleverly decide what documentation, how much? how? etc. But there is no alternative to good documentation. Don't get me wrong, face-to-face conversation is a great and vital means of communication but, sorry, it cannot make documentation unnecessary.

Working software is the primary measure of progress.

I agree assuming the working software does what the customer wants.

Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.

OK, this is not really a guideline. It's more of a promise. I do not have enough statistics to make a determination if this has proven itself. I will be glad if someone can enlighten me on this.

Continuous attention to technical excellence and good design enhances agility.

Again, this is not unique to agile. All methodologies support this, even those that do not call it out specifically.

Simplicity--the art of maximizing the amount of work not done--is essential.

I like this. The KISS principle is a good principle.

The best architectures, requirements, and designs emerge from self-organizing teams.

Here again, I do not have enough insight to make a judgement. Let me know if you have any concrete info about this.

At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.

This is what the PMBOK calls Lessons Learned and is basic project management. It's good and again not unique to agile techniques.

So this is a brief summary on how I feel about agile development. I will sometime write about my own technique for which there is no formal name but I will characterize it as a combination of iterative and flexible waterfall.

Let me know what you think.


Technorati Tags: , , , , ,


Dave Nicolette said...

I came across a link to your blog on Glen Alleman's site, of which I'm a regular reader. IMO you make some good comments.

Is it the debate of the century? Maybe just the debate of the moment. At least, now that you have an opinion, you're respectable. Some of us are so full of opinions we're too respectable for our own good! ;-)

I agree classical waterfall is not much of an issue anymore except maybe in the largest and stodgiest of companies. Their stodginess makes them infertile ground for positive change anyway, so in a sense they're not players.

You say agile has some things you don't like, but based on your explanations it seems as if you actually agree with the principles. I say this because your follow-up arguments "against" actually amount to summaries of the true meaning of the agile principles in question.

It's quite true that to be successful with agile methods the customer's direct and knowledgeable involvement is critical. When that happens, the results can be extremely good. When it doesn't happen, IMO it's smarter to fall back to some other methodology rather than to try to do agile without the customer's involvement. There are many variations of the iterative waterfall (something along the lines of RUP, for instance) that may yield acceptable results when the customer can't or won't participate directly. The results may not be as good as could have been achieved with properly-implemented agile methods, but in that case we have to settle for results that are as good as prevailing circumstances permit. "Make-believe agile" won't get us to a second-best outcome, but "real RUP" just might, and that's still much better than the traditional alternative.

You say you have a problem with the idea of welcoming changes in requirements, including late in development. However, your follow-up explanation reads very much like the agilist's approach to managing scope creep. Maybe you don't disagree after all. Agile methods provide a rational and practical way to deal with scope creep and changing requirements, and it's entirely based on customer-defined value. Many other methods simply try to lock down documented requirements far in advance of the time when it's even possible to know the requirements in detail, or to discourage change by imposing draconian procedures for change control. For the types of projects to which agile methods apply, this is simply unrealistic. By the nature of those projects, the requirements are definitely going to change. Might as well adopt a methodology that handles change gracefully, then.

Your criticism of the preference for face-to-face communication may be more a matter of misunderstanding than real disagreement, as well. In most conventional methodologies, a written statement of requirements is all the developers have to go on when building the software. All too often, the documented requirements are incorrect, incomplete, contradictory, out of date, or subject to misinterpretation. Face-to-face communication avoids all those problems.

Agilists do not abhor documentation just because it's documentation. They insist that everything the project team creates must contribute to customer-defined value. Documentation that is desired by the customer meets that definition. Also, informal interim documentation that aids in design and development contributes to the project's goals, even if that documentation will never become a bona fide project deliverable.

You agree that working software is the measure of success, provided the software does what the customer wants. Given a proper understanding of the agile mindset, this is not even a question. The very definition of "working" is that the customer sees and uses the software and declares it does what they want it to do. We do not consider a piece of work "done" unless and until the customer approves it.

Regarding the statement, "The best architectures, requirements, and designs emerge from self-organizing teams," I might point out that this is not one of the four basic principles enumerated in the Agile Manifesto, although it is a statement commonly associated with agile thinking. Like you, I'm unconvinced that a direct cause-and-effect relationship has been established between self-organizing teams and good design. On a more general level, self-organizing teams tend to do better work than teams that are subject to a command-and-control management style. (See, for example, the book Peopleware by Lister and DeMarco, or any of the relevant material published by proponents of "lean" development). That is not a statement about design quality specifically, though.

If anything, anecdotal evidence suggests teams (whether self-organizing or not) don't create the "best" designs. Consider two of the most popular open source projects - Linux and Ruby on Rails. While both projects now have many contributors, and while the open source mode of work surely exemplifies the concept of the self-organizing team in action, both products were originally designed by single individuals. The coherence and consistency of their design philosophies and implementations derive from the fact they were conceived by individuals, not by committees, teams, or published reference architectures. It may be that to achieve the best possible design, we need to ask a single individual to do it. Once he/she has laid the groundwork, a self-organizing team (such as an open source project or an agile project team) may well be the most effective way to drive the product forward, but there's no proof that such a team could have arrived at an equally consistent and coherent design. Seems to me there's a fair chance we'd end up with a product reeking of design-by-committee.

While I think your disagreements with agile principles boil down to misunderstandings (based on the fact your explanations actually state the agile case rather than an argument against it), I do disagree with one aspect of your criticism on principle. At several points you mention that this or that is not "unique" to agile. I would go farther and say absolutely none of the ideas embodied in agile thinking is completely original or unique. The question is, "So what?" The reason agile methods work so well is that they comprise practices that many people have found useful over many projects. They are a compilation and synthesis of field-proven ideas and techniques, and not an attempt to create something totally new out of whole cloth. It is therefore not a valid criticism to say that any given idea is not "unique" to agile. I might ask, to which methodology are any of these ideas unique?

mosgot said...

Dave, thank you for the excellent and thoughtful comment. I dare say the comment is better than my own post :).

I think the various items you point out are all very good. It will not provide any value-add if I respond to all of them. I will just make some general comments.

Yes, there is some ambivalence in what I said. That is because there are indeed things that I like in agile techniques. My concerns always were with how people "in the field" interpreted them.

For example, the documentation issue. I agree that we need to generate only valuable documents. But all too often I find Agilists (or, maybe agile wannabes) That interpret it as: "cool, finally we don't need to write those !@!? docs". I really experienced that... Too often do I meet engineers who think: agile = easy life. For many, waterfall means rigid, hard, regimented, whereas agile is complete freedom. don't need to do anything except write code. I was trying to move the pendulum a bit back. Agile is (and should be) as demanding and rigorous as waterfall.

Regarding "welcome". The way you describe it - I have no problem. To me, it's the connotation. Welcome sounds positive, inviting. I don't feel that way about scope creep. Scope creep is not desirable, hence not welcome. My approach is that I prefer (if possible, of course) to lock the scope down and not change. If, instead of using the word "welcome", agile said something like "change should be expected and handled gracefully", I would feel much better. As I noted, I know that change is hard to avoid in a SW project and therefore it will be foolish to try to rigidly prevent it. This is one of the problems with waterfall - change is not tolarated. Team members (PMs) try to prevent it as hard as they can and fail. In summary, don't encourage change but be prepared to manage it wisely. To me this is a difference in mindset but maybe when it come down to the action in the field, there isn't much difference between the agile perspective and mine.

Finally, regarding your last comment, you are very right. I did not mean too imply there's anything wrong if agile uses well-known things. Just pointed that out for all the enthusiasts who think everything in agile is a conceptual breakthrough. But you are right. Nothing wrong with adopting things that work well. Very smart actually.

Thanks again for the very good comments.

Michael Craig said...

Hi there. Software development over documentation development any day!

What vs How