Over the past couple of projects, I have become increasingly interested in the differences between waterfall and agile development methods. I have used both methods, but for quite different scenarios. Usually I choose to use the waterfall approach for the first large iteration of the product release, then release enhancements in a quicker process similar to agile. Here is a breakdown of each:

Waterfall:
The waterfall approach is highly regimented and requires some sort of sign-off before proceeding to the next phase. In order to begin design phase, the requirements must be finished. Once design is complete, the coders and testers will each perform their responsibilities to ensure the software is complete and thoroughly designed. New requirements are met after the initial scope of requirements has been launched and the project has reached a reasonable level of stabilization.

Pros:
Plenty documentation to keep everyone on the same page, upfront design will save resources in the long run, disciplined approach to chaotic environment

Cons:
Difficult to work with constantly changing requirements, too much time perfecting each phase, extensive knowledge of product required when designing

Agile:
Instead of defining a set of requirements for the entire project at once, Agile focuses on iterations with the intention of launching usable software (without any bugs) every 1 to 4 weeks. An iteration is a project of its own, containing planning, requirements, design, coding, testing, and documentation. Face to face communication is also more important in agile than detailed documentation. If you are going to practice this method, it is suggested that you have all members of the team in a central area, as well as customers or customer representatives (Product Managers, etc).

Pros:
Constantly able to react to new requirements, problems can be resolved faster, usable software is the goal, increased level of trust for each member is required

Cons:
Conflicts with legacy data system requirements which require longer iterations, lack of structure, only works with senior level developers, scope creep

Depending on your project, one or both of these methods may work for you. It’s important to address how each phases of the project will be managed, so as long as the entire team understands the process, you are probably in good shape.