@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

Price

Bound

Booking

Space
Train

Fare

Price

Comfort
Class

Comfort
Class

Search ?

Booking ?

Amount

Currency

Currency

Mandalore
Express

Mandalore
Express

Schedule

Amount

@JulienTopcu

@JosianChevalier

Space
Train

Search

Fare

Criteria

Selection

Price

Bound

Booking

Space
Train

Fare

Price

Comfort
Class

Comfort
Class

Search ?

Booking ?

Amount

Currency

Currency

SpaceTrains
Booker

SpaceTrains
Finder

Schedule

Amount

@JulienTopcu

@JosianChevalier

Space
Train

Search

Fare

Criteria

Selection

Price

Bound

Booking

Space
Train

Fare

Price

Comfort
Class

Comfort
Class

Search ?

Booking ?

Amount

Currency

Currency

SpaceTrains
Booker

SpaceTrains
Finder

Schedule

Amount

@JulienTopcu

@JosianChevalier

Search ?

Booking ?

Amount

Currency

Selection

Bound

Fare

Price

Comfort
Class

Criteria

Space
Train

Currency

Space
Train

SpaceTrains
Booker

SpaceTrains
Finder

Search

Booking

Schedule

Amount

@JulienTopcu

@JosianChevalier

Search ?

Booking ?

Amount

Currency

Selection

Bound

Fare

Price

Comfort
Class

Criteria

Space
Train

Currency

Space
Train

SpaceTrains
Booker

SpaceTrains
Finder

Search

Booking

Schedule

Amount

@JulienTopcu

@JosianChevalier

Search ?

Booking ?

Amount

Currency

Selection

Bound

Fare

Price

Comfort
Class

Criteria

Currency

SpaceTrains
Booker

SpaceTrains
Finder

Space
Train

Search

Booking

Space
Train

Amount

Schedule

@JulienTopcu

@JosianChevalier

Search ?

Booking ?

Amount

Currency

Selection

Bound

Fare

Price

Comfort
Class

Criteria

Currency

SpaceTrains
Booker

SpaceTrains
Finder

Fare

Space
Train

Search

Booking

Space
Train

Amount

Schedule

@JulienTopcu

@JosianChevalier

Space
Train

Search

Booking

Search ?

Booking ?

Space
Train

Amount

Currency

Selection

Bound

Selected
Fare

Price

Comfort
Class

Criteria

Currency

SpaceTrains
Booker

SpaceTrains
Finder

Fare
Option

Amount

Schedule

@JulienTopcu

@JosianChevalier

Space
Train

Search

Booking

Search ?

Booking ?

Space
Train

Amount

Currency

Selection

Bound

Selected
Fare

Price

Comfort
Class

Criteria

Currency

SpaceTrains
Booker

SpaceTrains
Finder

Fare
Option

Amount

Schedule

@JulienTopcu

@JosianChevalier

Space
Train

Search

Booking

Search ?

Booking ?

Space
Train

Amount

Currency

Selection

Bound

Selected
Fare

Criteria

SpaceTrains
Booker

SpaceTrains
Finder

Fare
Option

Price

Comfort
Class

Currency

Amount

Schedule

@JulienTopcu

@JosianChevalier

Space
Train

Search

Booking

Search ?

Booking ?

Space
Train

Amount

Currency

Selection

Bound

Selected
Fare

Criteria

SpaceTrains
Booker

SpaceTrains
Finder

Fare
Option

Price

Comfort
Class

Currency

Amount

Schedule

@JulienTopcu

@JosianChevalier

Space
Train

Search

Booking

Search ?

Booking ?

Space
Train

Selection

Bound

Selected
Fare

Criteria

SpaceTrains
Booker

SpaceTrains
Finder

Fare
Option

Price

Comfort
Class

Currency

Amount

Schedule

@JulienTopcu

@JosianChevalier

Schedule

Price

Comfort
Class

Amount

Currency

SpaceTrains
Booker

SpaceTrains
Finder

Space
Train

Search

Booking

Space
Train

Selection

Bound

Selected
Fare

Criteria

Fare
Option

Search

Booking

Shared Kernel

@JulienTopcu

@JosianChevalier

@JosianChevalier

Schedule

Search

Booking

Shared Kernel

Amount

Currency

SpaceTrains
Booker

SpaceTrains
Finder

Space
Train

Search

Booking

Space
Train

Bound

Selected
Fare

Fare
Option

?

?

Selection

Criteria

Price

Comfort
Class

@JulienTopcu

@JosianChevalier

@JosianChevalier

Schedule

Search

Booking

Shared Kernel

Amount

Currency

SpaceTrains
Booker

SpaceTrains
Finder

Space
Train

Search

Booking

Space
Train

Bound

Selected
Fare

Fare
Option

?

?

Selection

Criteria

Price

Comfort
Class

@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

Search

Booking

Shared Kernel

Schedule

Price

Comfort
Class

Amount

Currency

Space
Train

Search

Booking

Space
Train

Selection

Bound

Selected
Fare

Criteria

Fare
Option

Tax

Portion

Tax

Rate

@JulienTopcu

@JosianChevalier

Search

Booking

Shared Kernel

Schedule

Price

Comfort
Class

Amount

Currency

Space
Train

Search

Booking

Space
Train

Selection

Bound

Selected
Fare

Criteria

Fare
Option

Tax

Portion

Tax

Rate

Comfort
Class

Price

@JulienTopcu

@JosianChevalier

Schedule

Price

Comfort
Class

Search

Booking

Shared Kernel

Comfort
Class

Amount

Currency

Price

Space
Train

Search

Booking

Space
Train

Selection

Bound

Selected
Fare

Criteria

Fare
Option

Tax

Portion

Tax

Rate

@JulienTopcu

@JosianChevalier

Schedule

Price

Comfort
Class

Search

Booking

Shared Kernel

Comfort
Class

Amount

Currency

Price

Space
Train

Search

Booking

Space
Train

Selection

Bound

Selected
Fare

Criteria

Fare
Option

Tax

Portion

Tax

Rate

Schedule

@JulienTopcu

@JosianChevalier

Search

Booking

Shared Kernel

Schedule

Price

Comfort
Class

Comfort
Class

Amount

Currency

Price

Space
Train

Search

Booking

Space
Train

Selection

Bound

Selected
Fare

Criteria

Fare
Option

Tax

Portion

Tax

Rate

Schedule

@JulienTopcu

@JosianChevalier

@JulienTopcu

@JosianChevalier

@JulienTopcu

@JosianChevalier

Search

Booking

Shared Kernel

Schedule

Price

Comfort
Class

Comfort
Class

Amount

Currency

Price

Space
Train

Search

Booking

Space
Train

Selection

Bound

Selected
Fare

Criteria

Fare
Option

Tax

Portion

Tax

Rate

Schedule

@JulienTopcu

@JosianChevalier

Schedule

Price

Comfort
Class

Comfort
Class

Amount

Currency

Price

Space
Train

Search

Booking

Space
Train

Selection

Bound

Selected
Fare

Criteria

Fare
Option

Tax

Portion

Tax

Rate

Schedule

Search

Booking

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

Shared Kernel

Transitional 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 Topçu

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.

  • 881