Software development is empirical, hence you need processes and practices that allow the team to adapt to circumstances, and effectively work with Software development and its empirical nature. To this end, Agile shifts the focus from heavy planning and repeatability to focus on demonstrating results and adapting to changes.

That’s not to say we should stop planning. We still need to plan—and understand variations from the plans—but plans are not to be set in stone; they are meant to be flexible.

Agile emphasizes empirical process control. This is the idea behind inspect and adapt. Many Agile practices are all about this intent, such as: Scrum’s sprint retrospectives, Lean’s kaizen, and XP’s weekly iterations and short releases. These practices are about looking back and adapting: constantly recalibrating, improving, and doing course control.