How is M# different from UML tools (e.g. Rational Rose)?


UML is a powerful modelling language intended for humans for documenting software requirements and design.

Several companies have attempted to generate code directly from UML models in order to automate software programming. Rational Rose is a famous example. In real world however, they have proved to be counterproductive.

On the contrary, M# has successfully and repeatedly delivered 4X productivity gain in 100s of projects, while UML code generators are fading away after a decade of trying.

To summarise the reasons:

  1. The code generated by M# is beautiful. It looks as if written by a careful programmer. The code generated by UML tools is messy and untouchable.
  2. UML is designed for analysts to document the requirements/design. M# is designed for development.
  3. Expressing complex implementation logic with UML (sequence diagrams) is very slow and difficult compared to C# programming.
  4. UML has no native support for code expressions. M# has native support for C#.
  5. UML is alien to complexities of Web (Http request / response, Html, Javascript, CSS etc). M# is built from the ground up for the Web architecture.
  6. UML has no easy support for ORM (object relational mapping) and databases. M# has native support.
  7. Developers are generally more comfortable working with textual code, than visual diagrams (imagine, copy, paste, etc)
  8. UML tools don't support source control and team work. M# does.
  9. M# is a full life-cycle tool. Anything beyond M# abstractions can be written in C# and nicely embedded in M# with no workarounds. Anything beyond UML simply can't be done. The only option will be to do them "later" in the code, and essentially move away from the UML models and switch to code. That of course defeats the purpose and is irrelevant in our agile / constantly changing world.