previous | contents | next

search. This is why there may be no substitute for experience, since building up these networks of patterns must take place in the designers head, and requires a long immersion with the material to do it. Note that the immersion is in designing systems, not in abstract study of the technology. It is devoted to acquiring many partial solutions that jump little gaps from desired behaviors to patterns of components (subsystems) that achieve them.

We have not told you all we know, abstractly, about the task of design and how humans are able to do it. Perhaps we have told you enough to give you a feeling for why the book is written the way it is and how you should treat it. We can package some of this general advice in a way that may help to start you out in the right direction and may jog you occasionally if you get stuck. We offer this in Figure 1. But general strategies are no substitute for building up that network of special knowledge.

State explicitly the behavior desired.

Can you use a more precise language than English?

Everything desired cannot be said, but say some of it -- the most important.
Design to the behavior you have explicitly specified.

You can always redesign it when new specifications are added.

Know the components at your disposal.

Design some little systems with each component, just to see how they operate.

Can you describe each component?

What is it for -- its function?

What peculiarities must be watched for?

Design at least some system, even if it is not the best system.

Improving, a system may be easier than designing one from scratch.

Use a separate component for each function to be performed.

Analyze the performance of any candidate system you design.

What is the function performed by each component?

Are all the functions necessary?

The cheapest and fastest parts of a system are those that don't exist.

Can one component perform several functions?

Can you quantify the behavior along each dimension of interest?

How does the system behave under extreme conditions?

How long does it take for the minimum task?

What are the maximum performances it can achieve?

How can it fail and what happens when it does?

Explore the design space.

Don't be afraid to design many variations for the same task.

Each actual design tells you something about other possibilities.

You learn nothing from a design that doen't exist;

You can't even analyze its performance.

Fig. I. Good advice for designers.


previous | contents | next