‘Agile’ used as an adjective in English language means the ability to move quickly and easily; synonymous for words like ‘nimble’ and ‘lively’. Regarding the matter of software development, it can be perceived as a methodology that allows the process to be carried out in a swift and convenient manner, while rapidly adapting to change. Active acceptance to variations is the fundamental facet of Agile Software Development, which makes it an innovative and unorthodox approach.
Core Values of Agile Development:
Individuals and Interactions
There is no hierarchy within the Agile team. Each member is encouraged and motivated to share ideas. The purpose is to develop the product as a team, so that everyone can contribute equally. Everyone gets the right to make decisions, thereby reaching a common vision. When everyone gets a say, the outcome is always unexpected, in a good way.
Demonstrative prototypes are always better than conventional documentation. Through development of functional software at early stages, it is easier to comprehend the optimum final product. Following an incremental and iterative workflow, smaller features of the project are configured along the way. As a result, errors can be eliminated side by side before reaching completion.
Customers should always be kept in the loop because exact requirements of any software development project cannot be defined at the beginning. This way it is easier for developers to truly understand the client’s needs and avoid any misconceptions. The satisfaction level of the customer is also heightened as they are happy to participate in the making of something that ultimately belongs to them.
Responding to Change
The Agile process is always open to change, whether the development is under initial or secondary stages. By constant exposure to customer feedback and changing software trends, it is less troublesome when there are requests for alterations. As features of the product are approved or disqualified during the process, there is minimum loss of ‘time already spent’.
The 12 Principles of Agile:
- Early delivery of valuable software for enhanced customer satisfaction
- Accommodating change at all times
- Frequently/constantly deliver working software (every few weeks or months, depending on the length of project)
- Developers and business stakeholders must communicate on a regular basis
- All team members should support and trust each other to create a productive working environment
- Direct Communication/face to face interactions
- Functional software is the primary indication of progress
- Maintaining sustainable development and constant pace
- Attention to technical details and design aspects enhances agility
- Keeping it simple/don’t over-do
- Organized working sessions for better performance
- Reflecting and improving throughout the process
History of Agile
Methodologies for software development began to arise by the end of the 90s. The common point of emphasis was the need of a more intimate relationship between developers and business stakeholders. There were several ideas revolving around organized and smart delivery of code. It was not until 2001 that the term ‘Agile’ originated.
In the February of 2001, eleven software developers held a meeting in Snowbird, Utah where they discussed different ways for effective software development. It was shortly after that gathering when the Agile Alliance was formed and the 12 principles were put into writing. To date this alliance is active and plays its role in assisting others develop software with agility. They provide resources and guidelines for agile practices, whilst encouraging others to share ideas or opinions.
Some Prominent Agile Methodologies
Agile is an umbrella term, having a number of subsidiaries:
Scrum is a lightweight project management framework that concentrates on managing tasks as a team. The term was derived from Rugby – a game that involves passing the ball back and forth in order to move forward. That’s exactly how scrum works with a team of roughly 5-10 developers. Apart from the scrum team, other significant roles in this practice include the “Scrum Master” and “Product Owner”. Scrum master sets up the sprints/team meetings, whereas Product Owner manages the product backlog and prioritizes tasks.
The Crystal methodology consists of three phases: Chartering, Cyclic Delivery and Wrap Up. The first phase includes forming a team, doing a pilot feasibility analysis and drafting an outline of a plan. The second phase involves detailing and refinement of the plan, its implementation and testing. The third phase is about practical deployment and post-deployment assessment.
Dynamic Software Development Method is also sometimes called RAD (Rapid Application Development). Despite having an unstructured line of action, it enables frequent delivery of products. It lays greater stress on user involvement and providing complete authority to the developing team. The main components of this methodology are “Time Boxing”, “Prototyping” and “MoSCow Rules”. MoSCow Rules generally translate to being open-minded, neutral and self-confident.
Feature Driven Development Method is different from other Agile Methodologies because it scales more straightforwardly. It accentuates the designing and building parts of the development process. It is better suited for large teams as it consists of concise and specific phases of work.
The Lean Method of software development is all about cutting costs, developing fast and delivering quality. It tends to eliminate waste by only choosing high value features, mainly relying on customer feedback. Lean insists on sustainable use of resources, paired with maximum effort of the team. It promotes concurrent work, automated unit testing and minimum dependencies within the team.
XP or Extreme Programming is among the most popular and fairly controversial Agile development methodologies. It is especially useful in projects where requirements or demands keep on changing repeatedly. There is naturally a lot of customer involvement, continuous planning, and frequent delivery of functional software after very short-lived intervals.