Agile development process promotes development iterations, teamwork, collaboration, and process adaptability throughout the life-cycle of the project.
Agile chooses to do things in small increments with minimal planning, rather than long-term planning. Iterations are short time frames, which typically lasts from four to eight weeks. Each iteration are worked on by a team through a full software development cycle, including planning, requirements analysis, design, coding, unit testing and acceptance testing when a working product is demonstrated to client. This helps to minimize the overall risk, and allows the project to adapt to changes more quickly. Documentation is produced as per the client’s requirements. An iteration may not add enough functionality to warrant releasing the product to market, but the goal is to have an available release (with minimal bugs) at the end of each iteration. Multiple iterations may be required to release a product or new features.
Team composition in an agile project is usually cross-functional and self-organizing without consideration for any existing corporate hierarchy or the corporate roles of team members. Team members normally take responsibility for tasks that deliver the functionality of an iteration. They decide for themselves how they will execute during iteration.
Agile methods emphasize direct communication over written documents. Most agile teams are located in a single open office to facilitate such communication. Team size is typically small (3-5 people) to help make team communication and team collaboration easier. Larger development efforts may be delivered by multiple teams working toward a common goal or different parts of an effort. This may also require a coordination of priorities across teams.
No matter what development disciplines are required, each agile team will contain a project Manage (customer representative). This person is appointed by the development company to act on their behalf and makes a personal commitment to being available for developers to answer mid-iteration problem-domain questions. At the end of each iteration, client and the project Manager review progress and re-evaluate priorities with a view to optimizing the return on investment and ensuring alignment with customer needs and company goals.
Most agile methodologies include a routine and formal daily direct communication among team members. In a brief session, team members report to each other what they did yesterday, what they intend to do today, and what their roadblocks are. This standing direct communication prevents problems being hidden.
Agile methods emphasize working software as the primary measure of progress. Combined with the preference for direct communication, agile methods usually produce less written documentation than other methods. In an agile project, documentation and other project artifacts all rank equally with working product. Clients are encouraged to prioritize them with other iteration outcomes based exclusively on business value perceived at the beginning of the iteration.
Specific tools and techniques such as continuous integration, automated or Unit test, pair programming, test driven development, design patterns, domain-driven design, code refactoring and other techniques are often used to improve quality and enhance project agility.