I recently participated in a discussion on LinkedIn, where someone asked, “Is Agile a methodology or a set of guidelines?” This provoked a number of responses, including:
“Agile is a framework rather than a methodology.”
“It is a set of principles rather than a methodology.”
“Agile is definitely just a framework.”
“Agile is not any single one thing.”
“Agile is not a methodology or a framework.”
“Agile IS 4 values and 12 principles, with frameworks that adhere to those Agile Values and Principles. “
So, just what is the proper definition of Agile development? Is it a framework, methodology, or something else? Is it nothing definitive at all?
Let’s start by examining what it means to be agile. Wikipedia defines business agility as: “the ability of a business to adapt rapidly and cost efficiently in response to changes in the business environment.” Wikipedia expands on this, stating, “Agility is a concept that incorporates the ideas of flexibility, balance, adaptability, and coordination under one umbrella. In a business context, agility typically refers to the ability of an organization to rapidly adapt to market and environmental changes in productive and cost-effective ways. The agile enterprise is an extension of this concept, referring to an organization that utilizes key principles of complex adaptive systems and complexity science to achieve success.”
Being agile in a business context equates to one of the primary benefits of Agile software development: that it strives to be responsive and adaptive to the business. While the purpose of Agile development may be well-understood; people get wrapped around the axel when they attempt to succinctly define Agile development, and disagreements surface when terms like “framework,” “methodology,” “guideline,” and “principles” become a part of the definition.
Wikipedia defines Agile software development as, “A group of software development methodologies that are based on similar principles.”
This is accurate, but it doesn’t quite work for me. I’ll come back to this definition in a moment. Let’s examine whether we should be using words like framework, methodology, guideline, and principles in the definition of Agile development. The formal definitions of each:
Framework – (Wikipedia was light on this definition, so I used Wiktionary.org) A framework is a basic conceptual structure used to solve or address complex issues.
Methodology – (Wikipedia) The study of methods used in a field.
Principle – (Wikipedia) A law or rule that has to be, or usually is to be followed, or can be desirably followed, or is an inevitable consequence of something, such as the laws of nature or the way that a device is constructed.
Guideline – (Wikipedia) Any document that aims to streamline particular processes according to a set routine. By definition, following a guideline is never mandatory (protocol would be a better term for a mandatory procedure).
Confused yet? I’ll keep going. Other definitions of Agile Software Development tend to be descriptive, like Scott Ambler’s: “Disciplined agile software development is an iterative and incremental (evolutionary) approach to software development which is performed in a highly collaborative manner by self-organizing teams within an effective governance framework with “just enough” ceremony that produces high quality software in a cost effective and timely manner which meets the changing needs of its stakeholders.”
Describing software development is fine. However, my objective is to provide a succinct definition, separating the what from the how, and to make a determination about whether Agile development is a framework, guideline, or methodology. In writing this blog, I’ve spent some time thinking about the terminology and my LinkedIn response, which in part was:
“Agile SOFTWARE DEVELOPMENT refers to a group of software development methodologies, whereas a specific implementation such as Scrum or XP IS a reference to a specific framework, methodology, or guideline (all of which I take to describe a process or approach to Agile development). I lean towards referring to something like Scrum as a methodology versus anything else. A guideline strikes me as too weak, and a framework invokes an image of static building-blocks rather than a process flow.
“My other two cents is that Agile development and the Agile Manifesto should not be confused, terminology-wise. But what the Agile Manifesto brings to the table is worth noting. The Agile Manifesto is an instrument to succinctly state the mission of Agile development. The values and principles of Agile development should be embodied within a specific Agile methodology, since those are the key tenets of Agile development. The values and principles reflect the spirit of Agile, and the implementation is the methodology.”
I was wrong!
Well, in part. I still prefer to stay away from defining Agile development as a framework or a guideline because Agile development does come in various flavors, including Scrum, XP, Feature Driven Development, etc. – and each have their own specific approach.
I also stand by my take on the Agile Manifesto. Agile development is more than a set of principles, although thanks to the Agile Manifesto we have a documented set of values and principles for Agile development. Ultimately, the definition of Agile development must be a general term that allows for specific implementations.
The use of the term methodology fits, if appropriately used. And this is where I was wrong and where I feel Wikipedia’s definition is slightly off. The term methodology has been used – inappropriately – as a substitute for method. Here’s a quick take from Wikipedia on the use of the term methodology:
Etymologically, methodology refers to the study of methods. Thus the use of methodology as a synonym for methods (or other simple terms such as means, technique, or procedure) is proscribed as both inaccurate and pretentious.
Agile software development is thus the study of methods – a methodology, whereas a specific implementation such as Scrum is a method. Wikipedia therefore should not refer to Agile software development as a “group of software development methodologies,” but as a “group of software development methods.”
What is my definition, using one sentence?
Agile development is a methodology that refers to a group of adaptive, responsive software development methods that value delivering working software in the shortest period of time in a sustainable manner.
Thunderbolting Your Video Card
2 days ago