Printer Friendly Version      Send     
Click to Rate and Give Feedback
Also by this Author

This month End Bracket explores the reasons why predicting the amount of development effort is extremely difficult early in a project.

James Waletzky

MSDN Magazine January 2007

...

Read more!

Popular Articles

The MVP pattern helps you separate your logic and keep your UI layer free of clutter. This month learn how.

Jean-Paul Boodhoo

MSDN Magazine August 2006

...

Read more!

This article presents an overview of the motivation behind new techniques that decompose problems into independent pieces for optimal use of parallel programming.

David Callahan

MSDN Magazine October 2008

...

Read more!

Now you can perform efficient, sophisticated text analysis using regular expressions in SQL Server 2005.

David Banister

MSDN Magazine February 2007

...

Read more!

When incorporating the ASP.NET DataGrid control into your Web apps, common operations such as paging, sorting, editing, and deleting data require more effort than you might like to expend. But all that is about to change. The GridView control--the successor to the DataGrid-- extends the DataGrid's functionality it in a number of ways. First, it fully supports data source components and can automatically handle data operations, such as paging, sorting, and editing, as long as its bound data source object supports these capabilities. In addition, ...

Read more!

Chris Tavares explains how the ASP.NET MVC Framework's Model View Controller pattern helps you build flexible, easily tested Web applications.

Chris Tavares

MSDN Magazine March 2008

...

Read more!

Our Blog

Windows Workflow Foundation (WF) imposes some restrictions on the developer authoring programs that target it. But in return WF offers a powerful, flexible, and extensible set of runtime services such as support for long-running code.

In the December 2008 issue of MSDN Magazine, Josh Lane provides some best practices to consider ...

Read more!

Because Windows Workflow Foundation (WF) is based on a runtime that manages the execution of workflows and activities, testing must, in almost all cases, involve the use of the runtime – and this can introduce some interesting challenges.

In the November 2008 issue of MSDN Magazine, Matt Milner presents some techniques for unit testing ...

Read more!

Windows Presentation Foundation (WPF) adds functionality to the Microsoft .NET Framework so that you actually can reliably keep bound controls synchronized with their data sources.

In the December 2008 issue of MSDN Magazine, Ken Getz demonstrates how to use the ObservableCollection class provided by WPF to keep bound controls in ...

Read more!

A team project is simply a bucket that stores and partitions all of the artifacts you track and use within a Team Foundation Server (TFS) project.

In the December 2008 issue of MSDN Magazine, Brian A. Randell explains how you can use and customize the MSF Agile and MFS CMMI process templates to get the most out of them for your ...

Read more!

Visual Studio 2008 Team Foundation Server Build (better known as Team Build) is a core feature of Team Foundation Server 2008. Microsoft designed Team Build to be an industrial-strength build automation tool.

In the November 2008 issue of MSDN Magazine, Brian A. Randell introduces you to Team Build 2008 and walks you through the process ...

Read more!

{ 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.

Page view tracker