What is Agile?
Agile framework has many Misconceptions land myths associated with it like, no process or plan is followed if you are agile. Agile let’s the programming team do whatever they need to with no project management and no architecture, allowing a solution to emerge, the programmers will do all the testing necessary with Unit Tests”. This misunderstanding has been propagated by some managers who believe that agile frameworks translate to nothing more than a loosening of control and reduction of analysis and planning. Improper implementation of an ill-defined concept of "Agile" can result in even graver problems arising.
It has been my experience that "the cure was worse than the disease" in those cases. Core Values of the Agile Alliance. However Agile Manifesto answers all the misconceptions. The Agile Manifesto was written in February of 2001, at a summit of seventeen independent-minded practitioners of several programming methodologies. The participants didn't agree about much, but they found consensus around four main values. We are uncovering better ways of developing software by doing it and helping others do it.
Through this work we have come to value:
Working Software over comprehensive documentation - It states that working software is valued over comprehensive documentation. The obvious question is: what is the difference?
In traditional software projects a lot of effort is used to produce documents like requirement specifications, technical specifications and test plans. In fact, these documents are often required before the project can proceed to the next phase. Yet, the sad fact is that most of these documents are not updated or read after the project has been finished.
Agile projects aim to maximize the value delivered to the customer by producing only the minimum amount of documentation. This approach requires that the team can identify the documents, which are truly useful and valuable to the customer. Delivered documentation might include a short architecture specification, installation instructions and a documented source code. By producing only a portion of the documentation, an agile project team can use more time for implementing the required features. Responding to change over following a plan – Contrary to the myth Some upfront planning is required for Agile development projects and should include details such as development principles, an estimate of the work and tasks involved, priorities and overall budget to act as a guide for decisions during development. The key here is that it is a “guide” and open to change rather than a rigid plan.
Planning continous throughout development and is the work of everyone involved. Customer collaboration over contract negotiation - Unlike Waterfall model where customer gets to see working software only at end of project, in Agile Customers become a part of the development process. Writing specs down and throwing them over the fence doesn’t work. Customer helps team in writing down the acceptance criteria. Individuals and interactions over processes and tools - Agile requires changes and continuous improvement throughout the organization. The development team work together with other teams like PMO and testers.
What gets done and when is lead from a designated role and agreed upon by the team as a whole. While there is value in the items on the right, we value the items on the left more.
Principles of Agile Manifesto
Agile follows 12 principles, which form set of guiding concepts that support project teams in implementing agile projects.
These concepts are used to implement agile methodologies in projects
1. Satisfying customer is top priority – Rather than a "big bang" delivery after months or even years of work, subsets of functionality are delivered within weeks of the start of the project. Early continuous delivery of useful software promotes customer confidence and satisfaction
2. Welcome changing requirements, even late in development - The whole point of delivery is meeting the customer's needs, thereby giving them a competitive edge. Rather than blocking necessary changes to the product as requirements change, agile software development is designed to cope with evolving requirements
3. Deliver working software frequently – Again, agile development emphasizes fast, iterative deliveries rather than the "big bang" delivery of software after a lengthy development process
4. Development and business work together - Rather than working FOR a customer, agile development encourages development teams to work WITH customers. In this way a better working relationship can be established, problems can be spotted and corrected more quickly and customers can see progress on a daily basis.
5. The primary measure of success is working software - In agile software development, working software is THE measure of progress and success, which in waterfall is nothing but little.
6. The team regularly reflects on work and then tunes and adjusts its behavior - Rather than waiting for the end of the project to conduct a post-project review, the agile team is constantly reviewing their progress and processes to ensure they are working efficiently and effectively.
7. Build projects around motivated people - Agile software development recognizes the importance of the team, the working environment and stresses the need for support and trust in the team which are as critical for the project's as software's success.
8. The most efficient and effective method of conveying information to and within development teams is face-to-face communication - While documentation, status reports and memos are necessary evils in most businesses, discussing a project in person can eliminate many misunderstandings and omissions.
9. Continuous attention to technical excellence and good design - While agile methods improve customer satisfaction and the quality of the product, it technically also promotes development agility.
10. Simplicity - The art of maximizing the amount of work not done is essential - Agile says Eliminate low importance and low urgency issues and put them on the NOT-to-do list keeping processes as simple as possible, without the end-product losing its desired functionality. Ask Team if they are producing something that is most useful with the least amount of time.
11. The best architectures, requirements and designs emerge from self-organizing teams - Artificially organized teams. When a team's structure is fixed by upper management with little knowledge of the requirements, customer or the personalities of the team itself - can create situations where personnel are under-utilized. In the worst case, projects fail simply because of poorly organized teams. In an agile development environment, the team is empowered to organize themselves in a way which allows them to be most effective and efficient.
12. Agile processes promote sustainable development - The sponsors, developers and users should be able to maintain a constant pace in definitively.
Agile development proceeds at a more consistent pace, rather than suffering from lulls while waiting for decisions or approvals, followed by a flurry of activity to meet arbitrary deadlines. These principles are fairly simple in concept, but are profoundly deep in practice. For a transition to an Agile work style or as a way to improve the current agile practice, principles espoused here are good start.