Skip to main content

Running Down Assumptions

Article

Running Down Assumptions

Article by Brian Lawrence | Comments: (5) | Fri, 11/03/2000 - 2:58pm
Summary:

Do you think the assumptions you make about your software project are important? I do. One of the biggest sources of software project failure is hidden assumptions, especially about your requirements. These assumptions have a way of coming out of the woodwork–usually at the worst possible moment–to foil your projects. But there are ways to track down and expose assumptions.

Recently, as I was watching a cheap action flick, I was astounded to hear the chief villain utter what I consider to be one of the most important principles of system design. He said, "Assumption is the principle source of system design failure."

Okay, he didn't say it exactly like that. What he said was a bit coarser and quite a bit more profane, but it amounts to the same thing. He repeated this catch phrase over and over during the film. Of course, in true Hollywood style he eventually fell victim to the very principle he was espousing all along. I believe the assumption that got him was "I have a foolproof plan." His final words were "I didn't think of that."

As with our villain, assumptions can be dangerous to software projects. In software design organizations, I've seen two common patterns of assumptions that have led to system design failure. The danger is compounded by the shared trait–the assumptions are unstated.

The first kind is hidden, false assumptions. This is where everybody assumes something to be true that isn't. A popular example is "Enough people will really like our great idea, and they'll pay us lots of money to use it."

The second kind is ambiguous assumptions, such as where key stakeholders are making different assumptions about an important issue, and nobody knows it. A prime example is where development management thinks they've produced an early prototype, and marketing is out pushing it as a complete solution.

What assumptions are you making about the software you're producing? In my requirements workshops, I encourage participants to surface and document every single assumption that any critical player might be making, and then go off and make sure that those assumptions are both shared and true. Does that sound hard to do? There are some highly effective heuristic techniques, such as context-free questions, to help make the assumption hunt more likely to turn up as much as possible.

Some of the context-free questions I always ask are "What problems are we really trying to solve?" and "What problems might a highly successful solution create?" Answers to these questions can be eye-openers.

Although they aren't especially difficult, assumption expeditions can take some organizing. Despite the effort, participants usually confess that finding just one important assumption has made spending the time worthwhile.

One way to start the hunt is to make it part of a requirements-discovery workshop. It's important that enough of the right stakeholders participate. You need a good cross section representing groups with differing interests, such as development, marketing, QA, and possibly support, manufacturing, legal, or others. The idea is to get people who will have to face the consequences of false or ambiguous assumptions in the same room to discover and examine their assumptions together.

But don't just stop with the hunt. Once you document your set of assumptions, somebody needs to manage them for the rest of the project's duration. Expect to come across more assumptions that will need to be resolved. Be prepared for the exciting discovery that some you thought were true will, in fact, turn out to be false. If you fail to give somebody the job of managing your assumptions, I guarantee they'll sink back into the woodwork, hiding there until they become a crisis.

At which point you, like our B-movie villain, might be heard saying, "I didn't think of that," as your project is foiled.

About The Author: Brian Lawrence

Brian Lawrence is an author and a consultant who teaches and facilitates requirements analysis, peer reviews, project planning,risk management, life cycles, and design specification techniques. He is currently serving as the technical editor of Software Testing and Quality Engineering Magazine, and is on the editorial board of IEEE Software. Brian is a participant in Jerry Weinberg’s 1996 Software Engineering Management Group and is a member of the ACM and the IEEE Computer Society. He also is an instructor at the University of California Santa Cruz Extension program in software engineering.

Comments

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

#1

In my experience the key causes of failure in any software project are due to two interrelated points (poor business practices and ineffective management aside). The first is the lack of effective communication between the various team members. As a direct result of this, assumptions are often made to the detriment of the project "such as where key stakeholders are making different assumptions about an important issue, and nobody knows it" as per Brian Lawrence's article. Can you say integration testing nightmare!

#2

The fact has been known for more than a century that "knowledge workers" cannot be forced to produce more output by simply making them spend more hours in the office. 40 hours has been established as a standard work week, and every attempt to stretch it for more than a very brief period has resulted in higher defect rates that more than cancel out any modest increase in delivery rate. There is, of course, a very tiny segment of the population who are capable of sustaining heroic levels of performance indefinitely with no degradation of quality. One of the most common assumptions that managers make is that every single one of those people will be assigned to his project.

#3

Good column.One additional thing I noted about assumptions. People tend to know they are there, but do not want to run them down or explore them for fear it will cause changes in the project. The problem is, is that it will cause changes, either at the beginning when you truly understand them, or at the end when users/clients/QA discover them and require the changes to be made. Definitely better to know them up front.

#4

Once the assumptions are made with the help of all who are concerned with, it is important to discuss with the User about the assumptions and get it acknowledged rather than waiting for the problems to surface. May be sufficient effort could be planned to do this activity.

#5

I believe that you touched a very vital nerve here. Normally, the question is: where do I start? Well, if you have not got an answer, the "assumption part" is not the worst one to start with.Maybe, you can state the equation:Actual_requirements - acknowledged_Requirements = Assumptionsor Actual_requirements_of_a_product = acknowledged_Requirements + AssumptionsThe coding for the whole product will consist of a) coding of acknowledged_requirementsb) later coding (or bug fixing) of AssumptionsFrom all we know the costs of b may be much higher than the costs of a.