The Maven Principle Casts a Long Shadow
Three Design Principles:
The commandments of the modern application architecture
If modern applications were human, the design principles would be virtues every application should strive for. There are three principles that I consider core to the modern application architecture and they are:
2. The Maven Principle
3. The Principle of Immutability
What is striking about the first two principles is that they are not abstract in form but are the side-effects of the disruptive technologies and frameworks, I have named them after. These technologies were created to revolutionize source-code control and build respectively but have completely mutated the DNA of every modern application framework and technology which have come after them.
Since I have written a lot about Git Principle, In this blog, I am going to focus on Maven Principle and how long the shadow it casts.
The Maven Principle
When Maven was released, the two core tenets of Maven instantly caught my attention and there were:
- Declarative Dependency Management
- Convention Over Configuration
Declarative Dependency Management
Today all modern frameworks use the declarative paradigm and the imperative paradigm is almost considered an anti-pattern. This pattern did not exist before Maven (at least not in the mainstream) and dependency hell was real. I remember when I was consulting for a large bank in the mid-2000s, all versions of all relevant libraries were checked-in to the source-code control system. Maven changed that and the developer community never looked back.
Modern Infrastructure-as-code tools have internalized this principle and leading products like Terraform only use the declarative patterns for artifacts.
Convention Over Configuration
Maven popularized the virtue of convention over configuration.
It essentially means that the developer does not have to think about best practices. While Maven used this principle for basic things like organizing file systems (folks from the pre-maven era would content the basic classification), modern Environments-as-a-Service platforms like Roost.ai use this principle to create safe environments for pre-production workloads.
While design patterns were the right guideposts for legacy applications, modern applications should use design principles. As discussed above the three core design principles are git principle, maven principle, and the principle of immutability.
While the “declarative dependency management” part of the Maven Principle has become the defacto standard, “convention over configuration” is still in the infancy of adoption, and environments as a service platforms like Roost.ai are leading the way there.