Emerging design
Christopher Van der Westhuizen, Ping‐Hei Chen, André van der Hoek · 2006
Most abstractions in software engineering are used for one of two purposes, either 1) for guidance, in which an abstraction created up-front serves as a roadmap for the next activity, or 2) for understanding, in which an abstraction serves to explain the current state of the system at a given point in time. In either case, the abstraction tends to be static: once it has been created, it is not updated very often. Our research distinguishes itself by developing a dynamic abstraction, emerging design, that both guides and helps in understanding, while still able to fulfill new roles in the development process. In this paper, we will focus on the following three roles: (1) coordination: allowing developers to understand how their work influences that of others and vice versa, (2) detecting design decay: preventing unintended, undiscovered, and unauthorized design changes, and (3) project management: knowing which parts of the code are stable, incomplete, or in flux.