idea stickies green bar - wroclaw edition

163
Idea —> Post-It —> Test Verdi Idea Stickies Green Bar avanscoperta @ziobrando (original concept with @andreabalducci )

Upload: alberto-brandolini

Post on 17-Jul-2015

607 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Idea stickies green bar - Wroclaw edition

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

Idea —> Post-It —> Test Verdi

Idea

Stickies

Green Baravanscoperta

@ziobrando

(original concept with @andreabalducci)

Page 2: Idea stickies green bar - Wroclaw edition

About me@ziobrando

I do something else instead

@ziobrandoAbout me

avanscoperta

#DDD

#Agile

#Lean

#Entrepreneur

#Developer

#EventStorming

#Coach

#Facilitator

#Consultant

Page 3: Idea stickies green bar - Wroclaw edition

Let’s start from here…

#Entrepreneur

#Lean

Page 4: Idea stickies green bar - Wroclaw edition

Theory of

Constraints

Page 5: Idea stickies green bar - Wroclaw edition
Page 6: Idea stickies green bar - Wroclaw edition
Page 7: Idea stickies green bar - Wroclaw edition
Page 8: Idea stickies green bar - Wroclaw edition

Look for the bottleneck!

Page 9: Idea stickies green bar - Wroclaw edition
Page 10: Idea stickies green bar - Wroclaw edition

Improving the bottleneck, improves

the whole system

Page 11: Idea stickies green bar - Wroclaw edition

Other improvements have little or

negligible impact

Page 12: Idea stickies green bar - Wroclaw edition

I want to find my bottleneck

#Entrepreneur

Page 13: Idea stickies green bar - Wroclaw edition

I help my customers to find their bottleneck

#Lean #Consultant

Page 14: Idea stickies green bar - Wroclaw edition

Should I care about it?

#Developer

Page 15: Idea stickies green bar - Wroclaw edition

Yes

Page 16: Idea stickies green bar - Wroclaw edition

Customers will need to reduce costs in non

bottleneck areas

Page 17: Idea stickies green bar - Wroclaw edition

Customers will need to improve

performances in bottleneck areas

Page 18: Idea stickies green bar - Wroclaw edition
Page 19: Idea stickies green bar - Wroclaw edition

Unfortunately…

Page 20: Idea stickies green bar - Wroclaw edition

Customers might not know about their

bottleneck

Page 21: Idea stickies green bar - Wroclaw edition

Customers might not want to talk about

their bottleneck

#Developer

Page 22: Idea stickies green bar - Wroclaw edition

How can we do the right thing?

Page 23: Idea stickies green bar - Wroclaw edition

Domain-Driven Design

Not what you’ll expect

#Developer #DDD

Page 24: Idea stickies green bar - Wroclaw edition

“Domain-Driven Design is an architectural

approach”

Page 25: Idea stickies green bar - Wroclaw edition

Yes, this is still what it looks

like…

Page 26: Idea stickies green bar - Wroclaw edition

It’s actually worse than this

#DDD

Page 27: Idea stickies green bar - Wroclaw edition

“Domain-Driven Design is an architectural

approach”

Page 28: Idea stickies green bar - Wroclaw edition

“DDD is an architectural

approach to over-engineered solutions”

Page 29: Idea stickies green bar - Wroclaw edition

This is what we see at the end

Page 30: Idea stickies green bar - Wroclaw edition

SPOILER ALERT

Page 31: Idea stickies green bar - Wroclaw edition
Page 32: Idea stickies green bar - Wroclaw edition

“Why did it take you so much to get there?”

Page 33: Idea stickies green bar - Wroclaw edition

“It’s the journey not the destination”

Page 34: Idea stickies green bar - Wroclaw edition

But…

Page 35: Idea stickies green bar - Wroclaw edition

But…

Page 36: Idea stickies green bar - Wroclaw edition

Yep, not all journeys are equal

Page 37: Idea stickies green bar - Wroclaw edition

Only some journeys are worth taking

Page 38: Idea stickies green bar - Wroclaw edition

That’s what we call “Core Domain”

#DDD

Page 39: Idea stickies green bar - Wroclaw edition

DDD supports a process of continuous

evolution

Page 40: Idea stickies green bar - Wroclaw edition

It’s not for writing software faster

Page 41: Idea stickies green bar - Wroclaw edition

It’s for rewriting software frequently

Page 42: Idea stickies green bar - Wroclaw edition

Hypothesis: “DDD is an approach to software development for guys that can’t get it right the first time”

Page 43: Idea stickies green bar - Wroclaw edition

Hmmm…

Page 44: Idea stickies green bar - Wroclaw edition

