DDD事件風暴的詳細議程

banq發表於2019-01-18

剛開始在一個專案中使用DDD Big Picture Event Storming可能會很混亂,這裡描述一個詳細的議程和一個案例簡報,保證其在正確的軌道上實行。

每次我參加DDD的Big Picture Event Storming研討會時,我得到的主要反饋是“這是一次大規模的學習!”。讓所需人員在一起幾個小時會觸發重要的對話。

這就是為什麼Big Picture Event Storming非常適合啟動新專案的原因。一旦每個人都對問題域瞭解得足夠多,他們就能更好地協同工作 他們可以討論架構,並起草目標願景。他們還可以集體討論團隊組織。對於現有系統,他們可以比較不同的遷移策略。例如,重寫或重構是否更好?

一旦每個人都對問題域瞭解得足夠多,他們就能更好地協同工作。

更糟糕的是,並非全部。在探索域空間時可能會發生兩件事。他們會發現現有的問題。他們還將就領域名某個特定的定義達成一致。這些都是快速獲勝的結果。

奇妙的是我們可以在很短的時間內完成所有這些!這是DDD事件風暴的真正力量。在幾天之內,我們可以讓每個人走上可持續發展的道路,從而實現共同的,足夠好的願景!

在此之前,準備是成功的關鍵

支援贊助​​​​​​​
最重要的事情就是找到好的贊助。透過良好的支援贊助,我的意思是有影響力的人的支援。你想要的是你的工作室成為團隊的主動權,而不僅僅是你的主動性。
與這些人進行私人聊天是贏得勝利的最佳方式。最後,您希望他們共享並支援Event Storming會話的共同目標。

範圍
有了明確的目標,您應該大致瞭解會話的範圍。DDD Event Storming是一種探索性(而且相當混亂)的活動。不習慣的人一開始會感到有些失落。為了解決這個問題,我發現最好圍繞1或2個用例啟動研討會。因此,請與您的贊助商或其他領域專家聊聊,預先提出這些用例。
正如我所說,Eve​​nt Storming本質上是探索性的。有關這些用例的討論將在會議期間引起其他問題。由小組決定是否在範圍內新增它們。從精確和具體的用例開始是可以的,沒有必要害怕錯過的東西。
識別第一個領域事件也是一個好主意。它既可以作為一個例子,也可以作為觸發事件風暴的一種方式。根據經驗,這個事件應該在故事的中間。它也應該足夠清楚,讓每個人都能理解。例子:

  • 交易被預訂了
  • 訂單被支付了

如果您想知道領域活動是什麼,請不要擔心,我稍後會詳細介紹。

聽眾
現在是列出理想受眾的時候了。我發現50%的領域專家和50%的技術人員會話會議效果更好。
由於會議室專家太少,研討會成為單向教學課程。理想情況下,我們將為您在研討會範圍內預見的所有功能區域提供專家。
我們還需要在研討會上有相當多的技術人員。最後,這是我們想要發展的領域知識。

請帖
到目前為止,你有了贊助商,一個明確的目標,一些初始用例和理想的受眾。接下來要做的就是傳送誘人的邀請。這取決於組織,需要或多或少的努力才能讓人們參加。
確保在邀請中可以看到贊助商以最大限度地獲得支援。例如,請一位有影響力的贊助商為您傳送邀請。 

簡報
當您有最終的與會者名單時,請向他們簡要介紹研討會的目標。這有助於人們在很多方面:

  • 要明白這個目標值得他們的時間
  • 為最初的迷失方向做好準備
  • 瞭解會話將如何進行
  • 獲得快速問題的答案

我發現快速的15到30分鐘的聚會很有效,但同樣,您可能需要適應您的組織。用於書面溝通的群組可能更喜歡電子郵件,聊天或維基。重要的是人們可以提出公共問題並獲得答案。

視覺議程
我認為在會議開始前準備有用的一件事是視覺議程。正如我所解釋的那樣,DDD Event Storming第一次會非常令人不安,人們可能會覺得有點迷茫。在會議開始之前,將不同顏色的便籤貼上在房間的其他牆壁上。與視覺議程一起走過不同步驟的與會者將使他們放心。這也是突出事件風暴的一些規則的好方法。

