When I think about what we do in software development, I find it hard to imagine similar things happening in other fields.

Imagine being a car designer. Someone walks up to you and says "These are the requirements for the new car. It has to have four doors, a hatch-back, manual transmission, a wheel base of X and fifteen drink holders."

"Fifteen?," you ask quizzically. "Yes," they reply, "that's what marketing wants."

Now, it may happen like that -- I don't know -- but somehow I suspect that it doesn't.

After all, when we think of automotive design, we think about those very things.. how many doors does it have? Does it have a hatchback? Those aren't requirements, those are design decisions.

Maybe requirements is just a word that we use because we're dividing our design work between two groups.. a group that determines the higher level design (what the product will do); and the lower level design (how the product will do it).

Like any other division in development, this division of design can have negative effects, but I suspect that most of them time they are hidden.. they express themselves as lost opportunities. However, if you see the opportunities, you can do something special.

Kent Beck, Joseph Leddy, and William Wake gave a great example in Cutting with the Grain: The Rhythms of Design:

A more daring strategy .. [in software] .. is amputation. In abandonment you stop adding functionality in a certain direction. In amputation you abandon and remove all similar features. If a little is bad, perhaps none at all would be best.

An example of amputation is the security policy in Ward [Cunningham]’s Wiki. The collaborative nature of a Wiki makes it tempting to add security: editors of a page should at least have to log in first, shouldn’t they? Once you start adding security features, though, it’s hard to see where to stop. Instead, Ward chose to eliminate all technical notions of security from the Wiki.

Successful amputation is rare and precious. Amputation is rare because it requires a new way of looking at a problem and the courage to leave out conventionally-demanded features. Amputation is precious because the effort not expended on a class of difficult-to-implement features can be turned to create innovative features along some other dimension.

A large-scale application of amputation is what The Innovator’s Dilemma calls “changing the basis of competition”. Small entrants to a marketplace necessarily have to pick their battles. One way to do this is to amputate the strengths of competitors from your product, staying with the grain for the features you do implement, and building a compelling product that won’t or can’t be compared directly to established competitors. JUnit did this by using Java for its scripting language instead of the proprietary scripting languages of other testing tools.

There's great power in seeing requirements as design decisions.

No, the more I think about it, the notion of requirements just seems to be wrong. It's all design.