You need a robust architecture for doing

this

Page 45: Idea stickies green bar - Wroclaw edition

And in 2004, Entities, Value

Objects and so on was the only viable

option

Page 46: Idea stickies green bar - Wroclaw edition

DDD is not an architecture,

but it needs a good one badly

#DDD

Page 47: Idea stickies green bar - Wroclaw edition

Requirements Gathering

Yep, that’s a common name for our problem

#Developer #DDD #Agile

Page 48: Idea stickies green bar - Wroclaw edition

How do we collect requirements?

Page 49: Idea stickies green bar - Wroclaw edition
Page 50: Idea stickies green bar - Wroclaw edition

Sequential strategyTime...

Page 51: Idea stickies green bar - Wroclaw edition
Page 52: Idea stickies green bar - Wroclaw edition
Page 53: Idea stickies green bar - Wroclaw edition

way too late…

Page 54: Idea stickies green bar - Wroclaw edition

A simple solution

Put all the key stakeholders in the same room and

sketch a model together

Page 55: Idea stickies green bar - Wroclaw edition

Event Storming!Exploring the Domain

Page 56: Idea stickies green bar - Wroclaw edition

Not this way

Page 57: Idea stickies green bar - Wroclaw edition
Page 58: Idea stickies green bar - Wroclaw edition
Page 59: Idea stickies green bar - Wroclaw edition

This is way betterEventstorming Short

Page 60: Idea stickies green bar - Wroclaw edition

Sequential gatheringTime…

Page 61: Idea stickies green bar - Wroclaw edition

EventStormingTime…

Page 62: Idea stickies green bar - Wroclaw edition

Active Collaboration

All participant should actively contribute

Page 63: Idea stickies green bar - Wroclaw edition

One Man

One Marker

Page 64: Idea stickies green bar - Wroclaw edition

Chaotic eats sequential for

breakfast

Page 65: Idea stickies green bar - Wroclaw edition

and with a few tricks…

#Agile #Coach#Facilitator

Page 66: Idea stickies green bar - Wroclaw edition

STOP Modelling NOW!!!

Page 67: Idea stickies green bar - Wroclaw edition

Leveraging developer’s brain

