If the TheSourceCodeIsTheDesign, then what is normally called "the Design" really is one level more removed from the actual product than the design of a physical product. No wonder software design tends to be so abstract! Shouldn't this shift in perspective have implications for our thinking about software design? Any thoughts? --FalkBruegmann ---- Instead of TheSourceCodeIsTheDesign, we should say, "Designs should be executable". -- DaveHarris ---- I have always described a "Pattern" as the DesignOfTheDesign. My reasoning is that a "Design" is the model that the source-code renders. Certain combinations of classes and methods appear so frequently that we begin to give them names, and think of them as entities -- I'm thinking of things like "Stack", "Queue", "RingBuffer", and so on. I call the collection of these things the "Design" of the code. Certain combinations of these design elements appear so frequently that we begin to give *them* names, and think of *them* as entities -- I'm thinking of things like "Strategy", "Visitor", "Factory", and so on. I call this DesignOfTheDesign the "pattern", in an Alexandrian sense. For me, this relationship seems to hold everything together and helps me keep the abtraction levels in order. Please recall that I assume that everything is expressable in a common reflective language, so all three elements can be described and manipulated within the same environment. -- TomStambaugh