I come across this question a number of times. In year 2001, 17 minds come up together with these 4 core values.
- Individuals and Interactions Over Process and Tools
- Working Software Over Comprehensive Documentation
- Customer Collaboration Over Contract Negotiation
- Responding to Change Over Following A Plan
It must be noted that they did not out rightly reject the values for the items in the right, but they gave more emphasis and value to the items on left. These values are immutable and can not be altered.
In addition to that they come up with 12 core principles:
1. Early and continuous delivery of valuable software as the highest priority
2. Welcoming changing requirements, even late in the development
3. Frequent delivery of software with a 2 weeks to a 8 weeks cycle, with emphasis on shorter cycle
4. Daily interaction of business folks and software developers
5. Projects with motivated individuals and trusting them, giving them freedom
6. Face-to-face conversation as the best form of communication.
7. Working Software as the measurement of progress
8. Sustain development at a constant pace
9. Regular attention to technical excellence and good design
10. Simplicity – maximizing art of work not done
11. Self Organizing teams deliver the best
12. Retrospection and adjustments at regular intervals
Along with that, we have seen a plethora of methods and practices such as Scrum, XP, Kanban, DSDM, Lean and so on.
Some of them are called Lightweight approaches or frameworks or methods. And some as Full/Heavyweight Approaches.
Now, if you take Scrum course, it comes with many practices or principles internally. So also XP.
If you are coming from a development background, you will immediately realize what a framework means. A Struts or Springs of Log4J framework, does not ask you rigidly follow a practice. They are quite open ended, you can configure the XML files the way to want to, change the main servlet class and so on.
In similar fashion, Scrum or XP are not prescriptive at all. They have certain practices or principles – like Pair Programming is an XP principle.
Okay. But then when people say Agile is a Framework, Scrum/XP/Lean are also framework – what actually does it mean? Well, again, if you come from a development background, let us say you developed a UI using the Spring framework (which is again on top of MVC). Now some other team wants to use it, but will modify according to its new. Now, your code/design/architecture becomes a framework for them to work on!
But, when you learn on it in the beginning, it creates a certain confusion – framework, with framework, within another framework? To have a better understanding: I say – “Agile is a Philosophy”. It is a way of thinking about software development. It is a way of your daily software development life or life cycle – by applying those 4 core values and 12 principles. Scrum, XP etc. can be considered to frameworks under the Philosophy called “Agile”.
To make it more personal – let us consider Hinduism. In Hinduism, we consider Buddha as one of the 10 Avatars or incarnations, in the Dashavatara (in Sanskrit). But, Buddhism starts from Buddha and develops with more set of values. If you ask the Dalai Lama, he will say Buddhism again can be used by many with other additional principles. In fact, there are various sects in Buddhism as well. So, Hinduism becomes a philosophy in that respect. Similarly, I do believe it will be applicable to many other religions that we follow in the world.