Agile software development refers to a group of methodologies that promote frequent inspection and adaptation, teamwork and self-organization, rapid delivery of high-quality software, and alignment with customer needs. Common agile practices include test-driven development, database refactoring, working in priority order, agile planning, and agile model-driven development. While agile aims to provide working software frequently and customer interaction daily, critics argue it lacks structure, documentation, and design and requires too much cultural change to adopt.