<p>Software maintenance and harvesting reusable components from software both require that an analyst reconstruct the software's design. Design recovery recreates design abstractions from a combination of code, existing design documentation (if available), personal experience and general knowledge about problem and application domains. The author shows how to extend the automated assistance available to the software engineer for this process. He explains the concept of design recovery, proposes an architecture to implement the concept, illustrates how the architecture operates, describes progress toward implementing it, and compares this work with other similar work such as reverse engineering and program understanding. Much of the discussion is based on a model-based design recovery system called Desire.</p>