work for small problems but it introduces signi?cant accidental complexities when tackling
larger problems. Notethattherealchallengehereisnothowtodesignthesystemtotakeap- ticular aspect
into account: there is signi?cant design know-how in industry on this and it is often captured
in the form of design patterns. Taking into account more than one aspect can be a little harder
but many large scale successful projects in industry provide some evidence that engineers know
how di?erent concerns should be handled. The real challenge is reducing the e?ort that the
engineerhasto expendwhengrapplingwithmanyinter-dependentconcerns.For example in a product-line
context when an engineer wants to replace a variant of an aspect used in a system she should
be able to do this cheaply quickly and safely. Manually weaving every aspect is not an option.
Unlike many models used in the sciences models in software and in lingu- tics have the same
nature as the things they model. In software this provides an opportunity to automatically
derive software from its model that is to - tomate the weaving process. This requires models
to be formal and the weaving process be described as a program (i.e. an executable
meta-model) manipul- ing models to produce a detailed design. The detailed design produced by
the weaving process can ultimately be transformed to code or at least test suites.