Individuals and interactions over processes and tools is the very first of the values of the Agile Manifesto. Tools, however, seem to be a big part of development on most Agile teams. When does a tool help and when does it hinder (Agile) software development?
Chris Woodell put together a list of Agile Tools for .NET and briefly described each tool. This list included tools such as NUnit, Nant, and NCover. Kirk Knoernschild, among many others, wrote a review of tools that support Agile practices and included many of the Java versions of tools such as JUnit, Ant, and CruiseControl (and others).
In both of those reviews there are tools that obviously fit in 'Agile' development, but many others that are just good for good software. What they both lacked were project management tools such as VersionOne, Rally, and Mingle. These tools, however, are purely targeted at Agile development teams, but are more controversial. Ben Hughes asked Are Automated Agile Tools Tactile Enough? And Ryan Martens (of Rally) and Ron Jeffries had a debate on the value (or lack-thereof) of planning tools.
There are several classes of tools used by us in the Agile community:
- Tools that are good for software development, regardless of development process. These are tools such as source control and bug tracking tools that don't necessarily make a team more or less 'Agile'.
- Tools that support Agile practices directly and are consistent with values and principles of the Manifesto. These are tools like xUnit and continuous integration servers.
- Tools that support Agile practices at a cost/trade-off against one or more principles of the Manifesto. These are tools like the planning tools that reduce human interaction and possibly tools that generate tests for you and discourage the thought process that goes with test-first development.
What tools have you found absolutely necessary for Agile development? Have you experienced tools that discourage good practice and/or communication? If so, what are the trade-offs to be made?