rethinking enterprise software - brandolini
DESCRIPTION
Slides from Alberto Brandolini talk @ codemotion roma 2014TRANSCRIPT
Rethinking Enterprise Software
@ziobrandoCodemotion 2014 - Roma
About me@ziobrando
!
I do something else instead
@ziobrandoAbout meDDD enthusiast Post-it addicted Visual thinker Chaos summoner Developer Idea thief …never satisfied Entrepreneur
avanscoperta
Some news about software estimationEven 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 Northhttp://dannorth.net/2010/08/30/introducing-deliberate-discovery/
Learning is the constraint
Dan Northhttp://dannorth.net/2010/08/30/introducing-deliberate-discovery/
Software development is a learning process
Working code is a side effect
Learning
Memories
LearningSchool
Borin
g
Study
Less
on
Expe
rimen
tMistakes
Fun
Marks
Exams
Stre
ss
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
SummaryRepeatable (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!
VideoIf 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 decidesCommand
User
issues
influences
External information
influencesRead 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 StormingProvides 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 meetingsYou’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!