無限的設計空間
到目前為止,最奇特和最困難的事情是有足夠大的牆來做研討會。Event Storming的發明者Alberto Brandolini建議使用8米長的牆。有2個目標:

  • 因空間而不受我們設計的限制
  • 有足夠的空間讓每個人都四處走動和合作

如果你有足夠大的房間,這應該是你的第一選擇。阿爾貝託說,走廊也是很好的候選人。我對此的經驗並不是很成功。當我們嘗試它時,參與者抱怨其他人一直來來往往。
一旦你有了房間,你需要一個大的紙捲來貼上它。這樣,您就可以移動您的設計空間。如果您需要延長它,或者如果您決定在工作場所堅持幾天,那麼您將是安全的。

即時貼
事件風暴消耗了大量便籤,特別是領域事件。總而言之,您需要:

  • 許多橙色貼在它上面,每人約一堆
  • 粉紅色
  • 大黃色
  • 小黃色
  • 藍色

水筆
人們需要在帖子上寫一些東西。尖銳或小標記是最好的。它們可以從幾米讀取,但仍然可以讓你在一個帖子上寫足夠的單詞。

沒有椅子,沒有桌子​​​​​​​
典型的會議很無聊,讓人昏昏欲睡。相比之下,一個成功的事件風暴研討會讓人們充滿活力和富有成效。拆除該區域的椅子和會議桌可以幫助人們保持活力。我們也不希望DDD Event Storming成為一個長期的酷刑會議。因此,我們需要安排足夠的休息時間。


在研討會之前完成了所有準備工作。讓我們進入真實的事物。現在我們已準備好一切,我們如何實際開展這個研討會?

1.準備

  • 拆除桌椅
  • 將設計空間貼在牆上
  • 將視覺議程貼在牆上
  • 在某處放下剩下的材料

2.興奮劑
正如我已經說過的,DDD Event Storming是一種不同型別的架構會議。如果人們沒有擺脫他們的傳統方式,這將無法奏效。
提高能量水平也非常有用。事件風暴可能非常緊張和累人,所以他們需要所有能量。您可以在funretrospectives.com找到許多強大的物理能量。我和他們中的很多人都取得了成功。

3.簡報和議程
現在是時候介紹研討會了。從目標,範圍和用例開始。這是解釋我們將要經歷的每一步的好時機,以及它們將如何幫助我們實現最終目標。這也是介紹一些一般慣例的好時機。這是我能說的典型簡報。

總目標:

請記住,DDD Event Storming是一種將Big Design Up Front縮短几天的方法!它會很激烈,但我們會在很短的時間內做很多事情。

事件風暴可能是混亂的。它可能很崎嶇,有時會以意想不到的方式進行,我們可能需要調整。在一天結束時,成功取決於你想要多少!


目標:
本次研討會的主要成果是領域專家和開發人員之間的共享知識。我們稍後將以此共享知識為基礎。
如果我們想要保持這種合作,我們必須堅持使用領域語言。我見過Event Storming會議中進行技術討論,而不是進行業務領域討論。

作用域和用例:
今天,我們將在< 您的作用域 > 的範圍內工作。為了使事情更具體一點,我們將從這些用例開始< 列出您的用例 >。我們將圍繞域事件進行建模,例如< 您的第一個事件 >。

領域事件:

關於便利貼的簡要介紹。
橙色便籤用於領域事件。以下是< You sample event >的示例。以下幾點可幫助您瞭解哪些域事件:

  • 你可以在DDD書籍中瞭解它們
  • 領域專家瞭解他們
  • 用過去時態寫出它們是創造有意義事件的一個技巧。它們不是某人或某事的行為(不是“交易者預訂交易”)。即使某些事件是由行動引起的,我們對行動也不感興趣。
  • 它們不是技術性的,不應該特定於我們系統的實現