(something you won’t admit

Page 68: Idea stickies green bar - Wroclaw edition

We basically made the business problem

less boring

Page 69: Idea stickies green bar - Wroclaw edition
Page 70: Idea stickies green bar - Wroclaw edition

It’s not about being faster

That’s still thinking linearly

Page 71: Idea stickies green bar - Wroclaw edition

What’s Eventstorming

It’s an act of

deliberate

collective

learning

Page 72: Idea stickies green bar - Wroclaw edition

We discover a lot

Page 73: Idea stickies green bar - Wroclaw edition

Things we swept under the carpet

Page 74: Idea stickies green bar - Wroclaw edition

The Big Picture

All the business process(es) end-to-end and beyond!

Page 75: Idea stickies green bar - Wroclaw edition

Unlimited Modelling Space

My problem is...

BIGGER

Page 76: Idea stickies green bar - Wroclaw edition

Guerrilla modeling

Page 77: Idea stickies green bar - Wroclaw edition

Once you see it…

Page 78: Idea stickies green bar - Wroclaw edition

Conquer first Divide later

Page 79: Idea stickies green bar - Wroclaw edition
Page 80: Idea stickies green bar - Wroclaw edition

Unlimited surfaceYou don’t know the size of the

problem before exploring it

Page 81: Idea stickies green bar - Wroclaw edition

Big Picture approaches-Impact Mapping -> Gojko Adzic

-Specification Workshop -> Gojko Adzic

-User Story Mapping -> Jeff Patton

-Value Stream Mapping -> Stephen Parry (and others, of course)

-...

Page 82: Idea stickies green bar - Wroclaw edition

In EventStorming

-All key stakeholders in the same room

-With an unlimited modelling surface

-Modelling key processes starting from Domain Events

Page 83: Idea stickies green bar - Wroclaw edition

Domain EventsSometimes I do things for a reason

#DDD

#Developer

#EventStorming

Page 84: Idea stickies green bar - Wroclaw edition
Page 85: Idea stickies green bar - Wroclaw edition

along a timeline

Page 86: Idea stickies green bar - Wroclaw edition
Page 87: Idea stickies green bar - Wroclaw edition

Capture spontaneous complexity

Page 88: Idea stickies green bar - Wroclaw edition
Page 89: Idea stickies green bar - Wroclaw edition
Page 90: Idea stickies green bar - Wroclaw edition

Can’t you do the same with an activity

diagram?

Page 91: Idea stickies green bar - Wroclaw edition

Of course!

Page 92: Idea stickies green bar - Wroclaw edition

too afraid of the conference code of conduct to tell the joke

Could you please laugh anyway?

Page 93: Idea stickies green bar - Wroclaw edition
Page 94: Idea stickies green bar - Wroclaw edition

instead…

Page 95: Idea stickies green bar - Wroclaw edition

Humans evolved as the most efficient

creatures to spot someone

else’s mistakes

Page 96: Idea stickies green bar - Wroclaw edition

Let’s use that!

Page 97: Idea stickies green bar - Wroclaw edition

Business conversation

Technical  conversation

Page 98: Idea stickies green bar - Wroclaw edition

Observe

Language Interaction

Body Language

Page 99: Idea stickies green bar - Wroclaw edition
Page 100: Idea stickies green bar - Wroclaw edition
Page 101: Idea stickies green bar - Wroclaw edition
Page 102: Idea stickies green bar - Wroclaw edition
Page 103: Idea stickies green bar - Wroclaw edition

We have a big a behavioural model of the whole thing, now

what?

Page 104: Idea stickies green bar - Wroclaw edition

We can have the bottleneck emerge

BIG problem

here!!!

Page 105: Idea stickies green bar - Wroclaw edition
Page 106: Idea stickies green bar - Wroclaw edition

We can finally do the right thing

#DDD

#Lean #Entrepreneur

#Developer Please ignore what your brain is suggesting right now

Page 107: Idea stickies green bar - Wroclaw edition

Can we also do it right?

#DDD #Developer

Page 108: Idea stickies green bar - Wroclaw edition

Business conversation

Domain-­‐Driven  Design  Event  Sourcing  

CQRS  Event  Driven  Architecture  

a  business-­‐driven  model  evolution  

Page 109: Idea stickies green bar - Wroclaw edition

Pain-Oriented EventStorming

Focus on

Explore normally foggy areas

Let an action plan emerge!

Pain PointSomeone else’s pain point

Page 110: Idea stickies green bar - Wroclaw edition

Pain Oriented

Show the whole flow Display the pain Explore Choose

EvePai

Page 111: Idea stickies green bar - Wroclaw edition

Danger Zone

Page 112: Idea stickies green bar - Wroclaw edition

best advice comes from

KEEP YOUR

MOUTH SHUT

Page 113: Idea stickies green bar - Wroclaw edition

but please…

Page 114: Idea stickies green bar - Wroclaw edition

Impact Mapping

What is the expected outcome?

Page 115: Idea stickies green bar - Wroclaw edition

Backward implementation

Page 116: Idea stickies green bar - Wroclaw edition

POES as retrospective background

Big Picture first Retrospective scope explicitly

widened Facilitated root cause analysis

Hints for collaboration

Page 117: Idea stickies green bar - Wroclaw edition
Page 118: Idea stickies green bar - Wroclaw edition

As a learning toolEvery new hire in avanscoperta gets an EventStorming session

The result is visible on the wall …

I am here! :-)

Page 119: Idea stickies green bar - Wroclaw edition

Maximise Learning?

Page 120: Idea stickies green bar - Wroclaw edition

EventStorming as a Learning Tool

Page 121: Idea stickies green bar - Wroclaw edition

EventStorming as an experiment planner

Page 122: Idea stickies green bar - Wroclaw edition

Many others are pointing here…

-Lean Startup

-Lean UX

-Popcorn Flow

-Small Controlled Experiments

-Modellathlon

Page 123: Idea stickies green bar - Wroclaw edition

Business experiments

Implementation  experiments

Page 124: Idea stickies green bar - Wroclaw edition

Modelling Sympathy

Don’t know what it means but sounds so cool

Page 125: Idea stickies green bar - Wroclaw edition

Simple as that

#DDD

Page 126: Idea stickies green bar - Wroclaw edition

Aggregates

Workshop

Participant added

Participant removed

Add participant

Remove participant

Maximum Capacity reached

Page 127: Idea stickies green bar - Wroclaw edition
Page 128: Idea stickies green bar - Wroclaw edition

class Customer attr_reader :name, :surname, :address, :picture, :email, :id, :status # ...end

<— The system will probably care only about this one

<— User will need to see all these..

Page 129: Idea stickies green bar - Wroclaw edition

Yep, there is no such thing as “the model”

Page 130: Idea stickies green bar - Wroclaw edition

Oh, sh*t!

Page 131: Idea stickies green bar - Wroclaw edition

“…I used that architecture”

Page 132: Idea stickies green bar - Wroclaw edition

Application

ApplicationApplication

Application

Application

Database

