39
原田騎郎 株式会社アトラクタ 1

DDDをScrumで廻す あるいは ScrumをDDDで廻す

Embed Size (px)

DESCRIPTION

QConTokyo 2013 で講演させていただいた DDDとScrumのお話の資料です。 簡単なライブモデリングもありましたが、モデリングのネタは、ワークショップのお楽しみということで、お願いします。

Citation preview

Page 1: DDDをScrumで廻す あるいは ScrumをDDDで廻す

原田騎郎

株式会社アトラクタ

1

Page 2: DDDをScrumで廻す あるいは ScrumをDDDで廻す

原田 騎郎 Kiro HARADA ドメインモデラー アジャイルコーチ SCMコンサルタント Twitter: @haradakiro 認定スクラムプロフェッショナル 認定スクラムマスター 認定スクラムプロダクトオーナー 株式会社アトラクタ 代表

2

Page 3: DDDをScrumで廻す あるいは ScrumをDDDで廻す

DDD やってますか?

3

Page 4: DDDをScrumで廻す あるいは ScrumをDDDで廻す

¡ 難しいから、もうちょっと勉強してから  

¡ 小さいシステムにはいらないでしょ  

¡ やったほうがよさそうだと思っているんだけれど。

4

Page 5: DDDをScrumで廻す あるいは ScrumをDDDで廻す

Scrumやってますか?

5

Page 6: DDDをScrumで廻す あるいは ScrumをDDDで廻す

¡ 「どうせ、Scrum はやるもんじゃない!」って言うでしょ。  

¡ やってみたら問題ばっかりでてくるし。  

¡ 「いきあたりばったりやっているだけじゃないの?」と突っ込まれるし。

6

Page 7: DDDをScrumで廻す あるいは ScrumをDDDで廻す

どうやったら  DDD & Scrum をうまくやれる?  

使える? 7

Page 8: DDDをScrumで廻す あるいは ScrumをDDDで廻す

¡ ソフトウェアプロジェクトで、まず注意を払うべきなのは、ドメインとドメインロジックである。

¡ 複雑なドメインの設計はモデルに基づくべきである。

8

Page 9: DDDをScrumで廻す あるいは ScrumをDDDで廻す

¡ コアドメインに集中する

¡ ドメインの実務家とソフトウェアの実務家による創造的な共同作業によって、モデルと探求する

¡ 明確に境界づけられたコンテキストの中で、ユビキタス言語により会話する

 9

Page 10: DDDをScrumで廻す あるいは ScrumをDDDで廻す

モデル探索の  うずまき

モデルを新しいシナリオで  揺さぶる

シナリオ

モデル モデルを提示  状態ウォークスルー  解決策ウォークスルー  言語の探求  間違う

ストーリーを語る  肉付けする  難しいところに再フォーカス  コアドメインに再フォーカス

コードによる探査 シナリオを“テスト”としてコードする  厳密さを加える  言語を洗練する  解決策を探求  間違う

収穫&文書化   参照シナリオ   まともなモデルの一部   ほとんどのアイデアは書かない

10

Page 11: DDDをScrumで廻す あるいは ScrumをDDDで廻す

¡ 正しいモデルを探求するのが目的ではない。  

¡ モデルを使いつつ、さらに使えるモデルを探し続けるのが目的。  

¡ うずまきを廻し続ける。

11

Page 12: DDDをScrumで廻す あるいは ScrumをDDDで廻す

¡ 複雑で変化の激しい問題に対応するためのフレームワークであり、可能な限り価値の高いプロダクトを生産的かつ創造的に届けるためのものである。  

§ 軽量  § 理解が容易  § 習得は非常に困難    

12

Page 13: DDDをScrumで廻す あるいは ScrumをDDDで廻す

13 http://www.scrumprimer.org/anime

Page 14: DDDをScrumで廻す あるいは ScrumをDDDで廻す

14 SCRUM  BOOT  CAMP  THE  BOOK  翔泳社より  https://www.facebook.com/ScrumBootCampTheBook

Page 15: DDDをScrumで廻す あるいは ScrumをDDDで廻す

15 http://www.ryuzee.com/

Page 16: DDDをScrumで廻す あるいは ScrumをDDDで廻す

¡  Product Backlog ‒ プロダクトバックログ

§  Sprint Backlog ‒ スプリントバックログ

▪  Backlog Refinement ‒ バックログ洗練

§  Sprint Review ‒ スプリントレビュー

§  Retrospective ‒ 振り返り

¡  Potentially Shippable Increments ‒ 出荷可能な増分

¡  プロジェクトじゃなくて、プロダクトの開発サイクルを廻し続ける。

16

Page 17: DDDをScrumで廻す あるいは ScrumをDDDで廻す

17 By  Dave  Snowden  http://cognitive-­‐edge.com/

http://en.wikipedia.org/wiki/File:Cynefin_framework_Feb_2011.jpeg  を  CC-­‐BY  3.0  ライセンスに基づき翻訳。  

Page 18: DDDをScrumで廻す あるいは ScrumをDDDで廻す

¡ 境界  

¡ フィードバック  

¡ リズム

18

Page 19: DDDをScrumで廻す あるいは ScrumをDDDで廻す

¡ プロダクトビジョン  

¡ ユーザーストーリー  § ユースケースシナリオ  

¡ モデル  

§ モデルとシナリオのうずまきをまわす

19

Page 20: DDDをScrumで廻す あるいは ScrumをDDDで廻す

¡ ストーリーの順位付けをする  

¡ モデルを書いてみる  §  (モデルは常に複数ある)  § モデルはストーリーを記述できるか?  ▪ モデルは役に立つか?  

