Reusing design
Reusing code is great, but reusing design is better simply because it is one step earlier in the development cycle and it therefore saves even more work and time. Typical reuses of design are patterns (see Chapter 10). When doing proper object modeling, the design is where all the brainpower is. Once you have a proper design, creating the code typically means filling in the blanks (coding the actual methods, that is).
Reusing design also is much simpler than reusing code, simply because it is more abstract and you don't get caught up in implementation issues and details. Often, the organization of class libraries, variable and reference naming, and other implementation details make it very hard to reuse code (see Chapter 8). Those problems don't apply when reusing design. Good designs are more abstract and therefore more applicable to "classes" of applications and/or application modules.
When you reuse design, reusing code typically is just around the corner (given that you implemented an existing design at least once). By reusing design, you keep systems compatible, which makes it much easier to reuse code.