Computing applications have increased dramatically over the past decade. However, the design and
implementation of complex application software remains expensive and error-prone. Much of the
cost and effort stems from the continuous re-discovery and re-invention of core concepts and
components across the software industry. In particular, application developers in more complex
domains have traditionally lacked standard "off-the-shelf'' frameworks. As a result, developers
in these domains largely build, validate, and maintain software systems from scratch. In an era
of deregulation and stiff global competition, however, it has become prohibitively costly and
time consuming to develop applications entirely in-house from the ground up.