Engineering the Future of Software
29–31 Oct 2018: Tutorials & Conference
31 Oct–1 Nov 2018: Training
London, UK

How to build a modular monolith

Dan Haywood (Haywood Associates Ltd.)
14:1515:05 Monday, 29 October 2018
Application architecture
Location: King's Suite - Sandringham Level: Intermediate
Secondary topics:  Framework-focused

Who is this presentation for?

Architects, Developers, IT Managers

Prerequisite knowledge

* Understanding of the ideas behind domain-driven design * Ability to read Java code * Useful to have heard of the hexagonal architecture.

What you'll learn

* Modularity is the important idea for maintainable software. * Modularity applies to layers, and within the business layer. * Sophisticated UIs can now be developed with frameworks that employ the naked objects architectural pattern. * Frameworks such as Apache Isis enable rapid exploration and development, ideal for domain-driven design approach.


Microservice architectures are all the rage these days, but what’s really important for long-term maintainability is modularity. And it isn’t necessary to use a network boundary to create such modules. Indeed, when exploring an unfamiliar business domain it’s won’t immediately be obvious were the boundaries are between those modules.

There is also a separation of concerns between the layers. The hexagonal architecture describes one way in which to accomplish this, and is common practice while developing domain driven apps. However, ensuring that business logic doesn’t leak between the layers can take a lot of effort.

Over the last six years we’ve been developing an extending an invoicing system for a real-estate company that owns and operates shopping centres across four countries. To do this we’ve used Apache Isis, an implementation of the naked objects architectural pattern.

It’s the “naked objects” bit that provides us with rigid architectural constraints preventing business logic leaking into adjacent layers. But the framework also provides a number of powerful tools to ensure that the modules within the domain layer itself are also decoupled from each other.

The invoicing system – we call it Estatio – is itself open source. What that means that I can what a significant Apache Isis app looks like “in the flesh”, and how we manage to keep it modular. Our modular monolith.

Photo of Dan Haywood

Dan Haywood

Haywood Associates Ltd.

Dan is a freelance consultant, developer, writer and trainer, specializing in domain-driven design, agile development, enterprise architecture and also REST, on the Java and .NET platforms.

Dan is known as an advocate of the naked objects pattern, and is the lead committer to Apache Isis, a Java framework that implements the naked objects pattern. He also works (for a client) on an app that runs on top of Isis, called Estatio. You can find Estatio up on github; it also is open source.

Dan was also instrumental in the success of the first large-scale naked objects system which administers state benefits for citizens in Ireland, used by over 2,000 users and paying out over EUR5bn a year in benefits. He continues in his role there as an advisor to the government.

Dan’s most recent open source work is the Restful Objects specification, which defines a hypermedia API for exposing domain object models. Apache Isis provides one implementation of this spec, and Dan is also a committer on Restful Objects.NET, an implementation for .NET on ASP.NET MVC.

Dan is a regular presenter at various conferences, and has written a good number of online and print articles. He’s also written a couple of books, “Domain Driven Design using Naked Objects”, and also “Better Software Faster” on the effective use of TogetherJ. Prior to focusing in agile and DDD, Dan worked at Sybase UK, specializing in performance-n-tuning.

Leave a Comment or Question

Help us make this conference the best it can be for you. Have questions you'd like this speaker to address? Suggestions for issues that deserve extra attention? Feedback that you'd like to share with the speaker and other attendees?

Join the conversation here (requires login)