Neither one works in the real world. A combination of both Waterfall and Agile methods are required to not only effectively manage the development of complex software required of most applications today but also keep clients engaged throughout the development process to ensure that the final product meets their functional and operational requirements.
The Waterfall methodology was in fact never introduced as a workable model. It was presented as a "flawed" method in 1970 by W.W. Royce who argued that a pilot or prototype system be constructed first to identify risks and unknown behaviors before building the real system. However this approach never took hold and the Waterfall method ended up being defined as a series of sequential phases - requirements definition, design, construction, testing and maintenance - where each phase is required to be completed before starting the next phase. This classic predictive approach to software development works very well when all the requirements are known a priori and they don't change. Product release schedules and development costs can be accurately predicted. Unfortunately, this does not work in most cases because requirements almost always change and product release dates must keep up with market conditions.
Over the years several methodologies under the classification of Agile models have been proposed to address the shortcomings of the "predictive" Waterfall model. Some of the well known ones include:
- Rapid Application Development (RAD) or Prototyping
- Extreme Programming
- Function Driven Development (FDD)
- Test Driven Development (TDD)
- Rational Unified Process (RUP)
The best methodology, in my opinion, is a hybrid model that uses a combination of features from more than one model depending on the project requirements. This allows experienced project managers to choose and tailor aspects from multiple development models to best suit the project, the team and culture of the company.
Project management is a lot like playing chess. You need to know the end objective and an overall plan to achieve it. In other words, you require a strategy to get the project from the start to the finish line. In addition, you also need to have a set of short-term goals or tactics that are measurable and can be implemented relatively quickly that demonstrate results which indicate if any changes in tactics are required to successfully execute the overall strategy. The tactics employed to achieve the short-term goals are iterative in nature and are repeated multiple times to move the project iteratively to the finish line.
Several aspects of the Waterfall method are well suited to define "strategy" while many facets of Agile methods are appropriate for defining “tactics". I suggest that you use the Waterfall model to gather initial requirements, define user and system interfaces, and draft the foundation of the system. Use the Agile iterative model during construction to deliver parts of the system in pre-defined increments. This allows business stakeholders and clients to use the system and provide valuable feedback as the system is being developed. This can be incorporated into the system in subsequent iterations guaranteeing that the final product will not be outdated even before it is completed.