Monday, January 6, 2014

Agile - Overview: What is Agile, Agile Manifesto, Agile principles and Agile Methodologies


Agile: What is Agile?

‘Agile’, one of the biggest IT development buzzwords; we hear about this in variety of places like Agile teams, Agile leadership, Agile methodologies, Agile principles, Agile governance and many more. What exactly agile is all about? Let’s see the dictionary meaning first (from OxfordDictionaries)

Adjective
  • able to move quickly and easily
  • able to think and understand quickly
  • relating to or denoting a method of project management, used especially for software development, that is characterized by the division of tasks into short phases of work and frequent reassessment and adaptation of plans

To tell in very simple words, agile development is an umbrella term that describes several agile methodologies to handle IT teams and projects. The word ‘Agile’ is derived from agile manifesto (http://agilemanifesto.org/)

Agile manifesto:

In 2001, small group of people got together to discuss about better ways of software development as the traditional approach was failing in reaching customer requirements. After many discussions, they came up with the agile manifesto:

We are uncovering better ways of developing software by doing it and helping others does it. Through this work we have come to value



 That is, while there is value in the items on the right, we value the items on the left more.

Agile Principles: there are twelve principles behind the agile manifesto

1)      Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.

Unlike the traditional software development (Delivery after months/years of work), small components of the project functionality are delivered within weeks after starting the project. It is incremental delivery rather than a single delivery. Features having high business value getting delivered early and continuously gains customer satisfaction which is very critical in business.

2)      Welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage.

Main objective of the agile software development is to give a competitive edge to customer by implementing evolving requirements at any point of time throughout the project

3)      Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.

Agile development focuses on fast, iterative deliveries than traditional one-time deliveries

4)      Business people and developers must work together daily throughout the project.

In Agile software development, development team works closely with business people/customers on daily basis and takes their feedback.  With this better working relationship is established and development team will correct their mistakes quickly based on customer’s feedback

5)      Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.

Agile software development emphasizes on team culture; concentrates more on factors which build trust in the team. Agile strongly believes that these are the reasons for team’s/software’s success

6)      The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.

Agile development encourages face to face conversations as it is better compared to e-mail/ phone/ communicator. It avoids many mis-understandings and confusions

7)      Working software is the primary measure of progress.

In Agile development, progress & success is measured by working software (i.e. the component of software which ready to get delivered to customer / delivered to customer)

8)      Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.

Agile development progresses in very consistent; neither slow nor fast. Total team is responsible and accountable for the same.

9)      Continuous attention to technical excellence and good design enhances agility.

We know that agile development focuses on extrinsic quality (customer satisfaction & Product quality) and along with this it takes care of intrinsic quality as well by following best agile development practices

10)   Simplicity--the art of maximizing the amount of work not done--is essential.

Agile development always keeps software simple, workable and easy to maintain. Traditionally developed software products are complex due to cumbersome design, requirements etc

11)   The best architectures, requirements, and designs emerge from self-organizing teams.

Agile development believes that best architectures, requirements, and designs emerge from self-organizing teams as there are no hierarchies involved here. The team is empowered to organize themselves to be more effective and efficient. Transparency, inspect, adapt, Continuous planning, Continuous customer feedback and customer collaboration makes team self-organizing

12)   At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.

In traditional software development approach, team will be waiting till the end of the project to conduct post-project review. But agile software development emphasizes continuous review. Team member can give feedback to team member or to process @ any point of time by writing it in post-it/face to face. Inspecting and adapting continuously solves many of the repetitive issues experienced by many teams and projects.

These principles may not give perfect solutions to all problems faced during software development process. But it gives scope to highlight all the issues faced by team and total team will focus on it collectively to reduce the risk. By following agile principles agile teams can achieve increased team efficiency, Lower development costs, faster time to market, Better quality software, Systems better suited to customer needs and Consistent Repeatable results.

Become a signatory by adding your name to the list of people signing the Agile Software Development Manifesto here.

Agile Methodologies:

Hope you understood what is Agile by now. Let’s move on to agile methodologies. If you assume as Agile as umbrella (as shown in below figure), it consists several specific methodologies under its shadow. Broadly agile methodologies are classified in to 2 types

1.       Light weight Approaches
2.       Fuller Approaches


Light weight Approaches has relatively few prescriptive governance when compared with fuller approaches. Examples for Light weight approaches are Scrum, Lean, Kanban, Crystal and Extreme programming (XP)

Fuller approaches involve more details and guidance in terms of process prescription. Examples of fuller approaches are DSDM (Dynamic systems development method), AUP (Agile Unified Process) and FDD (Feature Driven Development)

Let’s discuss about these methodologies in the next posts in detail. Your feedback is important to me; Help me to improve by giving your feedback. I appreciate it very much! Please feel free to reach out to me


References:
1.       Agile manifesto
2.       Wikipedia
3.       All About Agile
4.       Coaching Agile Teams

-Balaji Sathram

6 comments:

  1. Good compilation of Agile Manifesto and Agile Priciples

    ReplyDelete
  2. Very informative Balaji... and awaiting for your continuation post for this

    ReplyDelete
    Replies
    1. Thanks lakshman... will post continuation in couple of days

      Delete
  3. Hi Balaji... in the above post , i am bit confusing with the points 3 & 8, can you differentiate even more to understand better. Thank you
    -Lakshman Teja

    ReplyDelete
    Replies
    1. Hi Lakshman, 3rd principle speaks more comparison with Traditional development method (It will take many months to years to deliver the product based on project). But in agile incremental product is delivered between 1week to 1month. thus it is faster then traditional development.

      coming to 8th principle, it is with maintaining the pace/speed consistently which you have developed throughout iterations/sprints

      Delete