Micro-Design v/s Macro-Design v/s BUFD
My 2 cents to help with all the confusion out there with the word Design. (when I say Design, I really mean Object Oriented Design).
When we are developing and hence designing using Test Driven Development (TDD), the meaning of the word design is very different from what it means in the context of Big Upfront Design (BUFD). Even if we are not referring to BUFD, the amount of design required can vary significantly. Some people even challenge the whole notion of design being different from code. There has been (and will continue to be) a disagreement regarding how much to design before writing code?
Of late I find myself using the phrase micro-design to refer to the baby steps in the evolutionary design process, the kind of design that is really driven by the unit tests. While micro-design is very important and an integral part of development, there are times when you need a slightly bigger picture. For Ex. sometimes a feature can span across the software system and scope of this design is slightly more than micro-design, but very less compared to BUFD. I refer to the design step of this scope in the evolutionary design process as macro-design. I find prototypes and acceptance tests are really great at driving macro-design.
I find it really useful to call out to developers that this is micro-design step v/s this is macro-design step v/s this is BUFD.