Saturday, December 29, 2007

Is the Waterfall Method Just a Way to Procrastinate?

This weekend, I finished reading the very good book The Now Habit: A Strategic Program for Overcoming Procrastination and Enjoying Guilt-Free Play, written by Neil Fiore. I really wish I had read this book before reading Getting Things Done: The Art of Stress-Free Productivity. The information in each book reinforces the other, but I think the information in The Now Habit would have provided a solid foundation to better understand the reasoning behind the strategies presented in GTD.

While reading The Now Habit, it was interesting to reflect on the information in the book as it related to the philosophies behind different software development methodologies, specifically Waterfall-like methods versus Agile-like methods. There were two main points of the book that stood out to me as related to software development.

Perfectionism
Fiore suggests that creative work requires workers to eliminate desires for perfection and allow themselves the opportunity to make mistakes. Perfectionism blocks workers from starting, making them afraid the initial steps they may be prepared to take aren't part of the "perfect" solution. Now compare the two different methodologies:
  • Waterfall Method: Requirements and design must be "perfect" before starting any development work. Mistakes in earlier phases must be avoided, otherwise their cost explodes in later cycles.
  • Agile Method: Development is undertaken with the understanding that initial ideas and design will need correction. Test-driven development provides a safety-net so mistakes cost less and can be corrected without fear of breaking other parts of the system. Working code is given preference to perfect code.
Frequent Rewards
Another suggestion Fiore makes is to plan work in short time intervals, giving yourself frequent rewards after completing discrete tasks needed to complete the project. Rewards that exist too far out into the future will only encourage a person to engage in activities that provide a more immediate reward (e.g. watching television). Comparing the methodologies once again:
  • Waterfall Method: At best, the development cycle is broken up into short iterations allowing for frequent feedback during that cycle. However, such feedback rewards will only occur after the Requirements/Design phases. Any rewarding feedback from customers on the working product can only occur when requirements changes are much more costly.
  • Agile Method: Short, frequent iterations reward the team with visible signs of progression. A short development iteration will have a proposed completion date near enough in the future to provide motivation to make the shorter deadline. The completion of each iteration builds momentum to move on and complete the next.

No comments: