Agile is a methodology for handling changes in requirements midway through the project. This is achieved by focusing on developing the application piece by piece and getting feedback.
It is useful when
- There is uncertainty in what the final application should look like
- The market has changed during development and you need to respond (eg: competitor introduced a new feature that you need to match, or new govt regulations during development)
In traditional "phase" based processes, there is significant overhead to changing requirements. Lets say you are in the testing phase, and some new features are needed. Then you have to go back and redo many parts of the requirements and design and development phases.
The other problem is that if you build the whole application and only then show customers, when the feedback comes it will a) be too late to incorporate easily b) you will again have to do significant rework
Agile processes get around these by focusing on incremental development and rapid feedback.
The basic idea is to implement few of the features, then show it to your customers/users and get their feedback. Then take the learning and make changes to your project direction. Because the feedback comes early on, it is much easier to incorporate into the application.
You also have the option of changing the requirements more easily.
For example, if you decide from early feedback that you dont need feature C which is planned for later on, then you can just drop it. Since you haven't started any work on feature C, you haven't wasted any effort on this feature. This makes you more flexible in the direction you take.
Overall, the main point of agile processes is to give you flexibility and adaptability.