Skip to main content

What is Agile?


If you are into agile software development, chances are you might have heard some or all of the statements below.

"Agile is not a methodology."
"Agile is a mindset."
"Agile is an umbrella term for many practices."
"Change is to be expected. Change is welcomed and embraced."

But when I first started learning about Agile, I could not understand it easily. If you are someone like me, I want to highlight what I learned in the last couple of years on agile.

What is Agile?

Agile manifesto explains the following value of Agile. 

  • Individuals and interactions over processes and tools
  • Working software over comprehensive documentation
  • Customer collaboration over contract negotiation
  • Responding to change over following a plan

However, despite this definition, one of the most discussed topics is Agile a methodology. Understanding this concept of "Agile Midset" might be a little difficult for us practitioners since we are more comfortable with the methodologies which say what to do next. 

To understand the "Agile mindset", let's briefly discuss why Agile came to existence in the first place. Since the 1990's people have understood that software should respond to changes more frequently. At the end of the 1990s, software was in high demand; some analysts projected a 3-year lead time between requirements and delivery. During 3 years, a lot can happen. Requirements evolve, end users change their minds, opportunities become obsolete, and in some cases, complete companies or industries disappear in 3 years. However, most of the time, software teams don't want to work with uncertainty & they want the requirements to be precise. Sometimes management teams did not want to take too many risks with the projects. Responding to this popular demand, many organisations adopted different approaches to respond to changes. 

In 2001 when the Agile manifesto was first signed by 17 pioneers in Snowbird, Utah, they understood these realities about the industry & they came from different practices which were popular at that time. They did not want to enforce any method on any organisation. Instead, they proposed a different way of thinking which would help the organisations to build their own way of responding to changes better using tools and techniques available in the market even during that time. 

The main objective of Agile can be summarised in the below 3 points.

  1. Work with what we know while constantly refining what we know and what is required next.
  2. Obtaining feedback as frequently as possible from stakeholders.
  3. Work on the items which have higher business value & delivery value to stakeholders as early as possible.

When to use Agile?

Sometimes we believe Agile replaced waterfall. In most cases, where businesses require agility, this could be correct. But identifying when not to use Agile is also very important at times. 

Stacey matrix (although it has its fair share of criticisms) help us to understand how and why Agile can help in projects. Stacey matrix is drawn between  2 axes, agreement & certainty. When a project has a certain scope and all parties agree, we can call projects "Simple". Simple is a very arguable statement, but in this context, we can identify this as simplicity of completion due to clarity of requirements and agreement between parties. Continuous feedback and iteration might become a nuisance to some participants in such cases. A good example I can think of is developing a telecom back-end service based on a 3GPP specification. Since service is clearly explained in the specification, continuous feedback sessions will not add much value to the process. There are not many changes the development team can make based on any feedback which is not already specified in the specification. In such cases, the traditional waterfall mechanism will work better. 

If the project has no certainty and no agreement, it is classified as "Chaos." In the chaos, any form of planning is hard and sometimes impossible. One good industry example I have come across in a few places is a service outage of a large service. In such cases, we can look at mitigation mechanisms, such as fixing the most urgent issues and moving to the next problem. Although this looks iterative since we continue to solve issues, there is not much information we could learn from 1st issue to solve the next issue most of the time. 


When you exclude these 2 extreme points, everything else can be categorised into 2 classes. 

1. Complicated - Projects become complicated in 2 scenarios.   

a. When what is required is certain, but how to deliver (agreement) is doubtful. For example, when you need to connect two modules or components, what to do is certain (connecting two modules), but how to implement it (mapping attributes, selecting APIs, authentication) needs to be agreed upon. 

b. When how to deliver is clear, but what to deliver is doubtful. For example, when you need to design an e-commerce store for a new brand, how to deliver is clear as there are many proven platforms such as woo commerce, Shopify and many more. But what to deliver  (content, channels, promotions) is not clear at the beginning of the project.

An iterative process can significantly help a complicated project achieve its goals. Agile encourages starting with what we know and working on unknowns iteratively. Rather than waiting for the whole scope to be clarified. However, other schools of thought suggest analysing, designing and executing (waterfall) approach works better in complicated domains. 

2. Complex - Anything between Chaos and Complicated is categorized as complex. Complex domains have no agreement about what to deliver or certainty on how to deliver. This inherent "unknowingness" create a perfect background for the "Empirical process". When project teams work around the uncertainty, detailed planning is not possible & unresultful. Working on what is evident at the moment and working in small increments makes adopting the changes readily in the long run. Since work is carried out with some doubt, frequent feedback is essential to identify the readiness of deliverables and new scope. 

Is Agile = Scrum ?



Due to the widespread popularity of scrum, some beginners may assume scrum and agile are the same. However, Agile is an umbrella term used to identify a family of methods to deliver projects iteratively. A quick search on Wikipedia will give you the following list of different agile methodologies.

FrameworkMain contributor(s)
Adaptive software development (ASD)Jim Highsmith, Sam Bayer
Agile modelingScott AmblerRobert Cecil Martin
Agile unified process (AUP)Scott Ambler
Disciplined agile deliveryScott Ambler
Dynamic systems development method (DSDM)Jennifer Stapleton
Extreme programming (XP)Kent BeckRobert Cecil Martin
Feature-driven development (FDD)Jeff De Luca
Lean software developmentMary Poppendieck, Tom Poppendieck
Lean startupEric Ries
KanbanTaiichi Ohno
Rapid application development (RAD)James Martin
ScrumKen SchwaberJeff Sutherland
Scrumban
Scaled agile framework - SAFeScaled Agile, Inc.
Depending on the nature of the project, team size, organization preferences, competencies and sometimes based on team preferences, you can pick a suitable Agile method for your next project. In the upcoming posts, we will discuss some of the methods in detail.

Comments

Popular posts from this blog

What Makes an Agile Mindset Different?

The agile mindset is a way of thinking that embraces change and the process of continuous improvement. Agile is a philosophy or a set of values rather than just being a specific methodology. The Agile Manifesto and the Twelve Principles behind them were the results of industry-wide concern over software delivery delays in the 1990s. Rather than specifying a methodology, the Agile manifesto focused on change in how companies think and encouraged them to find ways to be more agile.  An agile mindset enables teams to work together more effectively by being open, iterative and focusing on quick feedback loops. In agile software development, the focus is on customer value. A fundamental principle of agile is working software over comprehensive documentation. Working software is delivered frequently so that customers can see and try it every few weeks or months. Working software may be released to the customer even if not all features are complete or thoroughly tested, as long as it's un

Welcome to Digital PO

Sharing what I know has been a passion for me ever since high school. Sharing & discussing what I know has proven to be the best method to sharpen my knowledge. Throughout my university days, I practised this, and my friends believe I helped them a bit.  After coming to the industry 11 years back, I was too focused on the job and training our internal teams. Discussions were only limited to the team, and I was too job-centred, so I never realized what I was missing. Recently I came to the realization that sharing ideas could help me to learn things beyond the borders of my organization. In the coming weeks, I'm planning to share the little I know about Agile  & would like to hear from those out there what they know and think about Agile. Meantime any new and exciting thing I come across will also be shared in this blog. If this can be a forum to share knowledge for a community of agilists, that would make me proud and fulfilling.