9 questions for Jos Warmer, MDD evangelist
It’s a year ago I did a summer post 6 questions to Maarten Steen, experienced researcher in the field of Model Driven Engineering. I thought it would be nice to repeat this kind of post. Jos Warmer, a well-known figure in the field of Model-Driven Development, took the time to answer 9 questions. He shares his long experience in the field of MDD and talks about Mod4J an open source Java / Eclipse project. Enjoy!
If you’re new to Model-Driven Development or Model-Driven Engineering please read 10 things you should know about Model-Driven Development first.
Can you please introduce yourself?
I am Jos Warmer, MDD evangelist.
Can you tell something about your work in the field of Model Driven Development?
I am one of the authors of the UML standard, I am chief architect of OCL. I have written books on OMT, UML, MDA and OCL. I have started the open source project Octopus as a proof of concept that you can generate much more code from models than was custom at the time. Since then I have setup model driven software factories at Ordina. The first one is SMART-Microsoft, which uses the DSL Tools from Microsoft to develop an MDD environment for creating administrative .NET web applications. We were among the first ones to take this use of the DSL Tools into production and we were the only one who worked with the new concept of multiple coordinated DSLs.
More recently I am lead of the Mod4j open source project. Mod4j gives you a model driven environment seamlessly integrated into Eclipse, which helps Java developers to become more productive and deliver higher quality applications.
MDD is getting more and more attention nowadays. What do you see as the main challenges and risks?
Risk: it is getting too much attention and the term will lose its meaning. I already hear people who draw up one or two global UML diagrams claim that they work Model Driven. This is a big misunderstanding. Model Driven means that the model drives (hence model driven) the software development and as such the model must be the source for you software. Therefore code generation from a model (or runtime interpretation of your model) is essential for model driven development.
A challenge is to make MDD flexible enough. Many MDD tools are too static, too inflexible, which makes their applicability very low. We need much more flexibility built into the MDD tools.
What’s the business case for MDD? Do you have some tips on how to convince your manager of MDD?
Faster and cheaper are obvious, but I think that it is better in the sense of guaranteed architecturally consistent and less errors which is more important. Another often forgotten point is the fact that average developers can be more productive with a higher quality in an MDD environment. By reaching such a wide audience MDD can make a big difference.
As systems become more complex, there is a need to be able to specify them at an abstraction level above the programming language. Otherwise we cannot cope with the complexity anymore. MDD will become more and more a need for this type of complex systems.
What are the success factors for Model-Driven Software Factories?
Understanding by the management. Most managers seem to think software development is a commodity which you buy as cheap as possible. Just hire some resources with a certain set of skills and your project will succeed. Looking at the number of failed projects this is a hopelessly naïve, but still widely held believe.
Can you say something about the difference between vertical and horizontal Domain-Specific Languages?
Yes :). First, the terms are of course misleading. Horizontal DSLs are defined as working at one abstraction layer only, while vertical go from the highest (business) layer to the lowest layer. Vertical DSLs are usually technical ones. An insurance DSL is therefore called a vertical DSL, and e.g. a service DSL horizontal. Of course, the insurance DSL works only at the insurance level, having only insurance concepts in it. This is actually very much horizontal. It might then be transformed into lower lever DSLs, but these DSLs are not part of the insurance DSL.
I think technical DSLs will be much more effective in the short term, because we have a much better understanding of the similarities in technical solutions. On the business level we have limited experience with finding general concept, and especially in defining them formal enough to base a DSL on.
What do you think about code generation vs. model interpretation / execution?
Nothing much, to me the essence of MDD is that a model can be executed automatically. Whether this is through code generation or interpretation is just an implementation issue. Generation and interpretation have quite different characteristics and it depends on where and for what reason you use MDD which one will fit best.
For example in Mod4j we have chosen code generation for two reasons. First the users of the Mod4j DSLs are developers and by giving them the generated code from a model, they can understand the model in terms of what they understand (code). Also, as we want to use Mod4j with many different customers we wanted the use of MDD to be seen only at the development side of projects. The deployment and production should never see and never need to know how an application is developed. Hence code generation, resulting in a standard Java application fit best. A runtime engine that interprets the model would intervene too much with many operation departments.
Should MDD be aimed at making programmers more productive or is the real advantage in enabling business engineers to develop applications?
If programmer become more productive and work at a higher level of abstraction, then what differentiates them from business engineers. I think that we should start with making developers more productive, they already have the skills to formally specify anything in a model, because code already is such a formal specification.
On the longer term I expect that we will get a new type of role, which could e.g. be called business engineer. This will be someone who is a cross-over between a developer and a business analyst.
Over the past years of seeing MDD approaches being used I have learned that DSLs at the business or specification level will become the main success story for DSLs. Formally trained business experts who can specify what they need unambiguously and then get software that though automated processing of the models does exactly what they asked for becomes possible.
It solves the huge problem with the current natural language based specifications that still often result in not the system you actually wanted. This specification / requirements problem is probably the biggest problem we have in software development today.
Can you explain the goals of Mod4J and how to get involved?
The slogan for Mod4j could be Developer Centric Modeling. The target audience for Mod4j is the Java developer, which is different from some other MDD projects that try to target business oriented people. Several characteristics of Mod4j follow directly from those goal:
- Because the developer is central, Mod4j integrates with Eclipse, giving developers one environment to work in.
- Developers do not need to learn a whole set of new tools just because they are using models. Therefore Mod4j uses a textual syntax using code completion an syntax highlighting exactly as the developer is used to in Eclipse. Also because a Mod4j model is a text file, all text based tools like all the diff & merge tools, SCM tools (SVN, CVS, …) etc. can be used as-is on Mod4j models. This ensures that Mod4j has a very low learning curve (developing is hard enough as it is).
- No 100% code generation. Models should have added value, therefore we do not focus on full code generation. If a model is as complex as code, or is as much work to create as the equivalent code we use code. Models are applied only when they are easier to create and save work. Mod4j strives for a best of both worlds approach.
- Flexibility: Mod4j is based on the idea of having a collection of small DSL’s which you can use independently. So there is no all-or-nothing question, you can use the DSL’s that you need and leave others out. Mod4j being open source is the other necessary ingredient for being flexible. If you need something that is “almost” what Mod4j gives, you can go in and change it yourself.
Mod4j is not only open source, but more specifically open development. This means that anyone can join the Mod4j team. Just provide added value by submitting code and after a while you can become committer. My personal Mod4j “nirvana” is that more and more people add new DSL’s for new domains to the existing one and add different code generators. In the end there should be a large collection of DSL’s and anyone who starts a project can then pick and choose from the available DSL’s and only uses what he needs.