The Sustainable MDA Manifesto: 1st draft


Following recent discussions, with MDA and Executable UML OMG’s initiatives in background, here is my proposal for a Sustainable MDA Manifesto. It’s a first draft, so feel free to contribute.


Even if one want to see them overlapping, modeling and programming are by very nature different activities. The “IT world” does love programming, mainly because it sounds material and pragmatic, but suffers from a considerable lack of back stand on why doing these programs and why this way. Modeling brings answers, by helping to focus on the problems or on key solution principles rather than on a detailed solution. Model-Driven Architecture is an approach where modeling platform independent requirements and solution principles deliver models that can be used to produce code. I believe this approach helps building sustainable applications (or even IT systems) provided that some principles are followed.

Game rules

The “MDA” term stands here for the OMG’s MDA idea, MDD, MDSD, any MDE forward approach (the lack of well established/shared terminology is a sign by itself  that the technologies are not yet fully adopted).

In MDA, the application code comes from hand written code (0-100%) + generated code (100-0%). The generated code comes from generation rules applied to the application model.

IT team primary roles are: end-user, business analyst, architect and developer.

Sustainable MDA principles

  1. Models are primary artifacts.
    Models have to be stored in the configuration management system. Generation rules too.
  2. One modeling level which merge business analyst and architect views on a Platform Independent Model (PIM).
    The model has class diagrams, and eventually sequence diagrams. In UML, stereotypes are used.
  3. Models are built by business analysts and architects, used by developers, and eventually used by end users if appropriate.
    Eventually, model/generation short iterations may be used for prototyping to get feedback from end users.
  4. You are free to use any modeling notation/tool, any code generation engine, any programming language.
    Modeling matters to minds before tools. PIM models have to be implementation agnostics.
  5. Don’t target 100% generated code at all costs. Think of MDA as a giant copy/paste engine to Not Repeat Yourself while coding.
    The aim is to fill up gaps in the needs/solution design workflow, not to replace developers.
  6. Agile practices do apply.
    Agile practices focus on primary artifacts. Models are. Generation rules are. Hand written code is also.
  7. Keep it in a white box.
    The key point is traceability. When debugging, a developer should be able to reach any model detail, any generation rule. Never use generation rules if you don’t own their source code.

The aim is to keep the thing simple, so that a whole team replacement does not makes it reverse to the “tell me what you want I will code it…” pattern.

Discussions: MDA/MDA: Don’t roundtrip, MDA/MDD: Model is not code!?, The New Executable UML Standards(see comments)

Background: I just read “Executable UML – A foundation for Model-Driven Architecture”, by Stephen J. Mellor & Marc J. Balcer, with foreword by Ivar Jacobson. A book notably reviewed by Martin Fowler & Edwin Seidewitz. The whole forward MDE historical background is described in the foreword, the preface and the first two chapters.

Featured image taken from