Model driven development and code generation comes in many different forms, and all have the same promise: faster delivery of business value. Not every form has been even successful in realizing this promise. Where some have died silently in their own complexity, and some are standing still in innovation for years, there are other ‘generation’ solutions who are getting the momentum of success.
Learn about the MDD approach and how you can apply it to achieve the maximum business value and reduce the cost of solution development.
Article from 2006 - Implement model-driven development to increase the business value of your IT system- http://www.ibm.com/developerworks/library/ar-mdd1/
Model driven development is about the changing the abstraction level of the used programming languages to realize business value. When you make the language closer to the business solution than C#, C++, Java or any other programming/ machine language it is easier, and more accurate, to describe the solution. When you can run this, more abstract, language (or model) the same way as program languages are executed, than you have a model driven approach. More high level languages, describing the business can be used by the business to describe their own solutions. And, more low level abstraction languages and models can be used by engineers to describe a more technical solution. With these new languages it is easier to communicate about the specific domain, a domain specific language.
In Application Lifecycle Management * languages and models describes the different domains. A specific languages used to describe the business domain are often technology and platform agnostic. While specific languages used to describe the solution are often implementation and platform independent, which gives less re-use.
* Application Lifecycle Management is about the whole spectrum of software development, the processes that are used, the people who use it, make and maintain the applications and about the tools and technology that are used during the complete lifecycle. Application Lifecycle Management is not only about software development and a grown-up development environment but also about business, operations and the connection between these domains.
In both domains, the business and development, domain (often called the problem and solution domain) new possibilities, innovation and business opportunities are insight. But, for both domains making the decision to adopt model driven development need to be taken careful, a well tradeoffs process needs to take place.
With business domain specific languages the promises to gain benefit of fast realization of business value are the biggest.
It is a language used by the business / domain experts to describe the ‘problems’ [needs], the models can be used to generate code or can be executed on a platform.
Vendors who deliver technologies to create and execute Business DSL’s are for example MetaCase (http://www.metacase.com/) and Mendix (http://www.mendix.com), both mature in the solutions they provide. Microsoft has Domain Specific Languages capabilities in its development IDE (http://msdn.microsoft.com/en-us/library/ee943825.aspx), and Eclipse has one of the most used DSL tools addin (http://www.eclipse.org/modeling/ based on the open source project openArchitectureWare). MDA based on UML is another technology for MDD http://www.omg.org/mda/
There are a few adoption challenges with business domain specific languages. One challenge is the clear description (Meta language / the grammar) of the language. Now day’s business are moving and changing faster than the language can evolve. Microsoft changed to a Services and Devices Company, the language used to describe the business needs to change too. And, creating a specific business specific language isn’t that easy.
Another challenge is the execution of the models (languages) on the platforms. The language must be interpreted by the platform to run, or compile to executable code by the platform (see image above). Creating a compiler or an interpreter is very specialized and technical work. Maintaining these will need some effort.
The last challenge has to do with team work. Probably multiple people will work on the business models. Multiple versions of the models will live in different stages of the development process. Maintaining these model versions, work together on one model and find the differences between versions of models is a challenging task. Current available development and modeling environments aren’t mature enough to capture this.
The above mentioned technology vendors target these challenges, and while the innovation of platforms evolves they also need to evolve to execute the models on these new platforms. This will definitely help to lower the maintenance of software systems. Innovation goes slow and only for specific cases promise of faster business value is reached, when you have such a case it definitely pays off to investigate the possibilities.
Technical domain specific languages are used by the team to describe the solution domain. Where business domain languages have the benefit that the subject matter expert can describe the problem. With technical domain specific languages (and models) you loss this benefit. But there are already a lot of specific languages in place for the solution domain, which getting more and more mature.
There are more technical specific languages for one specific domain. For example SQL is a language for working with data. Another specific domain language is WiX for describing installer packages. On the other side there are also languages which are closer to the business. For example Smart User Cases ( http://www.smartusecase.com ), which uses specific User Case stereotypes to describe the business needs and generates with accelerators code, test cases or any other project artifact when there is an accelerator for. Code is generated and executed on the platform, so it is easy when solution is described to generate code for another platform.
Both most technical and business languages models are having the same adoption challenges. Hard to create the language, stay in sync with the platform innovations and use them in teams. But, technical languages are easier to adopt for multiple reasons.
One reason is that the created models and languages can be reused more often, they aren’t business specific, but can be used for multiple business domains. Which makes them more mature, robust and they are probably maintained by a technology vendor or open source group. And, innovation will move faster with more people using them.
For example Visual Studio LightSwitch is an addition to the Microsoft development platform to create business applications for the Desktop and the Cloud. Visual Studio LightSwitch generates the underlying infrastructure. The database, transaction mechanism and helps you craft the screens, which when you choose to build a HTML Client generates a responsive website which runs on all kind of devices.
Not only code generation (or model interpreters) have to be used for domain specific languages also specific frameworks for specific tasks are enablers for faster (and more reliable) realization of business value. Java is a kind of famous for all the different frameworks created for it. Examples are more technical Frameworks like the Spring Framework, but there also have been implementations like an Open Healthcare Framework.
In the same area as Frameworks you can find API’s, Application Programming Interfaces. API’s are the new enablers of fast business value. For almost every business problem there is an API available. The difference with Frameworks is that you don’t have to incorporate them in to your solution, you just use them.
The website ProgrammableWeb.com has a collection of 9920 APIs. With additions every day on all kind of categories, ready for business use with as an interface, a language to help with a specific technical or business domain problem. Use them in your solutions for fast enablers of specific functionality or stich several API’s together with additional business functionality and great a valuable mashup.
On the same technical side as API’s, as fast business value enablers, are Cloud Services. Cloud Services provide specific functionality for systems. The biggest difference with API’s is that Cloud Services provide more the technical infrastructure where API’s provide more business functionality. When your App needs to work with data, authentication or push than cloud service are a fast enabler.
A good example are the Microsoft Azure Mobile services and Media Services. Services that provide configurable functionality with generated code for your systems. It is possible to create it from scratch, but instead of hours it will take days to realize it.
In the area of Cloud Services innovation really moves fast. Services to enable faster business value are added almost on a daily base.
Other Cloud Services where innovation goes fast are services which helps development teams to do their job. Examples are Test and Development Platforms as a Service preconfigured and ready to use environments to quickly start working. Others examples are Load Testing from the Cloud and automated test execution on the Cloud.
Generate systems in the browser
One last innovation which takes off, are the web-based / do it yourself system generation sites. Where cloud services like Media Service from Azure provide generate code which you can incorporate in your code base. These generators are providing ready to use systems from the Web or Apps. A very successful is Windows Phone App Studio. Windows Phone App Studio is a website to generate a full working Windows Phone App in minutes, published to the store.
Another one from Microsoft is Microsoft “Project Siena”.
A very interesting innovation these kind of ready to use generators will available more and more, delivering the promise of code generation. But the generated solutions aren’t business ready, not unique enough, and need defiantly customization afterwards. I actually think it is create for trials, before doing the realy.
Insight on code generation innovation.
Code generation and model driven development are technologies with a promise to realize faster business value, but they are not always as flexible as the business need these days.
Specific to the situation it fulfills this promise. Where the generation from models (domain languages) on the business side are even more specific and should be analyzed careful be for used. But, when the business models are well implemented they will bring the most and fastest business value. Innovations on this area goes slow.
On the technical domain, code generation from models or specific languages (Lightswitch, Entity Framework) are well adopted by teams. The same for API’s, which add easy business knowledge to the systems. Both can benefit from and should use each other. Innovations goes faster in this technical domain, just due to the more frequent use than on the domain modeling side.
Fast innovation takes place in the Cloud Services stack, configurable services with ready to use code in your systems. More and more services will get available in an increasing pace to deliver that business value fast for your business users.