Agile Software Development

Agile software development comprises various approaches to software development under which requirements and solutions evolve through the collaborative effort of self-organizing and cross-functional teams and their customer(s)/end user(s). It advocates adaptive planning, evolutionary development, early delivery, and continual improvement, and it encourages rapid and flexible response to change. It is the ability to create and respond to change. It is a way of dealing with, and ultimately succeeding in, an uncertain and turbulent environment. It’s really about thinking through how you can understand what’s going on in the environment that you’re in today, identify what uncertainty you’re facing, and figure out how you can adapt to that as you go along.

A lot of people peg the start of Agile software development, and to some extent Agile in general, to a meeting that occurred in 2001 when the term Agile software development was coined.
However, people started working in an Agile fashion before that 2001 meeting. Starting in the mid-nineties, there were various practitioners, either people working inside organizations developing software products or consultants helping organizations build software who thought, “You know what? The way we’ve been building software just isn’t working for us. We’ve got to come up with something different.”
These software developers started mixing old and new ideas, and when they found a combination that worked, they created a methodology for their team to help them remember the combination of ideas that worked in a given situation.
These methodologies emphasized close collaboration between the development team and business stakeholders; frequent delivery of business value, tight, self-organizing teams; and smart ways to craft, confirm, and deliver code.
The people who created those methodologies figured that others may be interested in getting some of the same benefits they were experiencing, so they created frameworks to spread the ideas to other teams in other organizations and contexts. This is where frameworks such as Scrum, Extreme Programming, Feature-Driven Development (FDD), and Dynamic Systems Development Method (DSDM), among others, started to appear.
The spread of the ideas at this time was very organic, and all of those different approaches started to grow in a very grassroots manner. People borrowed the original frameworks and tweaked them with different practices to make them appropriate for their contexts.

Agile is a Mindset
Ultimately, Agile is a mindset informed by the values contained in the Agile Manifesto and the 12 Principles behind the Agile Manifesto. Those values and principles guide how to create and respond to change and how to deal with uncertainty.
You could say that the first sentence of the Agile Manifesto encapsulates the whole idea: “We are uncovering better ways of developing software by doing it and helping others do it.”
When you face uncertainty, try something you think might work, get feedback, and adjust accordingly.
Keep the values and principles in mind when you do this. Let your context guide which frameworks, practices, and techniques you use to collaborate with your team and deliver value to your customers.

Agile methodologies
AGILE methodology is a practice that promotes continuous iteration of development and testing throughout the software development lifecycle of the project. Both development and testing activities are concurrent, unlike the Waterfall model.

The agile software development emphasizes on four core values.

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

The Agile Lifecycle
There are a variety of Agile software development (or system development) methodologies, including, but not limited to:

  • Disciplined Agile Delivery (DAD)
  • Adaptive Software Development
  • Agile Modeling
  • Kanban
  • Scrum
  • Scrumban
  • Extreme Programming (XP)
  • Dynamic Systems Development (DSDM)
  • Feature Driven Development
  • Lean Software Development

The overall goal of each Agile method is to adapt to change and deliver working software as quickly as possible. However, each methodology has slight variations in the way it defines the phases of software development. Furthermore, even though the goal is the same, each team’s process flow may vary depending on the specific project or situation. As an example, the full Agile software development lifecycle includes the concept, inception, construction, release, production, and retirement phases.

The Benefits of Agile Software Development
Top software developers developed agile meetings. After repeatedly experiencing challenges and limitations from traditional waterfall development in real-life projects, they wanted to create a more efficient process for analyzing project development. The approach they used addresses the issues regarding the philosophies and processes of traditional methods directly.

Agile models are based on iterative software development. An independent working module is built after the completion of an iteration. Iteration should not consume more than two weeks to complete code. Agile methodologies invite the developers to get involved in testing, rather than a separate quality assurance team.
Agile methodologies are suitable in changing environments because of new practices and principles that enable a team to develop a product in a short duration.