Learning is a key aspect in every moment of life. How do we learn? We learn from our mistakes. If we face a situation the first time, we deal with it in a certain way and may take our own time dealing with it by even making mistakes. If we have to face it the second time and deal with it the same way, we can apply our experience and learning from our previous mistakes and face it faster than the first time. If we have to face it again and again, we learn again and again and improve each time and ultimately achieve effectiveness. Likewise, if we have to develop the same software application the second time, we will certainly be more productive and take less time than the first one. What makes us to be productive the second time is the learning experience that we apply. But, ‘developing the same application second time’ will never happen in Software industry. So, how can we make the application development highly productive the very first time itself? We can better achieve this by having several small cycles of iterative development and by applying the learning experience immediately in the next cycle. Agile practices advocate this practice of iterative learning, developing and improving the experience to achieve high productivity and produce the best result.
Nothing is new in agile practices; everything has been around for several years. Agile only distilled and brought things together. It is all about recognizing and responding to change, but in a faster, improved and effective way.
More on agile practices at: http://www.infoq.com/articles/learning_is_the_bottleneck