Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
What lies
beneath
@ziobrando
About me
Very hard to explain my job to my
mother
running www.avanscoperta.it
Modelling (almost) everything with
sticky notes, markers and a paper
roll.
Calling this stuff
Quick recap of
Focusing on Big Picture only
Big Picture Workshop
Invite the right people
Provide an unlimited modelling space
Surface, Markers, stickies
Start Modelling with Domain Events
Environment setup
Establish a timeline
Some facilitator tricks will
kickstart the discussion quickly
Explore domain Events
Capture Hotspots
You won’t have to ask for problems…
problems will find you!!
Keep capturing hotspots…
What lies beneath
Outcome (big Picture):
The whole process visible
Massive learning
Critical areas highlighted
More specifically…
No scope limitation (paper roll)
Exploration of boundaries (External
Systems & People)
-> The BOTTLENECK is in the picture.
-> The CORE DOMAIN is in the
picture
EventStorming
blends lean and
Theory of
constraints into
Software
Development and
Domain-Driven
Design
EventStorming
blends lean and
Theory of
constraints into
Software
Development and
Domain-Driven
Design
EventStorming
blends lean and
Theory of
constraints into
Software
Development and
Domain-Driven
Design
Quick recap of
Theory of
Constraints
Focusing on Bottleneck only
Bottleneck
Main Constraint for a system
throughput
Bottleneck strategies
focus on it >>> Subordinate
everything else
improve it relentlessly
small short term improvements will
make a difference
… while you work on long term
improvements too
What lies beneath
Can’t find
the heart…
Can’t find
the heart…
yes, but look at
these nails…
Improving
anything but the
bottleneck is
close to
meaningless
Unless you have enough firepower to
attack many problems at once..
The realm of the foggy PO
We have plenty of items in the backlog…
…whose purpose is going to be clear someday
What I’ll be
speaking about
and finally…
In the last 2 years
Been EventStorming in many
different situations
Different domains
large companies & small
organisations
Established business and startups
…many different countries…
…for different reasons…
Biases??
All the possible ones!
I’ve seen only scenarios where I was
invited…
What does a
bottleneck look
like?
Digging into the flow
Unrolling it…
Business processes expose a
repeatable structure
Let’s look deeper
Let’s look deeper
Aggregate
Policy / Process
Domain Event
Command
External
System
Let’s look deeper
Here is where the
system is making
decisions:
Aggregate
Policy / Process
Domain Event
Command
External
System
Let’s look deeper
Here is where the
system is making
decisions:
Simple local decision
fit into Aggregates
Aggregate
Policy / Process
Domain Event
Command
External
System
Let’s look deeper
Here is where the
system is making
decisions:
Simple local decision
fit into Aggregates
Aggregate
Policy / Process
Domain Event
Command
External
System
Let’s look deeper
Here is where the
system is making
decisions:
Simple local decision
fit into Aggregates
More complex &
Reactive decision
making fits into
policies/Processes
Aggregate
Policy / Process
Domain Event
Command
External
System
Let’s look deeper
Here is where the
system is making
decisions:
Simple local decision
fit into Aggregates
More complex &
Reactive decision
making fits into
policies/Processes
Aggregate
Policy / Process
Domain Event
Command
External
System
Let’s look deeper
Here is where the
system is making
decisions:
Simple local decision
fit into Aggregates
More complex &
Reactive decision
making fits into
policies/Processes
Aggregate
Policy / Process
Domain Event
Command
External
System
#BusinessProcesses
#Transactions
#SWArchitecture
Let’s look deeper
Command/
Decision
User/
Actor/
Persona/…
User
Interface
Let’s look deeper
Here is where the
USER is making
decisions:
Command/
Decision
User/
Actor/
Persona/…
User
Interface
Let’s look deeper
Here is where the
USER is making
decisions:
…which are based
upon real world
experience, and the
information available
on the screen
Command/
Decision
User/
Actor/
Persona/…
User
Interface
Let’s look deeper
Here is where the
USER is making
decisions:
…which are based
upon real world
experience, and the
information available
on the screen
Command/
Decision
User/
Actor/
Persona/…
User
Interface
#UX
#FrontEndDevelopment
#UIDesign
Let’s look deeper
Domain
Event
Read Model
User
Interface
Let’s look deeper
Domain
Event
Read Model
User
Interface
Here is were we
transform raw data
into readable
meaningful
information
Let’s look deeper
Domain
Event
Read Model
User
Interface
Here is were we
transform raw data
into readable
meaningful
information
#BusinessIntelligence
#Readability
And the winner is…
And the winner is…
Most of the
bottlenecks
are here!
Most of the
bottlenecks
are here!
And the winner is…
Most of the
bottlenecks
are here!
And the winner is…
But we’re
observing the
effect, not the
cause
What lies beneath
Annoying anti-
patterns in Legacy
code
The Big Ball of Mud
Recurring anti-pattern
“That’s our key class”
“That’s our key class”
Big class with overloaded responsibility in the disputed land
between 2 (or more) Bounded Contexts
What lies beneath
Everybody agrees
what an order is?
Everybody agrees
what an order is?
Of course we do!
Everybody agrees
what an order is?
Of course we do!
An order is an
order!
Everybody agrees
what an order is?
Of course we do!
An order is an
order!
And has a
customer
too!
Everybody agrees
what an order is?
Of course we do!
An order is an
order!
And has a
customer
too! Agreed!
Perfect recipe:
Talk with many people
Model Data-First (everybody agrees
on nouns)
Add some “Dogmatic DRY principle”
Repeat
The Big Ball of Mud
The Big Ball of Mud
I swear it was a
monolith last time I
checked!!!
The solution
The solution
A Draft Model with
loose integrity
constraints
The solution
A Draft Model with
loose integrity
constraints
Constraints
implemented as
warnings
The solution
A Draft Model with
loose integrity
constraints
Constraints
implemented as
warnings
A Validation barrier (constraints
implemented as blockers)
The solution
A Draft Model with
loose integrity
constraints
Constraints
implemented as
warnings
A Validation barrier (constraints
implemented as blockers)
An Execution Model,
with similar data
structure, but
different behaviour
Epic win!
http://www.slideshare.net/ziobrando/why-do-all-my-ddd-apps-look-the-same-vienna-2014
Epic win!
1. EventStorming Works!
http://www.slideshare.net/ziobrando/why-do-all-my-ddd-apps-look-the-same-vienna-2014
Epic win!
1. EventStorming Works!
2. I was right 4 years ago!!
http://www.slideshare.net/ziobrando/why-do-all-my-ddd-apps-look-the-same-vienna-2014
Oversimplified, but…
Oversimplified, but…
1) Sketch a logical
separation of
bounded contexts
Oversimplified, but…
1) Sketch a logical
separation of
bounded contexts
2) Define a local copy of
the draft BC: only a few
operations required
Oversimplified, but…
1) Sketch a logical
separation of
bounded contexts
2) Define a local copy of
the draft BC: only a few
operations required
3) “Publish” the key
event, with all the
relevant data
Oversimplified, but…
1) Sketch a logical
separation of
bounded contexts
2) Define a local copy of
the draft BC: only a few
operations required
3) “Publish” the key
event, with all the
relevant data
4) Use the published data to
instantiate a valid object in
the execution BC
Or, more explicitly…
Oversimplification?
This one is probably not the only
dependency…
Who knows what else can be there…
…
Asymmetries
What lies beneath
Whoever
advocates LEGO
as an analogy to
software
development
hasn’t been doing
much LEGO lately
LEGO Entropy laws
Mixing LEGO boxes takes seconds
separating LEGO boxes takes ages
Or, maybe, it just
requires some
time…
LEGO Entropy laws
Mixing LEGO boxes takes seconds
separating LEGO boxes takes ages
Moving a few pieces is reversible…
…until you forget
Then you loose control and call it “a
mess”
Identify the right
bounded contexts
as early as
possible
…model & linguistic boundaries only…
In greenfield….
In brownfield…
In brownfield…
Boy Scout Rule:
Leave the
campground
cleaner than you
found it
The Big Ball of Mud
The Big Ball of Mud
Look, a code
smell!!!
The Big Ball of Mud
Look, a code
smell!!!
I’ve found
one too!!
The Big Ball of Mud
Look, a code
smell!!!
I’ve found
one too!!
i’ve founds
dozens of
them!!
The Big Ball of Mud
Look, a code
smell!!!
I’ve found
one too!!
i’ve founds
dozens of
them!!
Let’s
rename a few
classes…
… it takes a lot
of perseverance…
…It ignores
problem
number one!!
There’s asymmetry
in payoffs too
Or, more explicitly…
Or, more explicitly…
Evolution here will
have a lot less
ripple effects… a
safer place to
improve!
Or, more explicitly…
Evolution here will
have a lot less
ripple effects… a
safer place to
improve!
And here situation
is better too…
Or, more explicitly…
Evolution here will
have a lot less
ripple effects… a
safer place to
improve!
And here situation
is better too…
1) we are reducing
the number of
people related to a
model
Or, more explicitly…
Evolution here will
have a lot less
ripple effects… a
safer place to
improve!
And here situation
is better too…
1) we are reducing
the number of
people related to a
model
2) we are driven by business,
not by smells
Smell is a good
driver if you have
no idea where the
money is
Refactoring danger zone
In code:
Dependencies
Compiler
Tests
In the database
A lot harder to know who will be
affected
It’s not the
cleanup, it’s the
associated risk
It takes only one violation to get into “We have no idea” zone
There’s asymmetry
in refactoring
documentation…
Unclear payoff ->
Risk avoidance
clear payoff ->
Risk Management
What happens when
you discover the
bottleneck?
…maybe not what you expected…
What lies beneath
found the bottleneck, now what?
found the bottleneck, now what?
Write some documentation?
found the bottleneck, now what?
Write some documentation?
Call another meeting?
found the bottleneck, now what?
Write some documentation?
Call another meeting?
Let’s think about it!
found the bottleneck, now what?
Write some documentation?
Call another meeting?
Let’s think about it!
found the bottleneck, now what?
Write some documentation?
Call another meeting?
Let’s think about it!
… write a prototype?
found the bottleneck, now what?
Write some documentation?
Call another meeting?
Let’s think about it!
… write a prototype?
implementing a solution?
What lies beneath
found the bottleneck, now what?
found the bottleneck, now what?
Write some documentation?
found the bottleneck, now what?
Write some documentation?
Call another meeting?
found the bottleneck, now what?
Write some documentation?
Call another meeting?
Let’s think about it!
found the bottleneck, now what?
Write some documentation?
Call another meeting?
Let’s think about it!
found the bottleneck, now what?
Write some documentation?
Call another meeting?
Let’s think about it!
… write a prototype?
#protip
schedule a free
day after an
EventStorming
But the scary
thing is…
Some companies
attacked the
problem, some
didn't
Single
discriminating
factor?
What lies beneath
The Dungeon
Master
https://medium.com/@ziobrando/the-rise-and-fall-of-the-dungeon-master-c2d511eed12f#.rtbyh8uid
(yes I am aware that this one is the Star Wars emperor)
What lies beneath
A few lessons
rationality doesn’t explain everything
habits, unconscious, we’re not
machines.
Passion and Pride can become
attachment
LEARNING can’t be skipped or
accelerated: sometimes things need
to be discovered again
“It’s Paytime!”
Sincerely,
Technical Debt
Strong emotions
How would what if three lines of
your code created a million euro
hole?
Code persist, but the context is
gone
It’s how people feel, not how they
should that drives some behaviour.
Are people
feeling safe in
changing?
Do they have
options?
Legacy is whatever you’re afraid to change
Culture is a
better asset than
code
Safety, Experiments, …and component size too!
Conclusions
…maybe not what you expected…
Enables cross-
perspective
conversation
Software design, User Experience, Business Modelling,
Lean etc.
Can lead you to
unexpected places
apparently, you cannot choose what your problem is
Stop building
monoliths
I know you won’t … it’s for slideshare. ;-)
I wasn’t explicit enough
Data Centric
applications are
damaging your
business
I wasn’t explicit enough
Data Centric
applications are
damaging your
business
The only thing that keeps companies in the market is
that competitors are in the same situation…
I wasn’t explicit enough
There’s a
recurring way out
And a recurring
problem too
#DungeonMaster
Stop ignoring the
culture
We are not rational human beings 24H/day
Emotions are driving technical choices more than you think
Thank you!
References
• www.eventstorming.com
• EventStormers on Google+
• https://plus.google.com/u/0/communities/
113258571348605620818
• LeanPub book in progress:
• http://leanpub.com/introducing_eventstorming
• Blog:
• https://medium.com/@ziobrando
• http://ziobrando.blogspot.com
• Twitter: @ziobrando
• Trainings & Workshop facilitation:
• http://www.avanscoperta.it

More Related Content

What lies beneath