The Agile Way
While there has been a lot written and said about Agile programming and management methodologies, the Agile Manifesto captures the essence of the model when it says:
We have come to value
Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan
That is, while there is value in the items on the right, we value the items on the left more.
Principles behind the Agile Manifesto
- Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.
- Welcome changing requirements, even late in development. Agile processes harness change for the customer’s competitive advantage.
- Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.
- Business people and developers must work together daily throughout the project.
- Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.
- The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.
- Working software is the primary measure of progress. Agile processes promote sustainable development.
- The sponsors, developers, and users should be able to maintain a constant pace indefinitely.
- Continuous attention to technical excellence and good design enhances agility.
- Simplicity–the art of maximizing the amount of work not done–is essential.
- The best architectures, requirements, and designs emerge from self-organizing teams.
- At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.
We also like Cam Wolff’s post on this topic:
Agile is a collection of practices. While there is no formal definition of the collection of agile practices, there are studies that have measured the effectiveness of various agile practices.
Broadly, agile practices can be categorized into two groups, management practices and engineering practices. SCRUM is the most popular set of management practices. XP or Extreme Programming is the best known set of engineering practices.
If an agile team only employees the management practices, i.e., SCRUM, they are not likely to be able to maintain a sustainable pace for an indefinite period of time. For example, without automated functional tests, it will take longer and longer to validate each iteration. If you don’t use pairing or Test Driven Development, you are likely to find your defects grow out of control.
Scrum management practices enable the team to collaborate successfully with the business partner. Prioritizing what needs to be done, working collaboratively against scope in priority order. Scrum, by itself, will provide benefit immediately. Management practices tend to be the easiest to learn and put into practices.
Examples of management practices are open workspace, product owner, prioritized product backlog, iteration, iteration and release planning meetings, show & tell, etc.
While the engineering practices are more difficult to learn and execute well, they are essential if a team is to maintain a sustainable pace of high quality software. Examples of engineering practices are developer pairing, test drive development, simple evolutionary design, automated functional and performance tests, continuous integration and collective code ownership.