Last night I was listening to a colleague who talked about his experience of using a model-driven-development (MDD) approach to develop information systems to support business processes. The tooling and approach that he talked about comes from the Swedish company Capable Objects.
I am a bit indecisive of what I should think about what he talked about…
On positive side, I am fully convinced about the merits of MDD in terms of speeding up development, producing more consistent and higher quality systems. After all: I have spent 9 years at Rational Software and much of that time I was advocating modeling and MDD to a lot of people and organizations.
On the negative side, however, this is something the industry has been talking about for years. As mentioned above, I too was one of those people talking about it. But the results of all this talk are very poor. There are certainly examples of successful MDD usage for specific domains at specific organizations, but the larger-scale usage that everybody was dreaming about 10 years ago has not materialized. Why is that? Why has this been such a hard sell? Why has the industry not embraced MDD?
My theory for the reasons is divided into a few parts
First, the agile movement of the past years has put less emphasis on modeling in favor of doing coding directly. But proponents of MDD could really use the agile movement to their benefit, since agility puts a great emphasis on development velocity, which is something that MDD should provide. But this has not really happened…
Second, the available tooling for MDD has not been (at least historically) very good. Either it has been too simple, which does not give to the level of detail needed to tweak and configure the finished system in an appropriate manner. Or it has been too complex which makes the transition to MDD too hard and which also requires significant consulting efforts implementing it, which means that the adoption of MDD moves very slowly. Also, MDD means that much work is required to produce the transformation mechanisms where models are transformed (perhaps in several steps) into executable systems, and this work is only relevant for a rather specific type of systems, which means that this work needs to be repeated across system types.
Third, there has been a significant pushback from the developer community. Perhaps this pushback has at least some of its roots in the fear from developers of loosing their jobs when the level of abstraction is raised. Proponents of MDD usually talk along the lines that MDD is so simple that the business people can do the development themselves, which of course scares the developers. Personally, I do not believe that line of reasoning. Business people usually have a hard time understanding models so we would still need some type of developer to produce the models.