I was recently asked to comment on someone's presentation on the differences between "Agile" and "Waterfall", especially when one should choose one over the other.
Here are some things that I came up with:
Waterfall has been considered an obsolete life cycle for a long time now by experts and experienced professionals. Alistair Cockburn has a nice summary article at Crosstalk including a reference to a conference report from the first 1968 conference on software engineering where even then, people are bagging on the waterfall approach, though I don't believe it was named that yet. A more well known article also exists by Craig Larman and Victor Basili.
Be careful about saying that Waterfall is more disciplined. The waterfall model is simple and structured but the "discipline" is in following prescribed steps as opposed to "discipline" in thinking. The second kind of discipline is by far the more important.
Fixed scope isn't sufficient to decide to use Waterfall. You essentially want close to zero risk which would include fixed scope, well-known technology, well-known capabilities, and limited competitive pressure. The other models (iterative, incremental, agile) guarantee higher cost in exchange for better risk management. If none of the risks eventuate, waterfall is cheaper. In his 1970 paper, Royce's argument was that when systems get big, that's not the bet you want to take.
An unavailable product manager and/or segregated teams do not lend to Waterfall. One would instead expect an iterative and/or incremental model to manage the risk of integration and validation problems. By definition with an unavailable product manager and/or segregated teams, it's not really Agile.
There are many sources of iteration. Misunderstandings about the technology, mistakes by the team, change in market place due to competitive pressure.
Set-based Concurrent Engineering (SBCE) is a sequential, non-serial, non-iterative life cycle. SBCE is a sequential parallel approach which doesn't iterate but instead explores multiple options and weeds them out according to a preset timeline. Development does start before all the requirements are known though because the solution space is being explored at the same time as the problem space is being explored. Everything starts high level and vague and successively refines together.
Agile principles I would suggest as a refinement of the values (borrowed and modified from XP):
- Open, honest communication
- Rapid, concrete feedback
- Prefer and create simplicity
- Courage to play to win
- Respect and develop people
- Reflect and improve forever
Triggers for when to use Agile (any one could trigger):
- There's an advantage to get something partial out now rather than everything later
- Not familiar with technology - want to reduce risk
- Want to engage and develop staff
- Competitive pressure for adaptation and faster delivery
It will be difficult to be effective if you have unskilled, untrained employees though in this case a more disciplined Agile approach, specifically XP should be preferred. See
Ralph Johnson's experience. Agile creates more pressure than Waterfall to develop competence and experience. Thinking about the long-term performance of the organisation, you should prefer this. I would say that XP provides an explicit path for teams to respond to that pressure.
Co-location is not a factor to choose Agile; it's a requirement for it. However, that doesn't mean you need co-location to be effective. Open Source teams are not typically co-located. Toyota's product development approach does not require co-location (though I think they're preferring it now). If you don't have co-location, you need to compensate... but you can also flip it around and say co-location is compensating for a lack of discipline in other things. I'm okay with either interpretation. The important thing is understanding the trade-offs. You can be effective with so-called
Distributed Agile.