Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

Don't demo facts. Demo stories!

I used this set of slides for a talk I gave at NDC 2015.

Livres associés

Gratuit avec un essai de 30 jours de Scribd

Tout voir
  • Soyez le premier à commenter

Don't demo facts. Demo stories!

  1. 1. don’t demo facts. demo stories! @girba
  2. 2. I help developers not read code @girba
  3. 3. I help developers not read code @girba
  4. 4. designing value
  5. 5. designing value?
  6. 6. designing value? something someone is willing to pay something for
  7. 7. designing value?
  8. 8. designing value? choosing beautiful tradeoffs within given constraints
  9. 9. designing value?
  10. 10. designing value?
  11. 11. track value?
  12. 12. usability
  13. 13. usability habitability https://www.dreamsongs.com/Files/PatternsOfSoftware.pdf
  14. 14. track value? let developers show the value
  15. 15. feedback is key
  16. 16. expose your assumptions
  17. 17. present your assumptions
  18. 18. present
  19. 19. 2 hours 20 people 1 man week every iteration
  20. 20. a review is an investment
  21. 21. if there is no feedback, it’s useless
  22. 22. if it does not affect product decisions, it’s useless
  23. 23. present
  24. 24. • presenting • is not • bullet • pointing
  25. 25. presenting is not even slide showing
  26. 26. presenting is story telling
  27. 27. demoing is story showing
  28. 28. as a I want to so that
  29. 29. as a user I want to be able to search in any folder so that I can find files and folders of interest
  30. 30. I navigate to a folder where I think I have some folders and files of interest. I just do not know exactly their names. Would it not be cool to search in place and then continue the navigation?
  31. 31. context I navigate to a folder where I think I have some folders and files of interest. conflict I just do not know exactly their names. resolution Would it not be cool to search in place and then continue the navigation?
  32. 32. demoing is story showing
  33. 33. demoing is story showing (the story behind the user story)
  34. 34. content form
  35. 35. content form
  36. 36. yesterday’s weather
  37. 37. 30%
  38. 38. 30% 90%
  39. 39. yesterdayWeatherProbabilityWithTopPreviousWENM: topPreviousWENM andTopCurrentENM: 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
  40. 40. (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.
  41. 41. yesterdayWeatherProbabilityWithTopPreviousWENM: topPreviousWENM andTopCurrentENM: 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
  42. 42. yesterdayWeatherProbabilityWithTopPreviousWENM: topPreviousWENM andTopCurrentENM: 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
  43. 43. present
  44. 44. present past
  45. 45. present past future
  46. 46. present past future
  47. 47. present past future
  48. 48. present past future prediction hit
  49. 49. present past future YesterdayWeatherHit(present): past:=all.topChanged(beginning, present) future:=all.topChanged(present, end) past.intersect(future).notEmpty() prediction hit
  50. 50. hit hit hit YW = 3 / 8 = 37% hit hit hit hit hit hit hit YW = 7 / 8 = 87%
  51. 51. 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 ]
  52. 52. content form
  53. 53. content form
  54. 54. content form
  55. 55. content form
  56. 56. content form
  57. 57. don’t demo facts. demo stories! @girba

    Soyez le premier à commenter

    Identifiez-vous pour voir les commentaires

  • DanielGetachew

    Jun. 20, 2015
  • wettel

    Jun. 26, 2015
  • pestefo

    Jul. 7, 2015

I used this set of slides for a talk I gave at NDC 2015.

Vues

Nombre de vues

1 466

Sur Slideshare

0

À partir des intégrations

0

Nombre d'intégrations

265

Actions

Téléchargements

12

Partages

0

Commentaires

0

Mentions J'aime

3

×