マネジメントの知識がドメイン駆動設計を加速する

2023年6月13日開催の設計コミュニティイベント「現場から学ぶモデル駆動の設計 第24回」で発表した資料の説明です。

スライドを公開しています。

概要

今年の三月に出版された佐藤大典さんの『エンジニアのためのマネジメント入門』に書かれている知識は、ドメイン駆動設計を実践する時にとても役に立ちます。

(2023-6-15 「深い洞察に向かうリファクタリング」と「戦略的設計」の内容を加筆)

この本の内容をチームで習得することでドメイン駆動設計をより効果的に進められます。

エンジニアのためのマネジメント入門

『エンジニアのためのマネジメント入門』

https://files.speakerdeck.com/presentations/3f18cb5079be47809bbfa8b99242d649/slide_2.jpg

ドメイン駆動設計』に取り組む時に、特に関係するのはこの4つの章の内容です。

ドメイン駆動設計』

https://files.speakerdeck.com/presentations/3f18cb5079be47809bbfa8b99242d649/slide_3.jpg

エヴァンス氏の『ドメイン駆動設計』は全体は4部で構成されています。

それぞれの部に書かれた内容と『エンジニアのためのマネジメント入門』の内容がどう関係するかを紹介します。

第1部「ドメインモデルを機能させる」とマネジメントの知識

https://files.speakerdeck.com/presentations/3f18cb5079be47809bbfa8b99242d649/slide_4.jpg

ドメイン駆動設計』の第1部は、ドメイン駆動設計の目標を説明しています。

スライドのように『エンジニアのためのマネジメント入門』の第2章と第3章の知識は、このドメイン駆動設計の目標と強く関係しています。

「コミュニケーションを支える技術」と「対話のフレームワーク」は、エンジニアが業務知識を習得し設計に反映させていくための基礎となります。

ドメイン駆動設計が重視する「継続的な学習」とイテレイティブな設計の改善活動は「チームのフェーズ」の変化と、その変化(成長)を促進する「6つのリーダーシップのスタイル」の知識が役に立ちます。

第2部「モデル駆動設計の構成要素」とマネジメントの知識

https://files.speakerdeck.com/presentations/3f18cb5079be47809bbfa8b99242d649/slide_5.jpg

ドメイン駆動設計の「エンティティ」「値オブジェクト」「モジュール(パッケージ)」「集約」は、業務知識を習得し表現するためのパターンです。

ドメイン駆動設計に書かれているパターンを実践するために必要なのは、業務の理解です。

『エンジニアのためのマネジメント入門』で紹介されている、バリューチェーン、オーガニグラフ、営業プロセスは事業活動を理解するための全体地図として使えます。管理会計や収益構造の知識は、業務ルールのwhyを理解し、whatを記述するための基礎知識になります。

そういう業務知識(ドメインの知識)をクラス名やパッケージ名として整理して関連づけていくのがドメイン駆動設計の基本的な活動です。

第3部「深い洞察に向かうリファクタリング」とマネジメントの知識

https://files.speakerdeck.com/presentations/3f18cb5079be47809bbfa8b99242d649/slide_6.jpg

ドメイン駆動設計』がほんとうに効果を生み出すのは「深い洞察に向かうリファクタリング」に取り組んだ時です。

そのためには、さまざまな関係者と密度の高いコミュニケーションを繰り返しながら暗黙の概念を掘り起こし、それをプログラミング言語を使って明示的に表現することが必要です。

業務知識の発見と表現の改善を繰り返すためのリファクタリングドメイン駆動設計の核心の活動です。

この核心の活動を支えるのが「ファシリテーション」の基礎知識であり、「リーダーシップ」であり、「ステークホルダー」の特定と建設的なかかわり方です。自分がわかっている/わかっていない、他人がわかっている/わかっていないの「ジョハリの窓」の理解も、深いモデルに近づくために役にたつでしょう。

また深いモデルにたどり着くためには、オーガニグラフ、ステークホルダーマップ、バリューチェーンなど俯瞰的なものの見方が役に立ちます。特定箇所の深堀をしつつ、それが全体の中でどういう位置づけで、他の要素とどう関係するかを理解することが、ドメイン駆動設計でもマネジメントでもよい成果を生み出します。

SECIモデルの内面化・共同化・表出化・連結化のサイクルは、「深い洞察に向かうリファクタリング」の活動サイクルそのものです。

第4部「戦略的設計」とマネジメントの知識

https://files.speakerdeck.com/presentations/3f18cb5079be47809bbfa8b99242d649/slide_7.jpg

ドメイン駆動設計』の戦略的な設計に取り組む時に土台となる知識が『エンジニアのためのマネジメント入門』第4章「組織のマネジメント」と第5章「戦略実現のためのマネジメント」の内容です。

キャリアとしてエンジニアリングマネージャーを目指すかどうかにかかわらず「組織」や「事業戦略」の知識を広げることは『ドメイン駆動設計』を取り入れたソフトウェア開発の基礎であり、また設計活動の軸になります。

異なる境界づけられたコンテキストをどうつなぐかのパターンは、技術的な選択肢というよりは、チーム間や組織間の関係性とコミュニケーションの問題です。「顧客と供給者」の関係を気づくのか、「順応者」や「腐敗防止層」で対応するのか、「別々の道」を選ぶかは、自分たちの組織のバリューチェーンやオーガニグラフの関係をどう捉え、その構造をどうソフトウェアの構造に反映させるか、という設計課題です。

「大規模な構造」の検討は、バリューチェーンやオーガニグラフによるモデル化と直接対応します。

コアドメインを明確にする「蒸留」に必要なのは自社の事業戦略です。事業を存続し発展させていくための競争優位を生み出す中核の活動をどこに求めるかを正しく理解し、それをソフトウェアの設計に活かしていくことで、事業価値を生み出すソフトウエアを開発し発展させていくことができます。

事業戦略が抽象的だったりうまく言語化されていない状況は少なくありません。そのような場合でも、ソフトウェアのどこが複雑になり、どこが重要な変化箇所になることが多いか、というソフトウェアの構造や変更の履歴から、事業戦略を理解する重要な手がかりを得ることができます。そうやってソフトウェアの側から分析していく場合でも、マネジメントの視点からの事業戦略の考え方や枠組みについての知識があれば、より効果的に分析を進めることができます。