Agile software development refers to iterative development methods where requirements and solutions evolve through collaboration between cross-functional teams. Common agile methods include extreme programming, Scrum, and Crystal. Extreme programming focuses on testing, Scrum uses short sprints and daily meetings, and Crystal methods are tailored for different team sizes. The lean movement inspired agile practices but its separation of design and construction should be avoided. Adopting agile requires finding receptive teams and experienced guidance to try methods on projects and learn from mistakes in order to realize agile's advantages.