The significant rise in the development cost of modern software systems is often directly related to their increasing scale and complexity. Some of the issues surrounding the development of these systems are being addressed by model driven engineering (MDE). MDE has become a widespread approach whose objectives are to simplify and reduce the cost of software development and maintenance. MDE aims to achieve this by addressing two important issues: the complexity of development platforms and the inability of implementation languages to concisely and completely express domain concepts. Although there are various approaches to MDE, two key aspects appear to be common to all: domain specific languages (DSLs), and transformation engines and generators.