Agile is about Embracing Change
Requirements change.
The software changes.
The market changes.
Agile methods embrace change. We run projects with the assumption that things will change. Rather than trying to control everyting about the project, we seek to adapt to change.
Communicate
The first key to agile projects is communications. Communications with the customer to set short term and long term expectaionts, and communications within the group to maintain velocity.
Deliver
The next key is to deliver. In agile projects the idea is to deliver changes quickly and in small batches to allow progress and correctness to be validated continously. Agile projects grow more organically with customers and developers contributing ideas and corrections all along the way.
Experiment
Rather than building a house of cards in the form of a big design specification, an agile project has a roadmap and starts in the generally right direction. All along the way course corrections are not only allowed but required to ensure the best route to the final destination. Just as an airplane auto-pilot is constantly adjusting the plane's course, an agile project constantly adjusts the requirements and approach to the problem.
Learn
An agile project relies on learning more about the problem and the software constantly. Programmers never know the problem as well when they start as when they finish. An agile project embraces this type of change also. By defering decisions and designing for change an agile project can reap the rewards of that increased understanding while still building the first iteration of the project rather than having to wait for later revisions. This approach also produces software that is not as rigid, and which makes fewer assumptions about the domain than traditional methods.
Project Repository
To further communication within a project all artifacts relating to the project are stored in the project repository, which can be accessed from the web. This allows all parties to freely share information, ask questions, and guide the project.
Continous Integration
A practice that supports agile projects is the use of continous integration systems. These systems run the full set of tests for a project after each change to the software is made during development. This dicipline ensures that when a change has a negative impoact on existing code it is detected immediately. These systems also provide project wide visibility into the progress of the project. By reporting all status relative to the completed test cases, and using test cases to specify the system features, an agile project always knows where it is making progress and where more work is needed. Rather than writing textual documents, the test cases expressed in a psudo english can bridge the gap between development and customers.