§ モデルをストーリーが十分説明できるか。  ▪ 足りていないストーリーはないか?

20

Page 21: DDDをScrumで廻す あるいは ScrumをDDDで廻す

¡ 難しいモデルは実装して確かめる  § ドメインモデルのみ  ▪ 永続化層  /  UI  はとりあえず考えなくてよい  

▪ 複数のモデルを確かめる  ▪ 記述力  ▪ 実装のしやすさ  ▪ テストのしやすさ  ▪ 拡張のしやすさ

21

Page 22: DDDをScrumで廻す あるいは ScrumをDDDで廻す

¡ 「検査と適応によって、間違っても、それから学べば良い」  

 けれど  

 ¡ わかる間違いには、気づきたい。  ¡ 2週間は短い。それ以上、短くするときつい。  

22

Page 23: DDDをScrumで廻す あるいは ScrumをDDDで廻す

¡ ホワイトボード  § 関心ごとのある部分だけホワイトボードに  

¡ 適宜清書してリポジトリに  §  astah*  使ってます

23

Page 24: DDDをScrumで廻す あるいは ScrumをDDDで廻す

¡ ドメイン以外にビジネスロジッックが埋もれていないか?  

§ ドメインモデルに書いたテストを、そのまま使えるか?  

§ 実装しにくいところはどこか?  ▪ ドメインの使い方を間違えやすいところはどこか

24

Page 25: DDDをScrumで廻す あるいは ScrumをDDDで廻す

¡ バックログを見積もる  

§ モデルの変更が不要  

§ モデルの拡張が必要  

§ モデルの変更が必要

25

Page 26: DDDをScrumで廻す あるいは ScrumをDDDで廻す

¡ スプリント期間を短くするだけでは成功は難しい。  

¡ 単一のスプリント内で複数のオプションを試す。  

¡ モデルを利用した並行開発

26

Page 27: DDDをScrumで廻す あるいは ScrumをDDDで廻す

¡ パターン指向リファクタリング  

¡ 次のバックログが見えないうちにリファクタリングするのはアンチパターン  

§ リファクタリングのためのリファクタリングは悪  

27

Page 28: DDDをScrumで廻す あるいは ScrumをDDDで廻す

¡ バックログが Ready になる前に実装モデルを拡張するな  

§ 概念モデル、仕様モデルをシナリオでテストしてから。  

¡ リファレンスモデル、パターンの適用を検討する

28

Page 29: DDDをScrumで廻す あるいは ScrumをDDDで廻す

¡ 富  ¡ 資産  ¡ 農業資産  ¡ 家畜  ¡ 牝牛  ¡ ベッシー

29 S.I.Hayakawa  “Language  in  Thoughts  and  Action”  1939  

Page 30: DDDをScrumで廻す あるいは ScrumをDDDで廻す

¡ リファレンスモデルは抽象度が高く、再利用性が高い。  § 時間をかけて確かめられている。  

けれど    ¡ プロジェクトに役に立つかは、確かめないとわからない。

30

Page 31: DDDをScrumで廻す あるいは ScrumをDDDで廻す

¡ 小規模プロジェクトは、要件変更に弱い  § 使えるリソース、期間が限られている  

¡ 小規模プロジェクトの範囲を DDD によるモデルで定義する。  § モデルの拡張範囲を合意する  § モデルの変更をともなうバックログは混入しない

31

Page 32: DDDをScrumで廻す あるいは ScrumをDDDで廻す

¡ パターンランゲージとしての Scrum  

¡ パターンランゲージとしての          Domain  Driven  Design

32

Page 33: DDDをScrumで廻す あるいは ScrumをDDDで廻す

33 http://domainlanguage.com/ddd/patterns/  CC-­‐BY  3.0  Unported

Page 34: DDDをScrumで廻す あるいは ScrumをDDDで廻す

34 http://jeffsutherland.org/scrum/scrum_plop.pdf

Page 35: DDDをScrumで廻す あるいは ScrumをDDDで廻す

35 Coplien,  James  and  Neil  Harrison.  Patterns  of  Agile  Software  Development.  Addison-­‐Wesley,  ©2004.

Page 36: DDDをScrumで廻す あるいは ScrumをDDDで廻す

ありがちなハマりどころ 対応策 モデリング地獄(DDD)  •  モデルを作ることを目標にしてしまう  

•  いつまでたってもモデルが完成しない  

   

スプリント(Scrum)  •  出荷可能な製品を2週間ごとに!  •  モデリングも含めて使えるフィーチャーを2週間で作らなければならない。

全体を見ないで開発(Scrum)  •  システムの全体像を考えない  •  全体計画を立てない        

ユビキタス言語(DDD)  •  みなが使える共通言語をつくる  •  共通言語による全体理解を促進  •  全体計画のガイドとしてのモデル

36

Page 37: DDDをScrumで廻す あるいは ScrumをDDDで廻す

ユーザー  ビジネス

プロダクト オーナー  

開発者  

フィードバック  

プロダクト  バックログ  

出荷可能な  増分  

DDD で Scrumを 廻してみる

Page 38: DDDをScrumで廻す あるいは ScrumをDDDで廻す

¡  DDDとScrumは、うまく組合せられる  §  DDDもScrumも変える必要がない  § お互いのメリットをうまく使える  

¡ 短いサイクルを軽量にまわすのが大事  

¡ まずは、小さく始めてみましょう。

38

Page 39: DDDをScrumで廻す あるいは ScrumをDDDで廻す

¡ DDD+Scrumのワークショップをやります。

¡ 次回開催は未定です §  (たぶん7月には一回)。 §  Twitter @haradakiro でアナウンスします。

39