Not surprisingly, this caused me to develop some opinions about how to develop reusable software, which in turn motivated me to write some papers. Designing Reusable Classes (with Brian Foote) has a set of design heuristics and was the first paper in which I talked about frameworks. Frameworks are a way of reusing the design or architecture of a system using object-oriented tecnology. Reusing Object-Oriented Design (with Vince Russo) describes frameworks in more detail. Recently, Don Roberts and I have been trying to document the process by which people create frameworks.
Frameworks led me to work on patterns, which are a way of documenting design expertise. You can use them to document how to use a framework, how a framework is designed, and how to extend it. This led to the Design Patterns book. For examples of how to document frameworks with patterns, see Documenting Frameworks with Patterns, Patterns Generate Architectures, and A Framework for Network Protocol Software. Last year I organized a seminar on patterns and frameworks at UIUC, and the students wrote some papers as part of it. I also teach a course on patterns for various companies.
Working on frameworks made me appreciate the need for better support for refactoring. Bill Opdyke wrote a PhD thesis on refactoring, and then we wrote a couple of papers on refactoring, one on refactoring inheritance hierarchies and one on refactoring component hierarchies. We are currently working to build a Smalltalk refactory, and have an early version you can use.
Recently my interests have shifted to patterns of business software. As a result, I helped organize a workshop on business transaction processing as part of the OOPSLA midsummer workshops.
I have a course on frameworks and how to write reusable OO software that I often give to companies.
Here is a thought from a kindred spirit.