Around 50 years ago, code was written without any plan and the architecture design was determined from many short-term decisions. This worked well for small systems, but as they grew it became harder to add new features and to fix bugs.
After some years, methodologies were introduced in software development to solve these issues. Methodologies are strict processes whose aim is to make software more efficient and predictable. Traditional methodologies (for instance Waterfall) are plan-driven and require a big effort at the beginning of the project in order to define requirements and architecture properly. As you may notice, these processes can be frustrating and not very open to changes.
Nowadays, technology and software applications evolve quickly – faster than we expected. Therefore, time-to-market is critical in determining whether a product will succeed or fail. Reaching the market before your competitors might actually mean victory. Thus, it is very important to have the right methodology that embraces and responds to the continuous changes we are experiencing. That is the main reason why, in 1975, practices based on iterative enhancements were introduced. In other words, let’s call it agility.