Rethinking Enterprise
Software
@ziobrandoCodemotion 2014 - Roma
About me
@ziobrando
!
I do something else instead
@ziobrandoAbout me
DDD enthusiast
Post-it addicted
Visual thinker
Chaos summoner
Developer
Idea thief
…never satisfied
Entrepreneur avanscoperta
Some news about
software estimation
Even broken models can teach us something
The real problem
with estimations:
They may be right, sometimes
11 x 2 = …
Easy homework
What if we have
Legacy?
“It’s only a couple of
mines somewhere…”
Some recap from
one year ago
Ignorance is the single
greatest impediment to
throughput.
Dan North
http://dannorth.net/2010/08/30/introducing-deliberate-discovery/
Learning is the
constraint
Dan North
http://dannorth.net/2010/08/30/introducing-deliberate-discovery/
Software
development is a
learning process
Working code is a
side effect
Learning
Memories
Learning
School
Boring
Study
Lesson
Experiment
Mistakes
Fun
Marks
Exams
Stress
Life
Learning didn’t
happen there
Learning is crucial for
our job, and yet we don’t
know much about it
Look inside!
Learning is non
linear
(doesn’t fit into spreadsheets, burndown and Gantt charts)
Stress
Psychological reaction
!
To an adverse situation
!
Situation is perceived as
inevitable
Brain
can’t learn under stress
Relax
Looks like…
Conformity kills
creativity
Pressure hurts
problem solving
Can you estimate
learning?
I haven’t finished,
yet
Value Stream Mapping
http://agile.dzone.com/books/continuous-delivery-free
A quicker
notation...
We need a different
model!
(again)
Coding 20cl, learning 20cl,
deciding 20cl, waiting...
Mutual waiting
Apparently, a process and organisation issue...
Learning is not the
only constraint
Deciding?
We suck at it
How many DDD
practitioners are
needed to name a
class?
We should really find a
name for our daughter...
Isn’t a GUID sufficient?
No, I mean a proper
name...
What about Foo now,
and refactor later?
Should I marry her?
Yes
No
We really should be
getting married soon...
Can we talk about
this another time, honey? I’m
facing a zerg assault right
now...
The strategy?
Deadline!
Wedding ceremony
is a Ponzi schema
designed to stop the
man procrastinating
...but can we stop
afterthoughts?
Wow, Kate
looked really hot
today, maybe…
maybe I should
have used MongoDB in
that project
Finally, everybody
leaves
Can you provide me
an estimate?
You can use *points
if you want…
Problem
Yes…
there’s no one
size fits all
Summary
Repeatable (boring) —> Pseudo-linear
Legacy —> Too guilty to accept the real
numbers
Learning —> Non Linear
Deciding —> Deadlines & acceptable
results
Waiting —> Remove coupling
Enterprise software
Enterprise software, also known
as enterprise software application
(ESA), is purposed-designed
computer software used to satisfy
the needs of an organization
rather than individual users.
Enterprise software, also known
as enterprise software application
(ESA), is purposed-designed
computer software used to satisfy
the needs of an organisation
rather than individual users.
Which are the needs
of an organisation?
Kanban View of the system:
Decision Making
is the bottleneck
A business process is a
series of connected
business-relevant
decisions
So what should we
do?
Should we
write use
cases?
Developers loved templates
But forgot
good
readings
User Stories
As a [role]

I want to [action]

in order to [goal]
Really?
A placeholder for
future conversation
What are we
supposed to say?
meaningful
conversation with
the domain expert
“...Eric?”
...even better!
Hack!
Warning: DDD doesn’t work on the Death Star
Event Storming!
Video
If a picture is worth a thousand words…
©	
  Alberto	
  Brandolini	
  2009
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Video!
Yes, I mean that much
space...
My best friend
And…
no table.
It’s no fun to just
watch others play
Ubiquitous
Language
Reloaded
Model Affinity
Domain Events work
better
Events are precise
Event are meaningful
here the user decides
Command
User
issues
influences
External
information
influences
Read Model
Quali informazioni
Fine-Grained Delegation
Management 30.com
Steal and tweak
Process fine tuning
Conversation
happens here!
“Which are the events
needed in order to make
this event happen?”
“Which are the information
needed for a user in order to take
this decision?”
(more or less wisely)
“Do you have a story to
describe edge cases?”
Some great ideas here...
BDD
Specification
by example
Concrete
scenarios
We provided a
dedicated place for
learning to happen
Divergence can be
managed or
enforced
There is
value in
enforcing
divergence
Conflict resolution
The only thing they agree on is
fooling us!
They’re both right!
Context A
Context B
whew!
Tool Affinity
Simple notation
How long is this
cycle?
What
about ...minutes?
Event Storming
Provides a model of the shared level of
understanding of a complex business process
…I’ve never said it’s the right one!
Validate with multiple sources
...Waiting
Remove
dependencies…
Scrum Way:
—> Cross Functional
Teams
but…
Stand-up meetings
You’re doing them wrong
Loosely coupled
architecture reduces
organisation load
Bounded Context
CQRS
Event Sourcing
Reactive Apps
… not necessarily a
process problem
Coding against an
ecosystem
How do we measure effect on an ecosystem?
Definition of Done
- It works on my machine
- Green tests
- Deployed in production
- Up and running
- Users are using it
- We’ve solved the business goal
Wrap up:
There is a better model for enterprise apps
!
There are better ways to discover this
model
and learn together around it
!
There are better implementations that
perfectly fit this model
I am not
paying for that!
Grazie!
Alberto.brandolini@avanscoperta.it
@ziobrando

Rethinking enterprise software - Codemotion 2014