In our previous article, we discussed the 4 values of Agile Manifesto. If you have not read that, please check it here
In this article, we will discuss the 12 Agile principles and how they help individuals and teams to be more Agile in what they do at their personal life or at their workplaces. Each of these principles has an in-depth meaning and these principles are not discrete ones, they are somehow interconnected. That means, in order to be more agile, you either follow all these principles are none, nothing in between.
- “Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.”
Unlike traditional waterfall development approaches, in which a “big bang” delivery happens after months or even years of work, in Agile, software delivery is iterative and incremental. Early, continuous delivery of valuable software promotes customer confidence and satisfaction. At the same time, it helps the teams to get early feedback and because of that the cost of change will be under control.
- “Welcome changing requirements, even late in development. Agile processes harness change for the customer’s competitive advantage.”
Walking on water and working on software project requirements is very easy when both are frozen. However, it does not happen! The focus of software delivery should be meeting the customer’s needs, thereby giving them a competitive edge by allowing for late changes. Changes are not even in customers’ hands, they are market driven, their organizational vision and strategy driven or their competitor products driven. Rather than blocking the changes that add value to the product, Agile software development is designed to cope with evolving requirements and help customers have flexibility in managing the scope. This principle helps to achieve “Business agility”.
- “Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.”
“Time is the enemy of Transparency”. That means, the longer the time you take to deliver anything, the lesser the transparency. In waterfall the project takes longer time to deliver value to the customer and this leads to poor transparency and also the customer cannot get the return on investment. So if you try to decide a fixed duration between 2 weeks to 2 months with a preference to the shorter timescale, and deliver working software to the customer it helps you to get early feedback and helps the customer to get the return on investment.
- “Business people and developers must work together daily throughout the project.”
Rather than working FOR a customer, agile development encourages development teams to work WITH customers, daily. In this way a better working relationship can be established, problems can be spotted and corrected more quickly, and customers can see progress daily.
Working closely with the business people will help you to short-circuit the feedback loops more frequently so that cost of change will be less.
- “Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.”
Motivation multiplies the productivity. Motivated people do not work hard, instead they work with their hearts. Agile software development insists the importance of the team, their working environment. This approach helps to create a “safe to fail” environment. So if the organizations focus on creating an empowered, self-organized and trust-worthy environment for their teams, the teams in turn work to make the project’s success. Eventually the Projects’ success will help the organization’s success.
- “The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.”
“Shared documentation does not guarantee shared understanding”. “Document based communication is an information refrigerator whereas the face-to-face communication is an information radiator”. Agile encourages “Talk more .. write less”. Talking more frequently helps to reduce the to-and-fro loops and makes the communication effective and efficient.
- “Working software is the primary measure of progress.”
Traditional software development often places too much emphasis on milestones which have little, if anything, to do with the actual progress of the project. The milestone based progress tracking does not guarantee how much value was delivered to the customer. Moreover, it creates a hallucination of false progress. In agile software development, the progress is based on working software delivered to the customer.
Measuring progress based on working software, helps to make decisions effectively and it will be easy to make trade-off decisions early in the project.
- “Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.”
Within the agreed duration as per the principle #3, Agile development focuses at a more consistent pace, rather than focusing on meeting milestones. Sustainable pace helps to attain predictability.
It is just like Sprinter Vs Marathon runner. A sprinter can run only a certain distance with high speed, and only once or twice but not very frequently. Whereas, a marathon runner can run for a long distance by adjusting this speed keeping the goal and the remaining time in mind. So agile teams should be like marathon runners to be more predictable.
- “Continuous attention to technical excellence and good design enhances agility.”
When product development happens in an iterative and incremental model, it is not possible to come up with the entire architecture and design of the product upfront. Moreover, big upfront design leads to waste of time and effort. Instead teams should focus on building the just in time architecture and design elements with a preference to change them as and when needed. This is called “emerging architecture”. This helps to achieve “Technical Agility” and thereby support “Business Agility” (discussed above in Principle #2).
- “Simplicity–the art of maximizing the amount of work not done–is essential.”
“Simplicity is the ultimate sophistication “. “Outcome is more important than the output”.
Simplicity is focusing on the product’s essence, building only what is really needed, and being able to adjust and extend the product easily. 80% of the value comes from only 20% of the features. So agile promotes delivering the top 20% high value requirements early in the cycle.
Most of the traditionally designed software products are complex, not only because of heavy and vague requirements, but because of cumbersome execution methodologies. Achieving simplicity in all aspects of development helps ensure a simple, workable, more easily manageable solution.
- “The best architectures, requirements, and designs emerge from self-organizing teams.”
Self-organization is making decision making decentralized and allowing people to make decisions on their own. This improves the accountability within the teams. Self-organization comes through empowerment and by letting teams know the “WHY” (Purpose) of what they do. Self-organization also helps to achieve higher transparency.
- “At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.”
Regular and periodic feedback helps the teams to make direction shift as and when needed. This direction shift can be to the Product as well as for People and Processes. Traditionally, in waterfall a post-mortem will be done at the end of the Project but the valuable findings in the post-mortem does not help to make that project better. So, rather than waiting for the end of the project to conduct a post-project review, agile teams constantly review their work and make necessary changes to become better. Frequent inspection and adaptation will help good teams to become better teams.
Conclusion: Agile may not solve all the problems associated with software development, but the principles laid out in the Agile manifesto offer a common-sense approach to resolving most of the reoccurring issues experienced by many teams, customers and projects. By adopting these principles, and following these principles consistently throughout, software development can be simplified and more useful, valuable and cost effective software can be delivered. This helps to make customers happy.