From Candidate Classes to Completed
Design
Methods used to move to final design:
Reuse:  Wherever possible use existing components, or class
libraries.  They may need modification.
Restructuring:  Change the design to improve, understandability,
maintainability, etc.  Techniques include merging similar
classes, splitting complex classes, etc.
Optimization:  Ensure that the system meets anticipated
performance requirements, e.g., by changed algorithms or
restructuring.
Completion:  Fill all gaps, specify interfaces, etc.
4