@JulienTopcu

@JosianChevalier

@JulienTopcu

@JosianChevalier

Comfort
Class

Price

Schedule

Fare

Space
Train

Booking

Criteria

Selection

Search

Price

Bound

Schedule

Fare

Space
Train

Comfort
Class

Mandalore Express

@JulienTopcu

@JosianChevalier

Comfort
Class

Price

Schedule

Fare

Space
Train

Booking

Criteria

Selection

Search

Price

Bound

Schedule

Fare

Space
Train

Comfort
Class

Mandalore Express

@JulienTopcu

@JosianChevalier

Comfort
Class

Criteria

Selection

Search

Price

Bound

Schedule

Fare

Space
Train

Price

Schedule

Fare

Space
Train

Booking

Comfort
Class

Search

Booking

@JulienTopcu

@JosianChevalier

Comfort
Class

Criteria

Selection

Search

Price

Bound

Schedule

Fare

Space
Train

Price

Schedule

Fare

Space
Train

Booking

Comfort
Class

Search

Booking

DuplicatingDecoupling!

... when conceptually coupled

@JulienTopcu

@JosianChevalier

Comfort
Class

Selection

Search

Price

Bound

Schedule

Fare

Space
Train

Price

Schedule

Fare

Space
Train

Booking

Comfort
Class

Search ?

Booking ?

Criteria

Criteria

Bound

@JulienTopcu

@JosianChevalier

Comfort
Class

Selection

Search

Price

Bound

Schedule

Fare

Space
Train

Price

Schedule

Fare

Space
Train

Booking

Comfort
Class

Criteria

Criteria

Bound

Search ?

Booking ?

?

?

@JulienTopcu

@JosianChevalier

Space
Train

Search

Fare

Criteria

Selection

Schedule

Price

Bound

Booking

Space
Train

Fare

Schedule

Price

Comfort
Class

Comfort
Class

?

Search ?

Booking ?

@JulienTopcu

@JosianChevalier

Space
Train

Search

Fare

Criteria

Selection

Schedule

Price

Bound

Booking

Space
Train

Fare

Schedule

Price

Comfort
Class

Comfort
Class

?

Search ?

Booking ?

Splitting into services too early...

Trying to find boundaries...

Through behaviors ?

@JulienTopcu

@JosianChevalier

Space
Train

Search

Fare

Criteria

Selection

Schedule

Price

Bound

Booking

Space
Train

Fare

Schedule

Price

Comfort
Class

Comfort
Class

?

Search ?

Booking ?

@JulienTopcu

@JosianChevalier

Space
Train

Search

Fare

Criteria

Selection

Schedule

Price

Bound

Booking

Space
Train

Fare

Schedule

Price

Comfort
Class

Comfort
Class

Search ?

Booking ?

Amount

Currency

Amount

Currency

SpaceTrains
Booker

SpaceTrains
Finder

@JulienTopcu

@JosianChevalier

Space
Train

Search

Fare

Criteria

Selection

Schedule

Price

Bound

Booking

Space
Train

Fare

Schedule

Price

Comfort
Class

Comfort
Class

Search ?

Booking ?

Amount

Currency

Amount

Currency

SpaceTrains
Booker

SpaceTrains
Finder

@JulienTopcu

@JosianChevalier

Space
Train

Search

Fare

Criteria

Selection

Schedule

Price

Bound

Booking

Space
Train

Fare

Schedule

Price

Comfort
Class

Comfort
Class

Search ?

Booking ?

Amount

Currency

Amount

Currency

SpaceTrains
Booker

SpaceTrains
Finder

@JulienTopcu

@JosianChevalier

Search

Booking

Search ?

Booking ?

Amount

Currency

Selection

Bound

Fare

Schedule

Price

Comfort
Class

Criteria

Space
Train

Amount

Currency

Space
Train

SpaceTrains
Booker

SpaceTrains
Finder

@JulienTopcu

@JosianChevalier

Space
Train

Search

Booking

Search ?

Booking ?

Space
Train

Amount

Currency

Selection

Bound

Fare

Schedule

Price

Comfort
Class

Criteria

Amount

Currency

SpaceTrains
Booker

SpaceTrains
Finder

@JulienTopcu

@JosianChevalier

Space
Train

Search

Bound

Booking

Space
Train

Search ?

Booking ?

Amount

Currency

Selection

Fare

Schedule

Price

Comfort
Class

Criteria

Currency

Amount

SpaceTrains
Booker

SpaceTrains
Finder

@JulienTopcu

@JosianChevalier

Space
Train

Search

Criteria

Bound

Booking

Space
Train

Search ?

Booking ?

Selection

Fare

Schedule

Price

Comfort
Class

Currency

Amount

SpaceTrains
Booker

SpaceTrains
Finder

@JulienTopcu

@JosianChevalier

Space
Train

Search

Criteria

Selection

Bound

Booking

Space
Train

Search ?

Booking ?

Fare

Schedule

Price

Comfort
Class

Currency

Amount

SpaceTrains
Booker

SpaceTrains
Finder

@JulienTopcu

@JosianChevalier

Space
Train

Search

Selection

Bound

Booking

Space
Train

Fare

Schedule

Price

Comfort
Class

Criteria

Search

Booking

Shared Kernel

Amount

Currency

SpaceTrains
Booker

SpaceTrains
Finder

@JulienTopcu

@JosianChevalier

Search

Bound

Fare

Schedule

Price

Comfort
Class

Criteria

?

?

Space
Train

Selection

Search

Booking

Booking

Space
Train

Shared Kernel

Amount

Currency

SpaceTrains
Booker

SpaceTrains
Finder

@JulienTopcu

@JosianChevalier

Search

Bound

Fare

Schedule

Price

Criteria

?

?

Space
Train

Selection

Search

Booking

Booking

Space
Train

Shared Kernel

Amount

Currency

Comfort
Class

SpaceTrains
Booker

SpaceTrains
Finder

@JulienTopcu

@JosianChevalier

Search

Space
Train

Search

Booking

Booking

Space
Train

Space
Train

Search

Bound

Criteria

Selection

Shared Kernel

@JulienTopcu

@JosianChevalier

Search

Bound

Criteria

Space
Train

Selection

Search

Booking

Booking

Space
Train

AntiCorruption Layer

Space
Train

Search

Space
Train

Shared Kernel

@JulienTopcu

@JosianChevalier

Search

Bound

Criteria

Space
Train

Selection

Search

Booking

Booking

Space
Train

AntiCorruption Layer

Shared Kernel

@JulienTopcu

@JosianChevalier

Shared Kernel

Search

Booking

AntiCorruption Layer

@JulienTopcu

@JosianChevalier

What should we do about the Shared Kernel?

@JulienTopcu

@JosianChevalier

@JulienTopcu

@JosianChevalier

Space
Train

Search

Selection

Bound

Booking

Space
Train

Fare

Schedule

Price

Comfort
Class

Criteria

Shared Kernel

Search

Booking

Amount

Currency

@JulienTopcu

@JosianChevalier

Space
Train

Search

Selection

Bound

Booking

Space
Train

Schedule

Price

Criteria

Search

Booking

SEat
Location

Shared Kernel

Amount

Currency

Fare

Comfort
Class

@JulienTopcu

@JosianChevalier

Space
Train

Search

Selection

Bound

Booking

Space
Train

Fare

Schedule

Price

Criteria

Search

Booking

SEat
Location

Fare

Shared Kernel

Amount

Currency

Comfort
Class

Comfort
Class

@JulienTopcu

@JosianChevalier

Space
Train

Search

Selection

Bound

Booking

Space
Train

Fare

Schedule

Price

Comfort
Class

Criteria

Search

Booking

SEat
Location

Fare

Comfort
Class

Shared Kernel

