It has been said that computer science is the discipline that believes that all problems can be solved by an adding another level of indirection. That statement has been modified in some cases to also include levels of abstraction. Development teams use layers of abstraction to tackle the two chief enemies of software development: complexity and change.
The figure above shows a representation of two categories of abstraction development teams employ: language abstraction and platform abstraction. Ideally these two columns work together to synergistically tackle the problems of change and complexity. It can be, however, that one column can be far ahead of the other and so we get a disparity between the two as shown in the next figure.
When this happens, the lack of parity between the language abstractions and the platform abstractions starts to work against, not for, the development teams. The developers tools start to become part of the problem not part of the solution. This becomes particularly onerous when the rates of change and complexity increase to new hitherto unreached levels.
It has also been noted that abstraction is the most important concept in software. We can complement this statement by adding that the opposite of abstraction, refinement, is of equal importance.
Model Driven Engineering (MDE) is all about creating new levels of language abstraction that directly target particular domains. These new levels of language abstraction work seamlessly with the other levels of language abstraction below them as well as with the platform abstractions to tackle the increased levels of complexity and change faced by today's development teams.
Model Driven Engineering solutions can be effectively implemented using a tool called a Language Workbench. It is a tool that provides a number of facilities for implementing Domain Specific Languages. Below is a diagrammatic representation of a language workbench.
MDE Systems' staff are experts in using the various aspects of language workbenches to create effective domain specific modeling lanaguages for complex domains. We have done it for many domains some of which you can see below: