Etikettarkiv: model driven development

Ruby on Rails

Lately I have been playing around with Ruby on Rails, mostly to learn a new technology and also to be inspired on what more modern development environments have to offer.

My main source of information is the excellent Ruby on Rails Tutorial by Michael Hartl, who incidentally have made some interesting work on why Pi is wrong, but that’s another topic.

Anyway, these are my reflections on Ruby on Rails…

My first thought is that Ruby on Rails is an example of where we have come quite far with standardized architectures for a domain that is somewhat large, but nevertheless specific.  Over the years there have been many attempts of creating a standardized environment for a specific type of system where the intention has been that developers should only focus on functionality and design, whereas the more technical and architectural issues are left to implementers of some sort of framework.  My latest post was about model-driven-development and this is one (or actually several) example of this kind of idea.  But mostly these attempts have fallen short in one of two ways.  Either the framework is not detailed enough so that any real applications cannot be created without significant framework tweaking/development which defeats the purpose.  Or the framework has been too specific which makes the sweet-spot for applications developed by it very small and therefore few systems benefit from it.  Of course one could argue that Ruby on Rails is an example of a very specific framework for a specific type of system, but that specific type of system (OLTP systems on the web) is indeed quite large in terms of number of applications currently being developed.

Secondly, Ruby on Rails have many variations on how specific things are done.  I guess that this is more a feature of the language Ruby more than the framework Rails.  This is both good and bad.  It is good because it allows for flexibility in development and also allows for a much larger focus on the readability of code.  But it is also bad because it makes the environment hard to understand for beginners.  If two things that look different are actually examples of how the same problem is solved, this could be quite hard to see and this makes the learning-curve steeper.

Third, on a more personal level, I have not quite yet gotten used to using a non-typed language such as Ruby.  Sometimes the old Java-developer in me have a hard time seeing the things that can, and should, be done by using the type-system more creatively.

Why is it so hard to sell the idea of model-driven-development (MDD)

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.