Agile software development is a set of software development methods in which requirements and solutions evolve through collaboration between self-organizing, cross-functional teams. The agile philosophy promotes adaptive planning, evolutionary development, early delivery, continuous improvement, and encourages rapid and flexible response to change. Agile methods break tasks into small increments with minimal planning and do not directly involve long-term planning. Iterations are short time frames involving a cross-functional team working in all functions: planning, requirements analysis, design, coding, unit testing, and acceptance testing. Working software is the primary measure of progress.