Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Domain Storytelling (1 day workshop at DDD EU 2019)

B7a8524f73d760a4e2e403e43c6f0c70?s=47 Stefan Hofer
January 29, 2019

Domain Storytelling (1 day workshop at DDD EU 2019)

Domain Storytelling means that we let domain experts tell us stories about their tasks. While listening, we record the stories using a pictographic language. The domain experts can see immediately whether or not we understand their story. After very few stories, we are able to talk about the people, tasks, tools, work objects, and events in that domain.

In this workshop, we will explore how Domain Storytelling can help you with different aspects of DDD:

crunch domain knowledge
constitute ubiquitous language
segregate bounded contexts
tactical modeling

You will learn how to adapt the method to the various purposes and you will try out different tools. After the workshop, you will be able to apply Domain Storytelling on your own.


Stefan Hofer

January 29, 2019


  1. Brought to you by Stefan (@hofstef) and Henning (@hschwentner). We

    are two DDD Enthusiasts working at WPS – Workplace Solutions GmbH in the beautiful city of Hamburg.
  2. @hofstef @hschwentner

  3. @hofstef @hschwentner

  4. @hofstef @hschwentner Domain Knowledge

  5. @hofstef @hschwentner Fach- sprache Domain Expert IT Expert

  6. @hofstef @hschwentner @hofstef @hschwentner

  7. @hofstef @hschwentner

  8. @hofstef @hschwentner Paul Rayner‘s 3 pillars* of DDD (as explained

    at Explore DDD 2018) *) plus Ubiquitous Language as an overarching principle Picture: Martin Schimak @martinschimak
  9. @hofstef @hschwentner Schedule 11:00 Coffee 13:00 Lunch 15:30 Coffee 18:00

    DDD (Dinner & Drinks in Downtown?)
  10. @hofstef @hschwentner Schedule 9:45 Big Picture Stories 11:15 Strategic Design

    14:00 Domain Model Stories & Implementation Stories 15:45 Integrating Domain Storytelling in the Development Process 17:00 Wrap-Up 17:15 We Model Your Domain!
  11. @hofstef @hschwentner

  12. @hofstef @hschwentner

  13. @hofstef @hschwentner

  14. @hschwentner Do I get a car for this?

  15. @hofstef @hschwentner

  16. @hofstef @hschwentner

  17. @hofstef @hschwentner Leasing Big Picture

  18. @hofstef @hschwentner @hofstef @hschwentner Pictographic Language

  19. @hofstef @hschwentner actor work object activity annotation

  20. @hofstef @hschwentner risk manager contract votes

  21. @hofstef @hschwentner person people system

  22. @hofstef @hschwentner contract passes on signs contract

  23. @hofstef @hschwentner The sales person passes the contract on to

    the risk manager. passes on RISK MANAGER SALES PERSON to CONTRACT
  24. @hofstef @hschwentner 1 1 1


  26. @hofstef @hschwentner 4 5 CUSTOMER CONTRACT CONTRACT


  28. @hofstef @hschwentner 3 good examples are better than 1 bad

  29. @hofstef @hschwentner Draw here Leave some empty space there 

    Annotations, variations, and purpose Preconditions, assumptions, and triggers
  30. @hofstef @hschwentner Workshops

  31. @hofstef @hschwentner

  32. @hofstef @hschwentner

  33. @hofstef @hschwentner @hofstef @hschwentner

  34. @hofstef @hschwentner Tools

  35. @hofstef @hschwentner

  36. @hofstef @hschwentner Whiteboard Kit Picture: W. Kinkeldei @wkinkeldei

  37. @hofstef @hschwentner

  38. @hofstef @hschwentner PowerPoint, yEd, Viso, gliphy… asks for Reservation (movie,

    time, seats) cashier movie-goer 1 Screen plan finds available seats in CineSoft 2 seats recommends 3
  39. @hofstef @hschwentner github.com/WPS/domain-story-modeler

  40. @hofstef @hschwentner Welcome to your (client’s) cinema!

  41. @hofstef @hschwentner Exercise 1 Go To The Movies (Big Picture)

  42. @hofstef @hschwentner Results

  43. @hofstef @hschwentner Results

  44. @hschwentner Strategic Design


  46. @hofstef @hschwentner ?

  47. @hofstef @hschwentner ?

  48. @hofstef @hschwentner ?

  49. @hofstef @hschwentner

  50. @hofstef @hschwentner

  51. @hofstef @hschwentner

  52. @hofstef @hschwentner

  53. @hofstef @hschwentner

  54. @hofstef @hschwentner Leasing Big Picture with Sub-Domains and Bounded Contexts

  55. @hofstef @hschwentner Bounded Context: Activities that - from an actor’s

    perspective - belong together.
  56. @hofstef @hschwentner Activities that belong together:

  57. @hofstef @hschwentner Indicator: only one actor involved xyz context

  58. @hofstef @hschwentner Indicator: one-way information flow abc context xyz context

  59. @hofstef @hschwentner Indicator: different triggers abc context xyz context

  60. @hofstef @hschwentner Indicator: handling the same work object differently

  61. @hofstef @hschwentner More indicators: • Difference in language (see out

    Talk at DDD Europe 2018) Some more heuristics: • https://medium.com/nick-tune-tech-strategy-blog • http://verraes.net/#blog
  62. @hofstef @hschwentner Exercise 2

  63. @hofstef @hschwentner Results

  64. @hofstef @hschwentner

  65. @hofstef @hschwentner Leasing - Risk Management

  66. @hofstef @hschwentner Exercises 3+4

  67. @hofstef @hschwentner Result

  68. @hofstef @hschwentner Result

  69. @hofstef @hschwentner

  70. @hofstef @hschwentner CUSTOMER CONTRACT 3 RISIK MANAGER CONTRACT 7 <<Entity>>

    LeasingContract sign() vote()
  71. @hofstef @hschwentner public class LeasingContract { public void sign(SignDate date)

    //... public void vote(VoteResult result) //... }
  72. @hofstef @hschwentner CUSTOMER CONTRACT 3 RISK MANAGER CONTRACT 7 <<Entity>>

    LeasingContract sign() vote() setVoteResult(…)
  73. @hofstef @hschwentner <<Entity>> LeasingContract sign() vote()

  74. @hofstef @hschwentner <<Entity>> LeasingContract sign() <<Entity>> LeasingContract vote()

  75. @hofstef @hschwentner <<Entity>> LeasingContract sign() vote()

  76. @hofstef @hschwentner <<Entity>> LeasingContract sign() <<Entity>> LeasingContract vote()

  77. @hofstef @hschwentner <<Entity>> LeasingContract sign() <<Entity>> LeasingContract vote()

  78. package leasingninja.sales; class LeasingContract { /*...*/ } package leasingninja.riskmanagement; class

    LeasingContract { /*...*/ }
  79. @hofstef @hschwentner <<Entity>> LeasingVertrag unterzeichne() votiere()

  80. @hofstef @hschwentner <<Entity>> LeasingContract Entities Value Objects Aggregates Services

  81. @hofstef @hschwentner Step 1 Step 2 Step 3

  82. @hofstef @hschwentner Step 2

  83. @hofstef @hschwentner

  84. @hofstef @hschwentner Result

  85. @hofstef @hschwentner From Domain Stories to User Stories

  86. @hofstef @hschwentner “A story is a promise to have a

    conversation later between the end-user and developers. Your goal in writing stories is not to work out details, but to discover the most important goals for your project and to organize a project into discrete, testable chunks.” Agile Government Leadership
  87. @hofstef @hschwentner Summary „kite level“ User Goal „sea level“ Sub-Function

    „fish level“ 3 Levels of User Stories (Alistair Cockburn)
  88. Structure of a „User Goal“ Story • Who?  Actor

    • What?  Activity • Why?  Activity, Annotation, verbal
  89. @hofstef @hschwentner Template <Name> As <Actor> I want to <Goal>

    so that I <Purpose>. • Do not follow the template blindly! • Use ubituitous language • Not a specification! • There are other templates
  90. @hofstef @hschwentner Exercises 5

  91. @hofstef @hschwentner Software Developlement as a Series of Conversations

  92. @hofstef @hschwentner • When/how often? • Overview o Use Case

    Diagrams • Domain Stories as Documentation o Pictures vs. Storytelling o Use Cases • Domain Storytelling and… o …User Story Mapping o …Behavior-Driven Design (BDD) o …Event Storming
  93. @hofstef @hschwentner

  94. @hofstef @hschwentner A Real-World Example Build Software to Coordinate Road

  95. @hofstef @hschwentner

  96. @hofstef @hschwentner

  97. @hofstef @hschwentner

  98. @hofstef @hschwentner

  99. @hofstef @hschwentner

  100. @hofstef @hschwentner

  101. @hofstef @hschwentner https://www.wps.de/portfolio-items/roads/

  102. @hofstef @hschwentner Guidelines for Moderators

  103. @hofstef @hschwentner • Conflicts • Moderatred vs. Cooperative

  104. @hofstef @hschwentner

  105. Stefan: sh@wps.de @hofstef speakerdeck.com/hofstef The pictures used in this talk

    are public domain, unless noted otherwise. Screenshots and examples © WPS - Workplace Solutions GmbH Henning: hs@wps.de @hschwentner speakerdeck.com/hschwentner Website: http://domainstorytelling.org Twitter: #DomainStorytelling Slack: https://ddd-cqrs-es.slack.com/ Slack Channel: #domain-storytelling