agile steps to improve the status quo
DESCRIPTION
I used this set of slides for a talk I gave at the SCRUM Breakfast in Bern on June 30, 2010.TRANSCRIPT
agile stepsto improvethe status quo
www.tudorgirba.com
PhD2002 2005 2009
PostDoc
Consultant
www.tudorgirba.com
agile stepsto improvethe status quo
www.tudorgirba.com
agile stepsto improvethe status quo
www.tudorgirba.com
challengedemolisten
enable
the status quo
the status quothe existing state of affairs
Picture by _FXR
Picture by _FXR
F = m a.
E = m c. 2
post-it
the status quothe existing state of affairs
the status quothe sum of our assumptions
Tom de Marco
It’s not what you don’t know that kills you,it’s what you know that isn’t so
challenge
challengepresent
presenting is storytelling
story = fairy tale
designyour story
messagemessage
messagemessage
message
messagemessage
message
message
messagemessage
message
messagemessagemessage
message
message
messagemessage
message
message
message
message
message
messagemessage
message
message
message
message
messagemessage
message
messagemessage
message
message
messagemessage
messagemessage
message
messagemessage
message
message
messagemessage
message
messagemessagemessage
message
message
messagemessage
message
message
message
message
message
messagemessage
message
message
message
message
messagemessage
message
messagemessage
message
message
messageone
to Understand Software Evolution
Modeling History
vorgelegt von
Tudor Gîrba
von Rumänien
Inauguraldissertation der Philosophisch-naturwissenschaftlichen
Fakultät der Universität Bern
Leiter der Arbeit:
Prof. Dr. Stéphane DucasseProf. Dr. Oscar Nierstrasz
Institut für Informatik und angewandte Mathematik
To provide a genericmeta-model for expressing software evolution analyses, we need to recognize evolution as an explicit phenomenon and model it as a first class entity.
to Understand Software Evolution
Modeling History
vorgelegt von
Tudor Gîrba
von Rumänien
Inauguraldissertation der Philosophisch-naturwissenschaftlichen
Fakultät der Universität Bern
Leiter der Arbeit:
Prof. Dr. Stéphane DucasseProf. Dr. Oscar Nierstrasz
Institut für Informatik und angewandte Mathematik
messageone
messageonedeliver
slides
slides are visual aids
slides are visual aids
Important sign
1. At this sign, stop, look around and proceed if no other car is coming your way.
2. Important!!!! The cars coming from the other directions will not have to stop.
3. This sign was put here by the authorities in charge.
4. This sign concerns vehicles only. Pedestrians should look at the signs dedicated to them.
5. This sign should not be touched or hindered in any way. Any violation is punishable according to the law.
STOP
STOPImportant sign
•At this sign, stop, look around and proceed if no other car is coming your way.
• Important!!!! The cars coming from the other directions will not have to stop.
• This sign was put here by the authorities in charge.
•This sign concerns vehicles only. Pedestrians should look at the signs dedicated to them.
•This sign should not be touched or hindered in any way. Any violation is punishable according to the law.
STOPImportant sign
•At this sign, stop, look around and proceed if no other car is coming your way.
• Important!!!! The cars coming from the other directions will not have to stop.
• This sign was put here by the authorities in charge.
•This sign concerns vehicles only. Pedestrians should look at the signs dedicated to them.
•This sign should not be touched or hindered in any way. Any violation is punishable according to the law.
detailed effective
projector = screen
the story is in between
slides are visual aids
slides are visual aids
presentationzen.com
tudorgirba.com/blog
blog.duarte.com
thebackofthenapkin.com
www.ted.com
presenting is storytelling
challengepresent
challengepresent
demo
content
content form
content form
content form
yesterday’s weather
30%
30% 90%
yesterdayWeatherProbabilityWithTopPreviousWENM: topPreviousWENMandTopCurrentENM: topCurrentENM | currentVersions previousClassHistoriesSortedByWENM yesterdayWeatherHits last2VersionsTopHistories last2Versions last2HistoriesSortedByENM x valuesCount previousVersionsTopHistories previousVersionsTopHistoriesNames over | currentVersions := OrderedCollection new. currentVersions addLast: (self allVersionNames at: 1).
yesterdayWeatherHits := 0.
(2 to: self allVersionNames size) do: [: i | self smelly: 'this algorithm is too big and complex'.
previousClassHistoriesSortedByWENM := (self classHistories selectFromReferenceVersionCollection: currentVersions) sortBy: [:a :b | a value getWENM >= b value getWENM]. currentVersions addLast: (self allVersionNames at: i).
previousVersionsTopHistories := OrderedCollection new.
x := previousClassHistoriesSortedByWENM first value getWENM. valuesCount := 0.
previousClassHistoriesSortedByWENM do: [ :each | (each value getWENM ~= x) ifTrue: [ valuesCount := valuesCount + 1. x:= each value getWENM]. (valuesCount < topPreviousWENM) ifTrue: [ previousVersionsTopHistories addLast: each] ].
last2VersionsTopHistories := OrderedCollection new.
last2Versions := OrderedCollection new. last2Versions addLast: (self allVersionNames at: (i-1)). last2Versions addLast: (self allVersionNames at: i). last2HistoriesSortedByENM := (self classHistories
(each value getWENM ~= x) ifTrue: [ valuesCount := valuesCount + 1. x:= each value getWENM]. (valuesCount < topPreviousWENM) ifTrue: [ previousVersionsTopHistories addLast: each] ].
last2VersionsTopHistories := OrderedCollection new.
last2Versions := OrderedCollection new. last2Versions addLast: (self allVersionNames at: (i-1)). last2Versions addLast: (self allVersionNames at: i). last2HistoriesSortedByENM := (self classHistories selectFromReferenceVersionCollection: last2Versions) sortBy: [:a :b | a value getWENM >= b value getWENM].
x := last2HistoriesSortedByENM first value getENM. valuesCount := 0. last2HistoriesSortedByENM do: [ :each | (each value getENM ~= x) ifTrue: [ valuesCount := valuesCount + 1. x:= each value getENM]. (valuesCount < topCurrentENM) ifTrue: [ last2VersionsTopHistories addLast: each] ]. previousVersionsTopHistoriesNames := previousVersionsTopHistories collect: [ :each | each value name]. over := false.
last2VersionsTopHistories do: [:each | ((previousVersionsTopHistoriesNames includes: (each value name)) and: [over not]) ifTrue: [ yesterdayWeatherHits := yesterdayWeatherHits + 1. over := true]. ]. ].
^yesterdayWeatherHits/(self size - 1) asFloat.
yesterdayWeatherProbabilityWithTopPreviousWENM: topPreviousWENMandTopCurrentENM: topCurrentENM | currentVersions previousClassHistoriesSortedByWENM yesterdayWeatherHits last2VersionsTopHistories last2Versions last2HistoriesSortedByENM x valuesCount previousVersionsTopHistories previousVersionsTopHistoriesNames over | currentVersions := OrderedCollection new. currentVersions addLast: (self allVersionNames at: 1).
yesterdayWeatherHits := 0.
(2 to: self allVersionNames size) do: [: i | self smelly: 'this algorithm is too big and complex'.
previousClassHistoriesSortedByWENM := (self classHistories selectFromReferenceVersionCollection: currentVersions) sortBy: [:a :b | a value getWENM >= b value getWENM]. currentVersions addLast: (self allVersionNames at: i).
previousVersionsTopHistories := OrderedCollection new.
x := previousClassHistoriesSortedByWENM first value getWENM. valuesCount := 0.
previousClassHistoriesSortedByWENM do: [ :each | (each value getWENM ~= x) ifTrue: [ valuesCount := valuesCount + 1. x:= each value getWENM]. (valuesCount < topPreviousWENM) ifTrue: [ previousVersionsTopHistories addLast: each] ].
last2VersionsTopHistories := OrderedCollection new.
last2Versions := OrderedCollection new. last2Versions addLast: (self allVersionNames at: (i-1)). last2Versions addLast: (self allVersionNames at: i). last2HistoriesSortedByENM := (self classHistories
yesterdayWeatherProbabilityWithTopPreviousWENM: topPreviousWENMandTopCurrentENM: topCurrentENM | currentVersions previousClassHistoriesSortedByWENM yesterdayWeatherHits last2VersionsTopHistories last2Versions last2HistoriesSortedByENM x valuesCount previousVersionsTopHistories previousVersionsTopHistoriesNames over | currentVersions := OrderedCollection new. currentVersions addLast: (self allVersionNames at: 1).
yesterdayWeatherHits := 0.
(2 to: self allVersionNames size) do: [: i | self smelly: 'this algorithm is too big and complex'.
previousClassHistoriesSortedByWENM := (self classHistories selectFromReferenceVersionCollection: currentVersions) sortBy: [:a :b | a value getWENM >= b value getWENM]. currentVersions addLast: (self allVersionNames at: i).
previousVersionsTopHistories := OrderedCollection new.
x := previousClassHistoriesSortedByWENM first value getWENM. valuesCount := 0.
previousClassHistoriesSortedByWENM do: [ :each | (each value getWENM ~= x) ifTrue: [ valuesCount := valuesCount + 1. x:= each value getWENM]. (valuesCount < topPreviousWENM) ifTrue: [ previousVersionsTopHistories addLast: each] ].
last2VersionsTopHistories := OrderedCollection new.
last2Versions := OrderedCollection new. last2Versions addLast: (self allVersionNames at: (i-1)). last2Versions addLast: (self allVersionNames at: i). last2HistoriesSortedByENM := (self classHistories
present
present
past
present
past future
present
past future
present
past future
present
past future
prediction hit
present
past future
YesterdayWeatherHit(present):
past:=all.topChanged(beginning, present) future:=all.topChanged(present, end)
past.intersect(future).notEmpty()
prediction hit
hit hit hit
YW = 3 / 8 = 37%
hit hit hit hit hit hit hit
YW = 7 / 8 = 87%
yWFor: yesterdayCheck for: tomorrowCheck | hits | hits := (self detailedYWFor: yesterdayCheck for: tomorrowCheck) sum: [ :each | each isEmpty ifTrue: [0] ifFalse: [1]]. ^ hits / (self versions size - 2)
yWFor: yesterdayCheck for: tomorrowCheck ^ ( 3 to: self versions size ) collect: [ :i | | yesterday tomorrow | yesterday := self selectByExpression: yesterdayCheck appliedFromVersionIndex: 1 toVersionIndexAndPresentInIt: i - 1. tomorrow := self selectByExpression: tomorrowCheck appliedFromVersionIndexAndPresentInIt: i - 1 toVersionIndex: self versions size. yesterday intersectWith: tomorrow ]
content form
content form
challengedemo
challengedemolisten
challengedemolisten
enable
It’s not Lupus
established technology
established technology
established technology
disr
uptiv
ete
chno
logy
established technology
1 2 3 4
5 6 7 8
9 10 11
1213 14
15
1 2 3 4
5 6 7 8
9 10 11
1213 14
15
1 2 3 4
5 6 7 8
9 10 11
1213 14 15
1 2 3 4
5 6 7 8
9 10 11
1213 14 15
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
1 2 3 4
5 6 7 8
9 10 11 12
WhatWhereWhenWhoHow
WhatWhereWhenWhoHow Why
challengedemolisten
enable
agile stepsto improvethe status quo
www.tudorgirba.com
challengedemolisten
enable