The artifacts constituting a software system often drift apart over time. W
e have developed the software reflexion model technique to help engineers p
erform various software engineering tasks by exploiting-rather than removin
g-the drift between design and implementation. More specifically, the techn
ique helps an engineer compare artifacts by summarizing where one artifact
(such as a design) is consistent with and inconsistent with another artifac
t (such as source). The technique can be applied to help a software enginee
r evolve a structural mental model of a system to the point that it is "goo
d-enough" to be used for reasoning about a task at hand. The software refle
xion model technique has been applied to support a variety of tasks, includ
ing design conformance, change assessment, and an experimental reengineerin
g of the million-lines-of-code Microsoft Excel product. In this paper, we p
rovide a formal characterization of the reflexion model technique, discuss
practical aspects of the approach, relate experiences of applying the appro
ach and tools, and place the technique into the context of related work.