New Era of Development with Model-Driven Development with Code Generation

  • MBSE – Model-Based Systems Engineering
  • MDD – Model-Driven Development

Historically, each major increase in abstraction has expanded the developer population by roughly 10×, ushering in a new era of development.

YearEraNumber of developers
1985Assembly~ 0.3 – 1 million
1995C / C++~ 5 – 10 million
2005C++, Java, PHP~ 15 – 20 million
2015Mobile / Cloud~ 20 – 25 million
2025Mobile / Cloud / AI~ 50 million
2035Vibe Coding~ 300 – 500 million
Developers worldwide

The Case for MDD

Academics have long championed MBSE, but they often (1) lack industry experience and (2) fail to carry ideas through to production. Still, the core thesis is correct: model-based software engineering with code generation is superior to handwritten code. This aligns with empirical evidence showing that declarative programming outperforms imperative programming in terms of correctness, complexity, and maintainability.

My industry experience at Adyen and Revolut confirms this: even though both are overwhelmingly Java-based, functional programming—via Java Streams, for example—and strict immutability are heavily emphasized, often required, reflecting industry recognition of their benefits.

Top-Down vs. Bottom-Up

In practice, developers often start by creating a Systems Design document with high-level and low-level diagrams outlining their proposed solutions. These documents are reviewed and approved after a week or two. However, during implementation—especially in companies that require TDD—development immediately becomes “bottom-up.” Developers add missing details, adjust features that don’t fit perfectly, and sometimes unintentionally omit elements. By the time the code reaches prod, it’s significantly diverged from the original design, and the documentation is rarely (if ever) updated.

Model-Driven Development (MDD) doesn’t automatically solve this, but I could enforce a top-down approach within the tool. For example, using UML, sequence diagrams could be required to reference a parent “use case” or another sequence diagram. Moreover, because the model generates the code directly, there is no discrepancy between the documentation and prod code.

Dynamic vs. Static Focus

Java is more of a class-oriented language rather than an object-oriented one. When a stakeholder asks you to review code for a specific use case, there’s rarely (if ever) a single file to inspect. Understanding the full flow often requires navigating multiple references across classes, services, and even repositories. This makes tracing behavior and reasoning about the system challenging.

Again, MDD doesn’t automatically solve this, but I can enforce it in the tool. For example, top-level sequence diagrams could span multiple services or repositories, providing a dynamic, high-level view of a use case that maps directly to the generated code, making the system easier to understand and maintain.


Execution: Creating WXL

The tool will be called WXL (World eXecution Language).

CI/CD

Versionability

Coming soon…

Testing

Coming soon…