Amount

Currency

@JulienTopcu

@JosianChevalier

Space
Train

Search

Selection

Bound

Booking

Space
Train

Fare

Schedule

Price

Comfort
Class

Criteria

Search

Booking

SEat
Location

Shared Kernel

Fare

Comfort
Class

Amount

Currency

@JulienTopcu

@JosianChevalier

@JulienTopcu

@JosianChevalier

Space
Train

Search

Selection

Bound

Booking

Space
Train

Fare

Schedule

Price

Comfort
Class

Criteria

Search

Booking

SEat
Location

Shared Kernel

Fare

Comfort
Class

Amount

Currency

@JulienTopcu

@JosianChevalier

Space
Train

Search

Selection

Bound

Booking

Space
Train

Fare

Schedule

Price

Comfort
Class

Criteria

Search

Booking

SEat
Location

Shared Kernel

Fare

Comfort
Class

Amount

Currency

Tax

Rate

Tax

Portion

@JulienTopcu

@JosianChevalier

Space
Train

Search

Selection

Bound

Booking

Space
Train

Fare

Schedule

Price

Comfort
Class

Criteria

Search

Booking

SEat
Location

Shared Kernel

Fare

Comfort
Class

Amount

Currency

Tax

Rate

Tax

Portion

Price

@JulienTopcu

@JosianChevalier

Space
Train

Search

Selection

Bound

Booking

Space
Train

Fare

Schedule

Price

Comfort
Class

Criteria

Search

Booking

SEat
Location

Shared Kernel

Amount

Currency

Fare

Comfort
Class

Tax

Rate

Tax

Portion

Price

@JulienTopcu

@JosianChevalier

Space
Train

Search

Selection

Bound

Booking

Space
Train

Fare

Schedule

Price

Comfort
Class

Criteria

Search

Booking

SEat
Location

Shared Kernel

Amount

Currency

Fare

Comfort
Class

Tax

Rate

Tax

Portion

Price

@JulienTopcu

@JosianChevalier

Space
Train

Search

Selection

Bound

Booking

Space
Train

Fare

Schedule

Price

Comfort
Class

Criteria

Search

Booking

SEat
Location

Shared Kernel

Amount

Currency

Fare

Comfort
Class

Tax

Rate

Tax

Portion

Price

Schedule

@JulienTopcu

@JosianChevalier

Space
Train

Search

Selection

Bound

Booking

Space
Train

Fare

Schedule

Price

Comfort
Class

Criteria

Search

Booking

SEat
Location

Shared Kernel

Fare

Comfort
Class

Tax

Rate

Tax

Portion

Price

Schedule

Amount

Currency

@JulienTopcu

@JosianChevalier

@JulienTopcu

@JosianChevalier

@JulienTopcu

@JosianChevalier

Space
Train

Search

Selection

Bound

Booking

Space
Train

Fare

Schedule

Price

Comfort
Class

Criteria

Search

Booking

SEat
Location

Shared Kernel

Fare

Comfort
Class

Tax

Rate

Tax

Portion

Price

Schedule

Amount

Currency

Amount

Currency

@JulienTopcu

@JosianChevalier

Space
Train

Search

Selection

Bound

Booking

Space
Train

Fare

Schedule

Price

Comfort
Class

Criteria

Search

Booking

SEat
Location

Shared Kernel

Fare

Comfort
Class

Tax

Rate

Tax

Portion

Price

Schedule

Amount

Currency

Amount

Currency

@JulienTopcu

@JosianChevalier

Space
Train

Search

Selection

Bound

Booking

Space
Train

Fare

Schedule

Price

Comfort
Class

Criteria

Search

Booking

SEat
Location

Shared Kernel

Fare

Comfort
Class

Tax

Rate

Tax

Portion

Price

Schedule

Amount

Currency

Amount

Currency

@JulienTopcu

@JosianChevalier

Space
Train

Search

Selection

Bound

Booking

