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

James Waletzky

MSDN Magazine May 2007

...

Read more!

Popular Articles

Here is an ASP.NET AJAX data-driven Web application that takes the best features from server- and client-side programming to deliver an efficient, user-friendly experience.

Bertrand Le Roy

MSDN Magazine October 2008

...

Read more!

Writing a Web application with ASP.NET is unbelievably easy. So many developers don't take the time to structure their applications for great performance. In this article, the author presents 10 tips for writing high-performance Web apps. The discussion is not limited to ASP.NET applications because they are just one subset of Web applications.

Rob Howard

MSDN Magazine January 2005

...

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!

Kenny Kerr sings the praises of the new Visual C++ 2008 Feature Pack, which brings modern conveniences to Visual C++.

Kenny Kerr

MSDN Magazine May 2008

...

Read more!

One-time passwords offer solutions to dictionary attacks, phishing, interception, and lots of other security breaches. Here's how it all works.

Dan Griffin

MSDN Magazine May 2008

...

Read more!

Our Blog

We're currently in the process of stepping back and taking a critical look at our Web site to see how you all are using it - and how we can redesign parts of it (big or small) to make that experience better.  We are continuously receiving your feedback on existing frustrations and we are working hard to remedy those (as a general fyi, most of the frustrations have to do with navigation).  However, in order to get a sense of whether we need to look at some of the more fundamental ...

Read more!

It’s helpful to think about secure design from a more holistic perspective by using threat models to drive your security engineering process.

In the November 2008 issue of MSDN Magazine, Michael Howard proposes using the threat model to help drive other SDL security requirements, primarily code review priority, fuzz testing priority, ...

Read more!

Silverlight provides a browser interoperability layer that allows managed code to access the document object model (DOM) of the underlying page. At the same time, JavaScript code running in the page can access the XAML content of the plug-in and even make modifications.

In the November 2008 issue of MSDN Magazine, Dino Esposito discusses the ...

Read more!

Earlier this year MSDN Magazine embarked on a collaborative project with Behind the Code, an interview program airing on MSDN Channel 9. In this program, Robert Hess interviews prominent developers at Microsoft, and those developers also write a column for { End Bracket } in MSDN Magazine. In the newest interview, Richard Ward talks about working on the core infrastructure components of future versions of Windows, as well as ...

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!

{End Bracket}
From Bouncy Balls to Better Estimates
James Waletzky


Care to guess how many bouncy balls are in the container on my desk? You don't know the size of the balls, the volume of the container, or how full the container is, which makes an educated guess difficult. An estimate would be a pure stab in the dark. Does this problem sound familiar when applied to developing software? Let's explore the reasons why predicting the amount of development effort is extremely difficult early in a project, and what we can do to improve the accuracy of our estimates.
One type of estimate that we are often asked for early in development is a SWAG-or "Silly Wild-Ass Guess." A SWAG is a gut-feel estimate of effort to develop a software project. Project managers often ask for a SWAG to predict ship dates before we have suitable details on the requirements of our project, let alone any knowledge of the design. Your probability of guessing the number of bouncy balls on my desk is akin to estimating the amount of effort in a project with many variables.
As we remove uncertainty from the project by identifying features, detailing requirements, and creating a design, the picture becomes clearer. We may not have all the information required to make a precise estimate, but at this point we know what we don't know, and we can plan for the future. If I told you that the bouncy balls on my desk are one-half inch in diameter, sit in a container that could hold a loaf of bread, and the container is three-quarters full, your estimate of the number of balls in the container could be fairly accurate. With software projects, eventually we remove enough variability and minimize enough risk such that we can provide a reasonably accurate estimate. At the beginning of a project, however, there are many unknowns.
  (Click the image for a larger view)
Fortunately, there's a way to fast forward the process. My early-cycle development estimates have significantly improved since I discovered Wideband Delphi, an under-utilized team-based estimation technique that was popularized by Barry Boehm in the 1970s. A lightweight process, Wideband Delphi significantly improves the accuracy of estimates. Here is the process:
  1. Gather some people to help. Wideband Delphi recommends a team of two to five people. Bring in some people who have experience building a similar type of application, as well as some who have never built this kind of application. Multiple perspectives are valuable.
  2. Provide an overview of the work to be estimated. The person most familiar with the work gives the group a brief outline of the task at hand, focusing on requirements.
  3. Derive individual estimates. Every person in the room thinks about the problem and privately notes his assumptions. Then, on an index card, each person writes down his estimate in ideal effort-hours, and places it facedown on the table.
  4. Reveal the estimates and discuss assumptions. A facilitator reveals the anonymous estimates. What does everyone expect to happen here? The result is similar to multiple people guessing the number of bouncy balls on my desk without much information-estimates vary widely. A facilitated discussion about the assumptions that factored into the estimates ensues.
  5. Iterate from Step 3 until estimates match up. Each individual learns from the others in the room, updates his assumptions, and provides a new estimate. Estimates start converging. Continue this process until convergence is satisfactory.
Why does this technique work? Wideband Delphi incorporates the experience of others, is feedback-driven, allows estimators to go with their gut by keeping the first round anonymous, and facilitates learning. You quickly discover invalid or missed assumptions, while refining high-level requirements and design. The team agrees upon assumptions, documents decisions, and now has rationale for their numbers.
Wideband Delphi has substantially improved the accuracy of our estimates and decreased the risk in our projects by leveraging multiple minds to anticipate problems. For example, my team maintains a list of prioritized requirements from which we choose a subset to develop in a 30-day iteration. We use Wideband Delphi when we add requirements to this list to help us predict the size of work items and when we derive our detailed estimates for a development iteration. The end result has been on-time software deliveries and a better work-life balance!
For more information on Wideband Delphi and other estimation techniques, I recommend that you read Software Estimation: Demystifying the Black Art by Steve McConnell. It'll help you to deliver your software projects on time-or at least to improve the accuracy of your bouncy ball estimates.

James Waletzky is a 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