@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
Duplicating ≠ Decoupling!
... 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.
- 851