It is very difficult to deliver high-quality software (i.e., with very few bugs) in a reasonable time period. Indeed, it is not unusual on medium to large projects to spend as much time fixing bugs as delivering new features. One of the most challenging issues in software development is keeping pace with changing customer requirements. Agile development was born from the idea that software development needs to be quick on its feet, responding to changing customer requirements without compromising delivery schedules or quality. It was founded on the principle of embracing change rather than fighting it. Some of the fundamental principles of Agile development include frequent customer interaction, frequent releases, writing tests before code, nightly builds with automated testing, and not implementing more than you know the customer needs. Yet there is a surging debate about whether Agile works and when it works. This paper investigates when Agile development methods may work and the relative advantages of different parts of the methodology.