領域定義:(又名無處不在的語言
每當我們遇到或在一個領域內達成共識時,請隨意在大黃色帖子上為其寫一個定義。這是一種構建共享領域詞彙表的方法。這對改善我們所有人之間的溝通非常有幫助。這反過來又改善了我們在許多不同方面的工作方式(例如:在選擇重構時)。

問題:
同樣,我們使用紫色便籤來解決“問題”。每當我們遇到:
  • 我們無法回答的問題
  • 一些似乎不對的東西
  • 或者我們應該研究的任何問題

將它記錄在紫色的即時貼上。

最後,為了保持步伐可持續發展,我們每50分鐘休息5分鐘。

4. 領域事件生成
這是研討會實際開始的時候。要求與會者在用例的上下文中抓住他們可以想到的任何領域事件。為了幫助他們開始,請首先從您事先準備的域事件開始。
在某些時候,你會發現域事件生成的速度會下降。這表明是時候進入下一階段了。第一階段通常足夠25分鐘左右。

5.排序​​​​​​​
在第二階段,我們將要求他們按時間順序對事件進行排序。這個想法是代表設計板上的典型工作流程。在生成階段,人們正在寫下他們可以想到的任何事件,這需要他們各自獨自工作。在這個階段,他們需要彼此交談以對事件進行排序。

這就是DDD Event Storming的神奇之處。與會者都對系統有不同的看法。他們在設計板上實現了一些領域事件。他們需要透過這些差異來討論事件的排序。

當人們嘗試對所有領域事件進行排序時,事件風暴會發揮其魔力。

這一階段應引發激烈的討論。希望該小組能夠捕獲許多領域定義和問題

您可以根據需要隨意組織流程表示法:通常情況下,泳道將出現替代品,垂直對齊將表示分支。當發生某種迴圈時,您可能還會建立重複的即時貼。

6.Actor和外部系統
你已經開始寫下你的系統的故事了。所有好故事都有英雄!這一次,請與會者確定觸發或響應事件的Actor(有角色的人)。慣例是使用小黃色即時貼。沒有必要為每個事件新增一個actor,在一個事件鏈的開頭貼上一個就足夠了。
同樣,複雜系統也與外部系統互動。外部系統可以不是操作人員,可以是例如線上API。互動表示是使用藍色即時貼用於外部系統,將事件放置在與其互動的位置。

(banq注:這兩個階段類似UML的用例圖和順序圖階段)

7.講故事
現在是時候檢查整個畫面是否有意義。自人類開始以來,故事一直是知識的載體。過去的知識透過篝火故事代代相傳。我們的大腦很難聽,記住並理解故事
如果人們害怕單獨做這些事情,可以尋找一些志願者。然後請第一位志願者講述系統的故事。他只需要按時間順序完成事件並解釋會發生什麼。
正如敘述者所說,觀眾會提出問題並注意到不一致。這也是新增,刪除或替換事件以修復故事的時候了。可能會出現一些額外的定義。如果在會話期間問題看起來太大而無法修復,請將其置於粉紅色問題後。
敘述故事可能會非常累人,所以請新的敘述者在某個時候接管。

(banq注:故事注重邏輯順序)

8.反向講故事
為了在域中進行更深入的深入研究,可以採用反向講故事的方式。再找幾個志願者,讓他們從最後講出這個故事。其實是反覆詢問“可能引發此事件的原因是什麼?”。這將生成或更新事件,Actor或外部系統。
這種方法運作良好的原因是問題觸發了我們大腦的創造性部分。我們可以想象各種新的可能性。這個階段非常高效,並帶來了很多見解。

9.結束
就是這樣,你已經到了DDD Big Picture Event Storming的末尾。在這一點上,安頓下來並評估結果是個好主意。

到目前為止,DDD Big Picture Event Storming的最大成果是對該領域更好的共享理解。

您可能真的想知道可交付成果是什麼。此時,大多數可交付成果都是無形資產:

  • 到目前為止,最大的是對領域的更好的共享理解。這將透過改善協作來節省大量時間。它將避免規範錯誤,並實現更好的設計。
  • 總之,你已經發現了問題。解決這些問題可能是獲得高回報的快速勝利。
  • 這些定義是統一語言的第一塊磚。利用它可以節省時間並保持系統的概念完整性
  • 最後,這也是協作架構的必要步驟。對領域的良好共享理解使得關於功能架構的討論成為可能。


因此,接下來的步驟可以是:
  • 解決一個主要問題。Alberto Brandolini在書中回憶起這種情況。實際上,Big Boss已經停止了所有其他工作,直到他們解決了一個“新”問題。
  • 透過新增和改進定義來繼續發展無處不在的統一語言
  • 為了起草目標架構,做更多的研討會。


EventStorming解鎖起草架構,繪製團隊和可持續的重構路徑。
​​​​​​​點選標題見原文系列。

相關文章