Exploratory Testing on Agile Projects Can Be a Good Fit
Disciplined exploratory testing is an effective way to gather and provide feedback to the team. Test-driven development has popularized the notion of writing all tests first on agile projects. Because exploratory testing is often done after the fact on software features or products, agilists often question its value. The test-driven approach can work well for software development, but front-loading all test development can narrow the classes of tests that can be run when software testing. Writing all tests first can also force testing efforts to be predictive, rather than adaptive.
An application is greater than the sum of its parts. For example, a seemingly insignificant event at the user interface layer may cause a catastrophic error at the code level. User interfaces are notoriously hard to test, and exploratory testers have a lot of experience dealing with them. A good complement to code-level testing is exploratory testing at the user interface (or any other testable interface).
User actions on deployed software are made in a social environment by an unpredictable, cognitive human. These variable actions are motivated by intuition and driven by tacit knowledge, and are difficult to repeat by others. Sometimes my job as an exploratory tester is to track down the idiosyncrasies of a particular user who has uncovered something the rest of us can't repeat. Often, a kind of chaos theory effect happens at the user interface, and this user has the right recipe to cause a unique failure. Repeating the failure accurately not only requires the right version of the source code and having the test system deployed in the same way, but knowing what a certain user does at a particular time. These actions are almost impossible to predict, and are just as difficult or impossible to automate up front.