Agile Development

There's plenty of information about Agile development elsewhere, so I will focus on what it means to me.

Why Agile?

At what point in a project do we have the greatest understanding of the domain, the users' real requirements and the solution? At the end.

At the start of the project we know little compared to what we will learn through the life of the project. In most projects, as each day passes, we learn more about the real requirements and the best way to satisfy the users' real goals. Agile development treats that learning as something that has business value. Agile development takes that continuous learning and feeds it back in to create a solution that is a better match to the real business problem.

Sounds good, but other industries manage to think ahead and do design up front. They don't go back and change things after they start building. Why should software be different?

In one way, software isn't different. Software development is all design. There is no manual construction phase. Here's why:

C2 Wiki Page on What is Software Design?

Jack Reeves: What is Software Design?

Jack Reeves: What Is Software Design: 13 Years Later

It's also tempting to say that software is different from other industries, such as construction, in that software is soft or malleable, so we can change it after we have built it. But if software development is actually all design, then we're not changing it during construction, only during design.