These days (1999) I distinguish between Modeling and Designing. I say
"Designing" for me is manipulating space for things you know for sure (i.e. you have running automated tests for). --KentBeck
I love you - you do all designy things the reverse from me! -- Alistair (in a cheery mood on a sunny day.)
Just as a good design lets you change things easily, so does a good modeling language. From InformationModelingAndRelationalDatabases by TerryHalpin, the following criteria provide a basis for evaluating conceptual modeling languages:
A design is a model without any implementation-specific or technology-specific details. A model is a design with those details.
Programmers are prone to seeing a spectrum of detail between designs and models, but this is false. There is a very sharp distinction between the two determined by the fact that users of a system only ever see its design whereas implementors are most interested in the model details. The ExplicitUserModel of a system is its design.
Hmm. An architecture is a description (with visuals, perhaps) of a system containing modeling information, but lacking implementation or (sometimes) technology-specific details. A design is one solution to an architecture that fits technology to the system. The code is one particular implementation of the design that expresses a particular technology with specific details. This is the normal descent of granularity in designing. Eh?