The Art of Reuse lies much less in designing software components to be reusable than in
- finding components that can be reused in a new scenario
- refactoring such components for both its “old” and new usage scenarios
- not breaking the system with these changes.
So in short: the Art of reuse lies in reusing, not in over-engineering.
This is where programming / design zen and good tools come to play together. There’s not much I know of that combines the power of a Smalltalk IDE for finding and digging into candidates for reuse. When combined with SUnit and the Refactoring Browser (and a good developer, of course), a Smalltalk IDE is surely among the top 3 environments for enabling reuse.