Wikipedia defines agile software development as a group of software development methods based on iterative and incremental development, where requirements and solutions evolve through collaboration between self-organizing, cross-functional teams.
The Agile Manifesto introduced the term agile in 2001.
Manifesto for Agile Software Development
We are uncovering better ways of developing software by doing it and helping others do it.
Through this work we have come to value:
Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan
That is, while there is value in the items on the right, we value the items on the left more.
Kent Beck, Mike Beedle, Arie van Bennekum, Alistair Cockburn, Ward Cunningham, Martin Fowler, James Grenning, Jim Highsmith, Andrew Hunt, Ron Jeffries, Jon Kern, Brian Marick, Robert C. Martin, Steve Mellor, Ken Schwaber, Jeff Sutherland, Dave Thomas.
© 2001, the above authors, this declaration may be freely copied in any form, but only in its entirety through this notice.
We need to focus on delivering a working copy of the software as early as possible without spending much time on processes and comprehensive documentation, have more customer collaboration, get customer feedback and add more features incrementally as per demand. Frequent releases in short development cycles enable us to introduce checkpoints at which new customer requirements can be adopted and thus better responding to change than following a predefined fixed flow with no options to introduce changes in between as in the waterfall model. You can find the principles behind agile manifesto @ http://agilemanifesto.org/principles.html.
Agile software development is not a fixed set of steps you can follow and achieve success. There are different agile methods such a Scrum and Extreme Programming (XP). Some people use a combination of both; for instance, Scrum method with some of the XP practices. However if you are a beginner, it is better not to try out combinations; start with one method and as you gain more experience add more best practices from other methods applicable. Another better approach is to take the help of an experienced agile coach and he can guide you in the initial phases until things are going good for you.
The Wikipedia page describes “Extreme Programming” as a software development methodology intended to improve software quality and responsiveness to changing customer requirements. Extreme programming advocates frequent "releases" in short development cycles, which is intended to improve productivity and introduce checkpoints at which new customer requirements can be adopted. Other elements of Extreme Programming include: programming in pairs or doing extensive code review, unit testing of all code, avoiding programming of features until they are actually needed, a flat management structure, simplicity and clarity in code, expecting changes in the customer's requirements and frequent communication with the customer and among programmers.
Like XP, scrum is also an iterative agile software development that can incorporate requirement changes from customer. Scrum uses smaller iterative units of development called Sprint. Sprint starts with a planning meeting, continued by development activities and then ended by a review meeting. In the planning meeting, the tasks for the sprint are identified and estimated commitments are made. In the review meeting, referred to as the sprint review-and-retrospective meeting, the progress is reviewed and lessons for the next sprint are identified. Sprint duration is fixed before the sprint, usually ranging from 1 week to 1 month. Although two weeks is the most commonly used duration, the best sprint duration for a project varies from project to project. In my current project, we are having a 3 week sprint. Three important roles in a Scrum are Scrum Master, the development team and the product owner. Scrum Master is the enforcer of the rules of Scrum, often chairs key meetings, and challenges the team to improve. The Product Owner represents the stakeholders and is the voice of the customer, and is accountable for ensuring that the team delivers value to the business.
I have been using waterfall model in the beginning of my career and then saw a transition towards scrum. In my first organization, we were not following scrum and was following a modified version of the waterfall model. Unlike most waterfall model projects, our releases were short, but we use to do the analysis, attend analysis calls, prepare requirements document, get approvals, do design, prepare design documents, get approvals, do the development, do some basic unit testing, and give the product to the testing team. The testing team will prepare a test document with test cases, executes them and then raise request for fixing defects. Once we fix the bugs, they will test again and pass the product to the UAT (user acceptance testing) team who test it at their test environment first and then promote the code to a production like environment and test it again there. Finally if everything is fine, the code is promoted to production. Note that there was an extra emphasis on testing as it was a banking application and even a small mistake can be critical.
In my second organization, we were using a modified Scrum development model. We had a Scrum team, scrum master and daily standups, but no time bound sprints. We used to take up one feature at a time based on priority and worked on them. Scrum mater used to assign the features to a person or a group within the scrum team and decide on a deadline together with the developer. In my third organization, we are agile. We follow scrum with scrum master, sprint, planning, retrospective etc. As I said before, we follow a three week sprint as we feel that is the right for our project.
This was just an intro to agile, scrum and XP. I will try to write detailed notes on these later; anyway you should find lot of books and materials available online. But the best learning will be to be part of a team that follows agile for development activities. Remember the quote, “Experience is the best teacher”.