Core Domain を誰が開発する?

開発プロジェクトの初期には、技術者は、その問題領域(ドメイン)の知識が少なく、理解も浅い。たぶん、あまり興味もない。

Core Domain が問題の核心で、Core Domain のモデリングと設計・実装が、ソフトウェアの価値、プロジェクトの成果を大きく左右する。

Core Domain の開発は誰が、どうやるべきか。

・パターン(ベストプラクティス)は?
・アンチパターンは?

ベストプラクティス


もっとも優秀でやる気のあるメンバーを集めて、そのチームに、Core Domain のモデリング、設計・実装をやる。

ソフトウェアの価値、プロジェクトの成果を左右する核心部分だから、当然ですよね。

現実には、技術的には優秀だし、経験も豊富だけど、ドメインを理解したり、ソフトウェアで表現することに、興味を持たない技術者が大勢いること。

私の場合は、私が部門の責任者なので、

・ドメイン層の設計・実装が、最大の成果
・ドメイン層を作るのが優秀な技術者

という価値観を徹底(強制?)しているので、比較的、話しは簡単。

RDRA(リレーションシップ駆動要件定義)と、ICONIX(ユースケース駆動開発実践ガイド)のやり方で、ドメインをモデリングさせる。

ドメインのモデルのレビュー・改良に一番時間をかける。

その中で、いちばんモデリングの意欲とスキルの高いメンバーを、 Core Domain に割り当てる。

技術者の評価基準は、「インフラ層のコードを理解したり自力で書ける」ことは軽視。
「ドメインを理解し、モデルに描ける」ことを重視して、評価、指導している。

どちらかというと、技術的にとんがったメンバーが少ないチームなので、わりと、素直に「ドメインのモデル」重視、というカルチャーになってきた。

腕自慢のメンバーと仕事をする時には、私が責任者である限り「ドメインの理解」「ドメインへの興味」が、第一優先事項ということを、明言し、徹底している。

もちろん、力のある技術者からは、反発や、技術力の評価が不当に低い、という不満はたくさんでてきます。

一般論とか、個人の価値観とかまで立ち入る気はない。それは、個人の自由。

ただ、私は、ソフトウェア開発プロジェクトの成功の鍵は「ドメイン駆動設計」であり、Core Domain の設計・実装であることに、信念を持っている。私が責任者である限り、この価値観は徹底することにしている。

技術者たちが、業務の言葉を積極的に理解し、それをソフトウェアで実現しようとしている、という雰囲気が、まわりに伝われば、プロジェクトがうまく回りだすことを、何度も経験している。

もちろん、良いソフトウェアを作るには、インフラ層も、UI層も、良いソフトウェアにする必要がある。ただし、それは必要条件で、十分条件からは、ほど遠い。

ドメイン層の充実・洗練、中でも、 Core Domain の充実と洗練が、価値のあるソフトウェアの十分条件。

だから、Core Domain には、もっともやる気があって優秀なメンバーを割り当てる。

アンチパターン


Core Domain に優秀なメンバーを割り当てないのは、アンチパターン。失敗パターンですね。

アンチパターンとしては、

・初心者任せ
・外部コンサルタントの支援
・既存ソフトの外部調達

がある。

初心者まかせ


腕自慢の技術者は、彼らが興味を持つ、インフラ層や、UI コントロール、自作のフレームワークやライブラリの開発、などのテクニカルなタスクに割り当てる。

実際の業務の機能は、初心者クラスのメンバーに、「この通りやれば動くから」といって、丸投げ。

データベースの項目と、画面の項目をせっせとマッピングするだけの仕事なんて、ほんとの技術者のやる仕事じゃない...

こういうプロジェクトが世間では多いのかなあ?

良い悪いという議論をする気はないけど、「ドメイン駆動設計」的でないことは確かですね。

「ドメイン層」こそ、ソフトウェアの価値の源泉だと思うんだけどなあ。

外部コンサルタントの支援


