Software & Models
In software development like in many other industries, knowledge and understanding of the business is the key of the success.
Models are the abstraction for representing that knowledge.
As stated by Scott Ambler, modeling is a fundamental component of software development. Unfortunately, it's subject to myths and misunderstandings. Among these myths, is the idea that models are documentation, and the perception that modeling is a waste of time implying a heavyweight software process, and so complex that it requires extensive use of CASE tools to perform.
Actually, it's true that modeling can be very complex, but you can also create effective yet simple models that show only critical information instead of irrelevant details and that's where comes agile modeling. There are undoubtedly hundreds of types of model artifacts available for describing behaviors, structure and nature of data. From architecture documents, activity diagrams to business rules, data flows, etc.
It's important to understand how and when to apply this large variety of artifacts, since each of them is well suited for specific tasks. Model Driven Development (MDD) encompasses a lot of methods that are intended to define how to build an application while primarily working with those models artifacts.
One of the ambitious objectives of MDD is to let developers think the applications directly on an abstract modeling language, and thus raise the level of abstraction from the implementation to the design. The two most important MDD methods nowadays might be the Model Driven Architecture (MDA) from the Object Management Group (OMG), and the Software Factories from Microsoft.
MDA involves the use of the Unified Modeling Language (UML) to separate Domain (Business) knowledge from IT knowledge, and a set of mappings that automates the production of the application from the domain space to the technical IT space.
Software Factories involves nearly the same concepts, except that they didn't work with UML models, but rather with Domain Specific Languages (DSL), and make use of several other artifacts, data and patterns that they combine, also using mappings, to automate the production of the application.
Those MDD methods are indeed both attractive, even if they haven't yet proven successful, due to lack of tooling and/or reality check experience. However, what seems common, critical and strategic here is the ability to define model mappings and transformations to manage and automate transitions in software development activities.
For a few years, The Unified Modeling Language (UML) has been without any doubts the graphic notation which best orchestrates the object oriented development community. UML is a language, that defines diagrams for representing software models, but it's not a formal method, and needs to be used within a development process or methodology to be truly effective.
Over years, theoretical evolution of development techniques and processes using models caused real passionate debates (RUP vs. XP, or more recently Software Factories vs. MDA) but UML seems to stay as the most important standard for depicting and defining software models. On the other hand, practical application of UML-based methods remains rather complex and runs up against psychological barriers within development teams where "code and fix" stays the main method.
Agile models are more effective than traditional models because they are just barely good enough, they don't have to be perfect.
Supporting Agile Modeling is one of the core goal of Merlin.