And what do you think evolution of the model-driven market is going to be? Will we witness a wider adoption of MDD by big companies?
I gave him this answer:
There will be a growing adoption of MDD but people won’t call it MDD. It’s more a movement that includes, what I see as the three main trends in the evolution of software development: cloud (avoiding infrastructure issues), MDD, and app stores (in a broad sense: not building an application from scratch but by combining pre-built components from other sources).
I don’t see myself as a futurist, hence you should take this answer with a pinch of salt. However, I have this blog to share my musings, so give me some time to explain my reaction on Jordi’s question with some more words.
As I stated I see three important elements in the future of software development: Cloud, Model-Driven Development, and App Store’s. Let’s examine each element in more detail.
The word Cloud is used a lot nowadays. It is, however, a rather broad term. I recently wrote an article explaining the different layers of cloud computing and more details about Platform-as-a-Service (PaaS). The main essence of cloud computing is that it abstracts away from infrastructure and, in case of Software-as-a-Service, from all platform related elements. A well-known example of Software-as-a-Service is the Google Apps suite. E-mail, documents, spreadsheets, calendar, drawings, etc. in the cloud instead of installed on your local computer. You don’t have to think about storage, backups, patches, etc. Just use the software from every device with an internet connection. Quite some big companies already have made the move from Microsoft Office to Google Apps.
In the consumer market Apple is working into the direction of ‘cloud’ with Mobile Me and a cloud-based iTunes.com based on the technology bought from Lala (streaming media). The (future) Apple world is a world of fancy devices connected to all kind of cloud services. All information is living in ‘the cloud’ and can be accessed from your iPad, iPhone, iMac, etc.
From a software development perspective I see cloud as a way to automate the deployment phase
of software development. After developing the software you just upload it to a cloud environment to deploy and use it. I won’t be surprised that in a couple of years development itself fully takes place in the cloud (i.e. your IDE is also hosted as-a-service).
Model Driven Development
The second important element in the future of software development is Model-Driven Development. There has always been a quest for higher-level and more productive languages. The advantages of Model-Driven Development (MDD) are unavoidable in my opinion. The question, however, is what kinds of MDD will remain in the future? Visual languages used by domain experts, like in the Mendix Platform? Smaller abstractions for developer productivity like Ruby-on-Rails? Self-made Domain-Specific Languages (DSLs) with use of Xtext or MetaEdit+?
The combination of cloud and MDD is a powerfull one. MDD is a way to ‘automate’ development
, cloud is a way to ‘automate’ deployment
. I think cloud – Platform-as-a-Service – cannot without MDD. Small contracts are essential for a PaaS solution, hence I think we will see more and more domain-specific PaaS
The third important element I see is the App Store. The first thing you think about is of course the successful Apple App Store to download apps for your iPhone, iPod, or iPad. In the slipstream of Apple’s success other App Stores have seen the light. These App Stores are not limited to the field of mobile computing. Google launched an App Store with add-ons for Google Apps, there’s a Java Store (beta version) available to download and share Java applications, and Microsoft has planned to launch an App Store together with Windows 8. Recently, we at Mendix did launch the Mendix App Store, fully integrated with our Modeling environment to share and download template models, widgets, or full-fledged business components.
I think App Stores will fullfill an important role in the future of software development. While MDD will speed-up the development of applications from scratch, App Stores will play a role in searching for predefined models to combine them into a new business application. App Stores combined with MDD will give the opportunity to download and share models which can be adapted and turned into working software by the MDD environment. App Stores combined with cloud computing will give the opportunity to search for available cloud services to use in your new application. In the latter case you do not download a model to execute and host it yourself, but you connect to and use a service hosted by a third-party.
To make things a bit less fuzzy let’s look at an example. Consider the following: you have to build a web shop for a company which sells flowers. The flowers are sold to flower shops. These flower shops call the company to order flowers, but the company decides to provide an additional channel: a web shop.
You start by creating a new application model in your modeling environment. The modeling environment is connected to an App Store and you search for a template for web shops. Once you found one, you download it into your modeling environment and you start adapting it for your specific needs. You create and change graphical user interface elements by adapting the models. You also specify your product details in the domain model. After the changes you deploy and run the model on your own computer to see and click-through the working application.
Once you have your basic web shop ready you need to connect it to the back-end system of the company. They happen to run SAP. Hence you search in the App Store for an adapter to connect with SAP. You download it into your modeling environment and define the mapping (using an easy-to-use DSL of course) between the data in SAP and the data in your web shop as defined in your domain model. Once again you deploy and run your application to see it in action.
Now it’s time to implement the payment part of your web shop. Let search again in the App Store if we can find a cloud service providing all kinds of payments services. We download the client-side models for this service into our modeling environment to connect to the payment service hosted by a third party. We do the same for a delivery service, which delivers the flowers from the company to the customers.
We now have a fully functional web shop. How long will it take to build one? You can do the math!
After using this first version for a while, customers want to receive email notifications for special offers or changes in prices. The company wants to see all kinds of statistics. So, you power up your modeling environment again and start changing the models. First you add a form for users to configure email settings. Based on these settings you send them emails using the build-in email activity. For the customer you design some reports using a Reporting DSL, i.e. you create some queries based on your domain model using a wizard. Afterwards you create a form and you add some graph widgets to present these reports.
Version two will be up-and-running in a couple of days! Deployment for production use is of course a matter of uploading the model to a cloud environment containing the right engines to execute your models.
Just my two cents, let’s see how many comments it takes until I have to change my view on the future of software development ;)
What’s your vision about the future of software development? What movements will we see?