{ End Bracket }

Exercising Agility

James Waletzky

Physical exercise is a fact of life. Love it or hate it, you have to do it to stay healthy. What you do to stay fit, though, is far less important than that you abide by the core principles of exercising, that is, by incorporating flexibility, aerobic, and anaerobic training into your practices. Software development processes are similar—it is not as important to follow a prescribed development process exactly as it is to stick to the principles of the process. This idea is particularly true with agile development.

There are many software development processes that are considered "agile." Examples include Scrum (for project management), Extreme Programming (XP), and Feature-Driven Development (FDD). Following the prescribed steps in each process is a great way to start learning, but in reality no two software projects and teams are identical, so customization is usually required. Changing a process to suit your needs is encouraged—embracing change is one of the guiding principles of agile development—providing you do not violate the infrastructure upon which agile development is based.

What are the fundamental principles, or the essential nature, of agile software development? Agile focuses on:

Simplicity Agile development processes are not only simple, they encourage simple software designs. Keeping software designs simple improves maintainability and discourages over-engineering. The practice of test-driven development (TDD) in XP encourages writing the minimum amount of code to pass a test—nothing more. Couple this practice with continuous refactoring, or improving the design of existing code without changing functionality, and software complexity is minimized.

Embracing Change Two certainties in software development are that humans make mistakes (bugs) and that requirements change. Agile developers do not fear change and are always prepared to deal with it. For example, users often request features late in the development cycle. An agile developer listens to the user and incorporates the changes with minimal pain using practices like TDD, continuous integration, and refactoring.

Incremental Iteration Delivering small, shippable pieces of functionality frequently and incorporating frequent customer reviews helps keep development on track. Furthermore, restricting development to small chunks with a defined meaning of "complete" puts a focus on quality. In Scrum, iterations are typically 30 days and are called "sprints." Each deliverable in a sprint must hold to a high level of quality. FDD typically delivers frequent, tangible, working results every two weeks.

Continuous Feedback and Improvement Agile development encourages frequent reflection on what you have just done with the intent of making improvements in your development techniques. Scrum has a retrospection meeting at the end of each sprint. XP promotes refactoring code continuously to advance and simplify the internal design. Feedback-based mechanisms such as updating estimates every day in a Daily Scrum meeting reinforce learning and provide a consistently accurate picture of the project.

Collaboration Agile development emphasizes open communication channels within teams, between teams, and with customers. Regular communication among project managers, developers, testers, and the customer keeps everyone moving in the same direction and quickly addresses blocking issues. The Daily Scrum meeting and Pair Programming in XP are good examples of ways to improve collaboration within and outside your team.

Eliminating Waste The idea of waste elimination is borrowed from lean software development (www.poppendieck.com), which is often paired with agile development. "Waste" comprises tasks or work (such as features) that do not significantly contribute to what the customer wants or needs. For example, doing a deeply detailed requirements analysis and big design up front is often wasteful as change later in the development cycle negates much of the effort. It is better to stay high level and discover the details as you go.

Regardless of whether you are practicing Scrum, XP, FDD or some other agile process, these core principles of agile development can guide you toward the right decisions with focus on the user and high quality. The same holds true with physical exercise—undertaking a variety of activities on a regular basis, including working on the yard or helping a friend move, is what yields successful results. Simply abide by the fundamental principles and just do it!

For more on these principles, see www.agilemanifesto.org/principles.html. Now get out there and stay agile. Keep your body and your software projects healthy by following core principles.

James Waletzky is a Senior Software Design Engineer in the Microsoft Engineering Excellence group. James focuses on improving engineering practices at Microsoft through training, consulting, and tools, while emphasizing continuous improvement.