プロジェクトの初期に、アナリスト、モデリングのプロ(?)、その業務に強いベテランSEとかを、かりだすパターン。

そのプロジェクトにべったりというわけにいかないので、プロジェクトの初期に短期だけ。

彼らに Core Domain をやらせれば、それなりに、良い仕事をしてくれる。
プロジェクトに専任予定のメンバーたちより、「上流」で力の差があることが、はっきりしている。

でも、問題は、彼らが抜けた後。

ドメインモデルは、継続的に、地道に改良・発展させていくもの。
ましてや、Core Domain こそ、いちばん、エネルギーと時間をかけて、継続的に発展させていく。

短期の高級(高給)メンバーが、やった仕事は、出発点としてレベルが高いかもしれないけど、それを、設計・実装し、育てていくのは、元々のプロジェクトメンバー。

彼らは、それらしいドメインモデルがあっても、実コードではないので、理解ができず、白紙から、コードレベルで、格闘することになる。

高い金を払って、モデルを作っても、誰もそれをありがたいとは思っていない。

これも、典型的な失敗パターンですね。

もし、コアのプロジェクトメンバーが、ドメイン層に真剣に取り組みたいと思っていて、彼らを、Jump Start させるために、ブースター役として、外部の優秀なスタッフに手伝ってもらう、というのはありだと思う。

でも、主役は、あくまでも、プロジェクトのメンバーじゃないといけない。

既存ソフトを外部調達


Core Domain の外部調達はありえない。

すくなくとも、開発プロジェクトで、「ここが核心」という部分は、自分たちで開発すべき場所。
そうじゃなかったら、そもそも、その開発プロジェクトは実施されていないはず。

■ 他の目的や背景に基づいて作られたソフトウェア
■ どういう環境でも、汎用的に使えるように、一般化を重視し、カストマイズ機能をヘビーに作りこんであるソフトウェア

こういうソフトウェアは、今のプロジェクトの問題の核心 ( Core Domain ) を解決するソリューションとしては、ぴったりくるはずがない。

なんでも自作、という主張をするつもりはありません。

でも、「Core Domain」だけは、自作し、継続的に育てる以外に、良いやり方はない。

Core Domain 開発 ベスト・プラクティス


Core Domain のモデリング、設計・実装に、優秀なメンバーを投入することが、役に立つソフトウェアを造り出す、ベストプラクティスなんです。

優秀なメンバーを、Core Domain に、できるだけ長期間、割当て、継続的な洗練を地道に続け、Core Domain の設計・実装を発展させていく。

他にいろいろしわ寄せが来るけど、そっちは、別の手段で、なんとか、やりくりする。

プロジェクトの人員配置、時間配分、外部資源の調達は、すべて、Core Domain を中心に、判断をしていく。

calendar
 123456
78910111213
14151617181920
21222324252627
28      
<< February 2010 >>
システム設計日記を検索
プロフィール
リンク
有限会社 システム設計
selected entries
categories
archives
recent comment
  • 抽象化のスキルアップ(発想の転換)
    masuda220 (02/07)
  • 抽象化のスキルアップ(発想の転換)
    mkon (02/07)
  • 問題の核心に切り込んでいく
    masuda220 (02/03)
  • 問題の核心に切り込んでいく
    yamauchi (02/02)
  • RDRA (リレーションシップ駆動要件分析) の公式サイト
    kanzaki (01/20)
  • Bounded Context パターン : ドメインの分離独立を徹底する
    masuda (01/08)
  • Bounded Context パターン : ドメインの分離独立を徹底する
    yamauchi (01/07)
  • ドメイン駆動設計は、III部から始めるのが良いかも
    yamauchi (01/05)
  • ドメイン駆動設計は、III部から始めるのが良いかも
    masuda (12/28)
  • 相互依存性の設計・実装パターン いろいろ
    j5ik2o (12/10)
recent trackback
others
mobile
qrcode
powered
無料ブログ作成サービス JUGEM