Johan den Haan
In this installment of our Voices series, we are thrilled to have an interview with Johan den Haan, the Head of Research & Development at Mendix. Mendix offers the Business Agility Suite – a visual modeling approach that optimizes collaboration between business & IT in creating agile business applications. Mendix has been recording annual triple digit growth and is recognized by leading analyst firm Gartner as a “Cool Vendor”.
Johan has a broad experience in Model-Driven Engineering, specifically in designing and developing Model-Driven Engineering tools and environments. The main focus of his work is the development of a service-oriented, process-centric, model-driven programming model. Asides from our interview, Johan shares his experiences in the field of MDA, MDE, MDD, DSLs, SOA, and SOBA on his blog: www.theenterprisearchitect.eu
Our thanks to Johan and now on to the interview…
PBE.NET: How has the use of patterns benefited you in creating Mendix?
Johan: Let me briefly introduce Mendix before answering your question. Mendix offers the Business Agility Suite, a platform to create, deploy, and manage agile business applications. The Business Agility Suite provides a visual modeling approach that optimizes collaboration between business and IT. These visual models can be executed on the Mendix platform (in the Mendix Cloud or on-premise) as a working application.
Mendix is based on the concept of Model-Driven Development (MDD). MDD aims to raise the level of abstraction in program specification and increase automation in program development. The idea promoted by MDD is to use models at different levels of abstraction for developing systems, thereby raising the level of abstraction in program specification. An increase of automation in program development is reached by using executable model transformations. Higher-level models are transformed into lower level models until the model can be made executable using either code generation or model interpretation. In case of Mendix we directly interpret the models specified by the users of the modeling environment (i.e. model, deploy, use your app).
The modeling languages used are fairly high-level and abstract away a lot of details, meaning that it is easier and faster to create applications. The challenge in designing such modeling languages is to decide what constructs should be part of the language and what elements should be part of the interpreter. If an element is part of the interpreter it can’t be changed by the users of Mendix, meaning it is the same for all applications. During the design (which is a continuous process) we analyzed a lot of customer applications for common patterns. We divided the codebases of customer applications into variable and static parts, meaning:
- Static: the same for all customer applications.
- Variable: differs among the applications.
The static parts have been put in the interpreter; the variable parts are covered by the modeling languages.
To cut a long story short, the essence of the Mendix platform is a collection of patterns in business applications which can be configured using high-level, visual models.
So, did patterns benefit us in creating Mendix? Yes, it all started with patterns!
PBE.NET: How did you find the patterns that you’ve collected? Are there any particular best practices or challenges that you can share?
Johan: We found the patterns by analyzing common business / web applications. One of the key lessons is to release as early as possible. Create a basic pattern collection providing some real benefits for users. Make sure there’s enough value to start using your languages and interpreter / code generator. Once people are building real-world applications on top of your patterns you can start analyzing the code they produce in addition to your languages and patterns to find common patterns to add to your toolset. In this way your languages and interpreter / code generator can grow in a manageable manner.
PBE.NET: What challenges did you encounter in using patterns?
Johan: The main challenge of using patterns in this way (i.e. finding the right abstractions for MDD) is to find the right balance between abstraction and flexibility. In principle our goal is to leave as much details as possible out of our models. However, on the other hand you want to be able to specify details to increase the flexibility of the platform. See also the lessons we learned during the development of our platform.
PBE.NET: How has the use of patterns benefited the users of Mendix?
Johan: We can distinguish between two different types of users:
- Business engineers: the ones using the Mendix Business Modeler to create agile business applications. The main benefits for them are that they don’t have to focus on technical details; they can focus on creating an application which really supports the business.
- Customers / users of applications build with Mendix: the main benefit is “Business Agility”. The Mendix platform is designed to make software development easier, faster, and more flexible. Hence, organizations can be more agile, they are not limited by long software development cycles. There are a whole bunch of additional benefits of MDD, which are not specifically pattern related, but nevertheless, important for customers.
PBE.NET: What role have Domain-Specific Languages played in Mendix?
Johan: The modeling languages used in Mendix are so-called Domain-Specific Languages (DSLs). We have designed specific languages for all aspects of a business application (e.g. domain model, user interface, logic, rules, security, integration). In that way we could keep the languages small, targeted, and simple based on the patterns in the different aspects of a business application.
PBE.NET: How do you manage your patterns?
Johan: I think the use of patterns in the Mendix platform itself have been covered thoroughly by now. Let’s focus on patterns in the models created in the Mendix Business Modeler.
We have introduced an App Store to share templates among users of Mendix and to manage the knowledge and patterns captured by users in models for all kinds of businesses. These templates give a user the opportunity to learn from others and to reuse implementation parts. Some of these templates grow into industry-specific business patterns.
PBE.NET: How did the use of patterns impact your application quality?
Johan: As the App Store is growing it is a bit premature to jump to conclusions, but the first signs are promising. People learn from the provided templates and share their own.
Johan: The patterns shared in the App Store are all pattern implementations. From within the Modeling environment you can access the App Store and directly download model templates in your current project. These templates are formally defined and can directly be executed on the runtime environment.
PBE.NET: If you used pattern implementations, where did the idea to use pattern implementations originate? Were there challenges in convincing others that this was the right path forward?
Johan: The basic idea of our product is to empower domain experts to be involved in the actual software development. We also focus on increasing the productivity of our users. Both of these ideas have led us to using pattern implementations instead of pattern specifications.
Furthermore, while the patterns (model templates) are defined in our high-level modeling languages, they are fairly easy to read and comprehend. In others words, there is no big difference between the pattern specification and the pattern implementation in when talking about patterns in Mendix models.
PBE.NET: Looking forward, how do you see patterns, DSLs and MDD evolving?
Johan: Patterns are the basic concept of MDD, as abstractions are based on patterns. As MDD will become more commonplace I think we will see a growing attention for patterns in models. I think the pillars of the future of software development are Cloud, MDD, and App stores.