Reusability is a feature of good software design.Is reusability an acceptable gloss (brief notation of the meaning) for good software design? Why?
Is reusability roughly synonymous with good design?
design;terminology
No.Reuse is an indicator of good design.  It indicates that the coupling of the system is loose enough and the cohesion of a particular unit is high enough to facilitate reuse without running into dependency issues or having to rewrite most of the code.Reusability is largely an illusion.  It is verifiably impossible to measure the reusability of a unit without knowing in advance where or how it is going to be used.  Many developers will try to design reusable components and often find out later that the specific aspects they tried to make flexible are exactly the ones which didn't need to be.I would use a different gloss: Testability.Now I am not an advocate of TDD, nor do I feel the need to unit test anything and everything.  But writing tests for a component will give you a very good idea of its coupling/cohesion characteristics, and very quickly.  If it depends on abstractions, then that is loose coupling; you will find it easy to mock out the dependencies and that suggests a good design.  If it has a clear purpose (see also Single Responsibility Principle) then its behaviour will be relatively intuitive, you will find it easy to figure out what to test, which again, suggests a good design.That does not, of course, guarantee a good design; the actual implementation or even the whole architecture may be entirely inappropriate for its stated purpose.  But at least it tells you that you are not working with spaghetti code or God Objects.Please, do not try to make wild guesses as to the reusability of a component, especially not to use as evidence of good design.  That is something you can only establish in hindsight, once it actually gets reused, and by then the design may have changed significantly.