Space
Train

Fare

Schedule

Price

Comfort
Class

Criteria

Search

Booking

SEat
Location

Fare

Comfort
Class

Tax

Rate

Tax

Portion

Price

Schedule

Amount

Currency

Amount

Currency

@JulienTopcu

@JosianChevalier

Booking

Search

ACL

U

D

@JulienTopcu

@JosianChevalier

Space
Train

Search

Selection

Bound

Booking

Space
Train

Fare

Schedule

Price

Comfort
Class

Criteria

Search

Booking

SEat
Location

Fare

Comfort
Class

Tax

Rate

Tax

Portion

Price

Schedule

Amount

Currency

Amount

Currency

@JulienTopcu

@JosianChevalier

Space
Train

Search

Selection

Bound

Booking

Space
Train

Fare

Schedule

Price

Comfort
Class

Criteria

Search

Booking

SEat
Location

Shared Kernel

Fare

Comfort
Class

Tax

Rate

Tax

Portion

Price

Schedule

Amount

Currency

Amount

Currency

@JulienTopcu

@JosianChevalier

Space
Train

Search

Selection

Bound

Booking

Space
Train

Fare

Schedule

Price

Comfort
Class

Criteria

Search

Booking

SEat
Location

Fare

Comfort
Class

Tax

Rate

Tax

Portion

Price

Schedule

Amount

Currency

Money

@JulienTopcu

@JosianChevalier

Booking

Search

Money

ACL

CF

CF

U

D

Generic Sub Domain

@JulienTopcu

@JosianChevalier

The Theory

@JulienTopcu

@JosianChevalier

Interphase

@JulienTopcu

@JosianChevalier

Interphase

@JulienTopcu

@JosianChevalier

Interphase

@JulienTopcu

@JosianChevalier

Prophase

@JulienTopcu

@JosianChevalier

Prophase

@JulienTopcu

@JosianChevalier

Metaphase

@JulienTopcu

@JosianChevalier

Metaphase

Shared Kernel

@JulienTopcu

@JosianChevalier

Everything in the Shared Kernel must have:

the same meaning

the same representation
(structure & types)

the same invariants

the same business rules

⚠️for all the bounded-contexts which use the Shared Kernel⚠️

@JulienTopcu

@JosianChevalier

Between teams, the Shared-Kernel should not be shared

@JulienTopcu

@JosianChevalier

Anaphase

Shared Kernel

@JulienTopcu

@JosianChevalier

Anaphase

Shared Kernel

@JulienTopcu

@JosianChevalier

Anaphase

Shared Kernel

@JulienTopcu

@JosianChevalier

Anaphase

Shared

Kernel

@JulienTopcu

@JosianChevalier

Residual Shared Kernel

Shared

Kernel

@JulienTopcu

@JosianChevalier

Simple Telophase

@JulienTopcu

@JosianChevalier

Multiple Telophase

Shared

Kernel

@JulienTopcu

@JosianChevalier

Multiple Telophase

Shared

Kernel

@JulienTopcu

@JosianChevalier

Multiple Telophase

To be continued...

Julien Topcu

Josian Chevalier

SHODO

This is the way

Model Mitosis: a dynamic pattern to deal with model tensions

By Julien Topçu

Model Mitosis: a dynamic pattern to deal with model tensions

Just as models should be iterative, strategic design should change when the context and our understanding of the problem evolve. As a model grows to solve more problems, it becomes less supple in its ability to evolve. Tensions arise within the model that struggles to stay coherent. Eventually it reaches a critical mass and becomes a big ball of mud. How do we know when it’s time to let new models emerge? How do we carry on the decision to split a model? How can we handle the progressive differentiation of our models while avoiding unnecessary coupling? It’s not as easy as a clean axe cut in the middle, finding the right boundaries is hard. We would like to introduce the Model Mitosis, a dynamic pattern used to split a model into multiple ones that will get shaped and decoupled iteratively.

  • 606