Agile software development is really a family of methodologies for developing software. Among the different methods falling into these categories there are for example Extreme Programming, DSDM and Scrum. In the mid nineties many senior software developers began viewing the traditional heavy and predictive methodologies such as the waterfall model, or Rational Unified Process to be too stiff and fail to cope with changing requirements. Different models were required in situations where requirements change rapidly, and the agile development methods started emerging. The Agile Manifesto roughly outlines the definition of any agile development method. * Individuals and interactions over processes and tools * Working software over comprehensive documentation * Customer collaboration over contract negotiation * Responding to change over following a plan That is, while there is value in the items on the right, we value the items on the left more. Kent Beck, Mike Beedle, Arie van Bennekum, Alistair Cockburn, Ward Cunningham, Martin Fowler, James Grenning, Jim Highsmith, Andrew Hunt, Ron Jeffries, Jon Kern, Brian Marick, Robert C. Martin, Steve Mellor, Ken Schwaber, Jeff Sutherland, Dave Thomas © 2001, the above authors this declaration may be freely copied in any form, but only in its entirety through this notice. The points emphasized above make it clear that Agile development focuses more on dynamic collaboration both among developers, as well as between developers and clients. They acknowledge the widely known fact that getting a 100% requirements analysis is not only difficult, and time consuming, but requirements are too often subject to change over the lifespan of a project. What most agile methods share is an iterative cycle of making releasable software in short time periods, often with no real future plan, except for possibly what will be in the next version. A very defining feature of agile development is to produce software quickly, which has fully developed features, which are a subset of the final features. Agile methods are designed to be employed by colocated developers, and for small teams, since effective communication between them is paramount to it's success, and justifies lack of detailed long-term planning. All agile development methods frown upon distances between developers, and the most extreme methods reccomend developers even sharing a workstation, for optimum levels of communication between them. Agile developers theorize that the greater the threshold for information sharing between developers results in at best delays which can cost a medium size team thousands of dollars per minute, and at worst can cause developers to assume instead of asserting, which can cause bugs and cause hours or even days of work debugging later on in the project. Experience has shown that agile methods are very effective in projects with low criticality, with relatively few but experienced developers, and either high rate or odds of requirements change. Agile methods tend to be popular in the situated software segment.