Developing and consistently evolving quality software designs requires both theoretical knowledge and practical skills. The former can be communicated in a classroom; the latter has to be acquired with hands-on experience in software development. Our recent work on design evolution has resulted in a framework for analyzing the structural differences of subsequent versions of design artifacts, such as the logical design of OO software and the user-interface design of interactive applications. In this paper, we discuss how design-evolution analysis can be used to assist developers in their tasks of understanding the design rationale of the system at hand and to advise them on how to consistently maintain and evolve it.