ApplicationApplica

tion

Database

Data-based integration

Applicatio

n

Page 133: Idea stickies green bar - Wroclaw edition

Read Model !=

Write Model

Page 134: Idea stickies green bar - Wroclaw edition

CQRS

Page 135: Idea stickies green bar - Wroclaw edition

Aggregate

Aggregate

Command

Command

Event

Event

Event

EventEvent

EventEventEventEvent store

Domain Model

Projection

Projection

Read Model

DTO

DTO

Pres

enta

tion

UI

UI

UI

UI

Old picture… please ignore the colors

Page 136: Idea stickies green bar - Wroclaw edition

It’s not about speed

Page 137: Idea stickies green bar - Wroclaw edition
Page 138: Idea stickies green bar - Wroclaw edition

It’s about clarity

Page 139: Idea stickies green bar - Wroclaw edition
Page 140: Idea stickies green bar - Wroclaw edition

“… and after you mixed the ingredients, now separate them”

Page 141: Idea stickies green bar - Wroclaw edition

CommandsAdd Item to cart

Customer

Article Details

Page 142: Idea stickies green bar - Wroclaw edition

UI Constraints

Item pageProjection(read model)

Command

UserPrice

Special offer!

Page 143: Idea stickies green bar - Wroclaw edition

Can I influence the user decision?

UXReadability

Information

ImagesSpeed

Page 144: Idea stickies green bar - Wroclaw edition

Can I improve the quality of the user

decision?UX

ReadabilityInformation

ImagesSpeed

Page 145: Idea stickies green bar - Wroclaw edition

Processes

Ticket bought

Welcome process

Send welcome e-mail

Page 146: Idea stickies green bar - Wroclaw edition
Page 147: Idea stickies green bar - Wroclaw edition

Can I improve processes?

ReliabilitySpeed Automation

Composability

Page 148: Idea stickies green bar - Wroclaw edition

External Systems

Thermometer Temperature registered

Page 149: Idea stickies green bar - Wroclaw edition

External Systems

Command External System

Page 150: Idea stickies green bar - Wroclaw edition

Design Level

Active collaboration Wisdom of the crowd

Visually consistent models Big % visible

Page 151: Idea stickies green bar - Wroclaw edition

overengineered?

Page 152: Idea stickies green bar - Wroclaw edition
Page 153: Idea stickies green bar - Wroclaw edition

I mean it!

If you don’t I am gonna

find where you live!

Page 154: Idea stickies green bar - Wroclaw edition

Hey, you mentioned…

…the green bar

#Developer #DDD #Agile

Page 155: Idea stickies green bar - Wroclaw edition

Cucumber to the rescue

Scenario Outline: Manually opening a project finances account When I open a project account called <project name> Then project account should be opened for <project name> And project <project name> should be visible in the projects listExamples: | project name | | Project Alpha | | Project Omega |

Page 156: Idea stickies green bar - Wroclaw edition

Executing a Command

When(/^I open a project account called (.*)$/) do |project_name| params = { 'headline' => project_name } command = OpenProject.from_params(params) @project_account_id = command.aggregate_id Quindi::Application::ProjectFinancesCommandHandler.handle(command) end

Page 157: Idea stickies green bar - Wroclaw edition

Checking a Domain Event

Then(/^project account should be opened for (.*)$/) do |expected_headline| eventually(timeout: 0.8) { last_project_opened_event = @event_logger.received['ProjectOpened'].last expect(last_project_opened_event).to_not be_nil expect(last_project_opened_event).to be_a ProjectOpened expect(last_project_opened_event.headline).to eq expected_headline } end

Page 158: Idea stickies green bar - Wroclaw edition

Checking a Read Model

And(/^project (.*) should be visible in the projects list$/) do |project_name| fail 'Please set @project_account_id ' unless @project_account_id eventually(timeout: 0.5) { visible_project = Quindi::Application::ProjectList.find_by_id(@project_account_id) expect(visible_project).not_to be_nil expect(visible_project['headline']).to eq project_name } end

Page 159: Idea stickies green bar - Wroclaw edition

Wrapping up

Doing the right thing matters

Doing it right matters too

Discovering it matters too

Have a look to CQRS/ES

EventStorming # Friends

Page 160: Idea stickies green bar - Wroclaw edition
Page 161: Idea stickies green bar - Wroclaw edition

References

http://ziobrando.blogspot.com #eventstormers on Google+: https://plus.google.com/u/0/

Page 162: Idea stickies green bar - Wroclaw edition

avanscoperta

Page 163: Idea stickies green bar - Wroclaw edition

Thanks@ziobrando

avanscoperta