
会議室予約ドメインモデリング会を開催しました!
12/14(土)に開かれた現場でDDDのイベントでのモデリングワークショップの経験を元に、12/21(土)にモデリング勉強会を共同開催しました
お題はこちら
今回集まったメンバーは7人。
役割としては、明確な定義はしてなかったけど、以下の感じ
・ファシリテーター
・ロガー
・メンバー
ロガーっていうのはなんだろうって感じですが、いわゆる書記です。
モデリングワークショップ系のレポートブログを見ていて思うのが、大体完成形のモデルしか出てないこと。
初期のモデルから、どう進化して最終形になっていったかという過程が見えないと、モデリングの威力っていうのは外から見ても分かりづらい&当事者たちも後からふりかえりづらいと思っていた為、書記役は必要だと感じていました。
人数もそれなりに集まっていたので、私はこのロガー役に立候補することに。
モデリング初期:単語出しから
メンバーの自己紹介はそこそこにして、まずはお題のユースケースを元に、付箋に単語出しをしていきました。
単語出しは、名詞・動詞を抜き出すことにして、付箋で色分け
・オレンジ:名詞
・緑:動詞
後から考えると、これが結構チームのエンジンが掛かるきっかけとなったように思えます。
本当はここの写真いっぱい撮って載せる予定でしたが、撮るの忘れた…。
モデリング初期2:書き出した付箋をホワイトボードに張り出す
ある程度単語が出せてきたので、それをホワイトボードに張り出して、ユースケースを表現していきます。
「予約者が、会議室を選択して、会議室を予約する。→ 予約が生まれる」
みたいな感じになりました。
会議室の下にぶら下げている名詞は、会議室予約に関連しそうな単語をグルーピングして並べてみました。
モデリング中期:会議室の利用状況と利用実績の違いとは?
ある程度ユースケースがハッキリ見えてきたようになってきましたが、このあたりで、
「いま現時点で、どこの会議室のどの時間帯が予約できるのか」というのと、「予約された会議室が、いまちゃんと利用されているのか」という話がだんだんと混線してきました。
結果的には、「会議を開始する」「会議を終了する」といった、会議室の利用状況を更新するユースケースを別として作り、そこで整理をするようにしていきました。
モデリング中期2:ユースケースのビジネスルールを記載していく
会議室の予約に関するユースケースを更に深堀りしていく方針になりました。
※新しく出てきたユースケースは、今回一旦置いておきます。
ビジネスルールはGitHubのお題のところに記載をしていた為、それをチーム内で声に出しながら確認していき、1個ずつ付箋に書いて貼っていきました。
(色は黄色)
「会議室」「開始時間」「予約時間」「日時」などの予約に関する情報を明示的にグルーピングしていきます。
この辺りぐらいから、動詞である緑色の付箋がだいぶ減っていきます。
いったんのふりかえり
このぐらいの粒度になってくると、
「明日、誰かがいなくても、これで実装できそう」
という意見が出てきました。
また、これらのモデルができるまでに90分くらいを費やしていますが、
今回のユースケースとはまた関係ない話もたくさん出てきています。
(ブレストの発散みたいな感じですね)
「その話はいま関係ないんです」とバッサリ切ってしまうのは簡単なのですが、パーキングロットという考え方で、付箋を隅っこに追いやり、いったん忘れるという方針を今回取りました。
こんな感じです。
PA,いつかやりたい、封印ゾーンって分かれていますが、その場のノリなので、どれもパーキングロットだと思ってもらえればOKです。
今回のユースケースとは関係ないものは、こうやってホワイトボードの隅に追いやり、いったん忘れることにしました。
普通に何も書かないで忘れてしまえばいいのでは? とも思ったりしますが、頭の中にあるモヤモヤは出し切って身軽にしてしまった方が、頭も目の前の課題に集中しやすい、という効果を期待した感じでもあります。
モデリング後期:シグネチャレベルでの実装
実装に向けて、囲ったりして明確にユースケースの可視化をしていきます
声に出していくと、「予約者」が「予約する」ことによって「予約」ができる
日本語的にちょっと変化もしれませんが、ユースケースとしてシンプルになってきました。
細かい要素(Value Object)から実装していくのか、まずユースケースから実装していくのか、チーム内で方針を話し合い、ユースケースの方から実装。
名前で悩んでしまったら、とりあえず日本語で書いて実装をやってしまえーとなり、書いていきました。(日本語でもVisual Studioってintellisense利くんですね。初めて知りました 笑)
最後のふりかえり
ちょこっと実装を始めたところで時間が来てしまい、実装は中途半端な形で終わりを迎えました。
ここまでの会のふりかえりをやって頂きましたが、
実装フェーズが「予定通り進んだ派」「思ったより進まなかった派」で意見を出してもらいました。
思ったより進まなかった派でも、「掛けるべき議論をした」という意見が出ていたので、今後同じメンバーで仕事をするときにはよりスムーズに仕事が進むんだろう、という実感は持てました。
最後に会自体のふりかえりとして、FunDoneLearnを試してみました。
※メンバーの中に経験者がいたので、ファシリテーターをお願いしました
詳細は以下の記事をご参照ください。
通常はDoneが多いらしいですが、今回はLearnに偏りが見られました。
結構学びのある会になったということなんだろうと思います。
Learnの内容も見ていると面白く、
モデリング自体より、ファシリテーションのやり方だったり、意思決定の方法だったり、モブプロスペースの配置が良かったなど、モブワーク関連への学びが多かった印象です。
どちらかというと、モデリングとか設計に関する成果物というよりは、
どうやってモデリングを進めるか、コミュニケーションを進めるのか、という方にみんな学びがあったようです。
メンバー自体も、チームで設計をする上で、コミュニケーションが重要だと皆さん認識していて、そちらに関心が高かったように感じました。
今回の完成形
最後に、勉強会終了時点でのモデルを貼っておきます
次のチャレンジとしては、このユースケースから、実装をやっていくことをやっていきます。(1/1予定)