This post is a reminder about Agile principles. It is also an introduction for those who want to learn about it. The Agile principles were initially proposed in 2001 in the Manifesto for Agile Software Development which defines 4 values and 12 principles.
Several project implementations methods were already available then, but many found these inflexible, cumbersome or unadapted. Some tried to apply them with too much orthodoxy and rigidity, went far beyond planned budgets and did not manage to produce operational software. Those who did deliver a product often saw end users refusing to use it. The end result was far from their real needs and expectations.
Agile is a reaction to the think & plan first → design everything → implement everything → test everything → deliver everything mentality (waterfall). Secluding each step of the software process development proved to be a failure in many cases, especially when developing new software from scratch.
By focusing on iterative development, (i.e., successive deliveries of software parts and functionalities with frequent customer feedback), Agile is aiming at being rapid and flexible in response to changes. Project are kept small to maximize success rates. Iterative methods were existing long before Agile. Agile is extending the concept and principles.
Agile Manifesto Values
- Individuals & Interactions over processes and tools – When reading maps, some people tend to try to confirm that they are indeed where they think they are on the map, rather than taking indications on the ground and use these to find their position on the map. The map should only be a support to human interactions, not the other way round.
- Working software over comprehensive documentation – Excessive planning and design used to plague many projects. The process was too intellectualized and disconnected from the final product and user needs.
- Customer collaboration over contract negotiation – Customers know best about their needs (what the product should do), not the designer and software engineer. By getting the customer engaged, one also gets their approval on the delivered product.
- Responding to change over following a plan – Setting rigid project milestones, with a predefined set of tasks, fails on many occasions. The customer rarely has a fully detailed picture of the product he wants or needs. Design and gathering of needs is an ongoing process.
Agile Manifesto Principles
- Our highest priority is to satisfy the customer through early and continuous delivery of valuable software – Customer likes to see where the money is going. The more they see something substantial, the more they trust the process, and the more they get engaged.
- Welcome changing requirements, even late in development. Agile processes harness change for the customer’s competitive advantage – Devil is in the details, and sometimes, these lie under several layers of analysis and design. For new software, some real practical requirements are only discovered late in the process. These are essential and must be accommodated for.
- Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale – This practice guarantees that expectations are met and that the project does not go in the wrong direction. Frequent customer feedback is the lighthouse.
- Business people and developers must work together daily throughout the project – Developers usually have little managerial decision power, yet their daily work depends on managerial decisions which must be made for the project to flow.
- Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done – This is about empowerment and people management. It is not specific to Agile only.
- The most efficient and effective method of conveying information to and within a development team is face-to-face conversation – Self-explanatory.
- Working software is the primary measure of progress – Again, this principle helps avoiding never-ending projects.
- Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely – This is achieved with face-to-face communication and frequent deliveries of product features, plus frequent customer feedback.
- Continuous attention to technical excellence and good design enhances agility – This is a tautology.
- Simplicity–the art of maximizing the amount of work not done–is essential – It is complicated to keep things simple, to resist the temptation of including too many technologies or frameworks. Overkill is common in software implementation. The purpose is to satisfy requirements, not optimizing the last lemon drop. The investment is often not worth the return.
- The best architectures, requirements, and designs emerge from self-organizing teams – Again, this is about resisting implementing large strategic plans or theories, and trust the process and people.
- At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly – This nothing but debriefing in action.
By following Agile principles and values:
- Implementation teams practice iterative development, by collecting customer needs, implementing them progressively, with frequent releases (a.k.a. incremental delivery)
- This implies some kind of evolution of user requirements over time
- Programming and testing starts early, alongside analysis
- At each iteration, the client chooses the next features to implement
- Each team member takes ownership of the tasks they will achieved and decide how to implement them until the next iteration
- The riskier and most complex requirements are dealt with first
- Each iteration has a fixed duration (1-4 weeks), which cannot be changed
- Once features have been selected for an iteration, no changes are allowed
- Complete features before moving to the next one
- All this helps reducing the cone of uncertainty of requirements (Mc Connell)
Key To Success
- Identify what the customer values
- Identify stakeholders and make sure they have a vested interest in the project’s success
- Make sure there is a customer representative (single point of contact)
- Favor consensus in team decisions, whenever possible
- Break large tasks into smaller tasks
- Focus on delivery, not process compliance
- Master technical details and skills required to succeed
- Facilitate communication channel between all involved parties
- Have people put their ego in their pocket
- Practice open information as much as possible and necessary
- Use feedback, both from customer and development team to improve
- Avoid long term planning
Agile methods are not silver bullets for all situations. They are best when developing a new software application from scratch or for continuous integration projects. However, waterfall remains more appropriate when upgrading an ERP or when converting an existing application from one technology to another.
The most famous Agile methods applying Agile principles and values are Scrum and Extreme Programming (XP). There is also Adapative Software Development, Crystal methods, Dynamic Solutions Delivery Model (DSDM), Feature-Driven Developpment (FDD), Lean Development and Pragmatic Programming.