MVVM+MVCパターンを発注視点で分割する

MVVM+MVCパターンを大規模システムにスケールする | Moonmile Solutions Blog で書いた「大規模プロジェクトを発注視点で分割する」の項目をもう少し掘り込んで、思考実験してみましょう。

何故、発注視点を先にやるのか?

もし、ソフトウェア開発が車の購入のように、買ったその日から使えるとすれば(既存のシステムや、クラウド上にあるシステムに沿うならば、「即日」も可能ですよね)、開発している途中の都合は問題ではありません。機能的な価値よりも、機会損失を加味して早期導入によるメリットのほうが大きいパターンを考えてみます。実際には、開発期間が0日であったとしても、実際に使う期日はもっと先にあって、しばらく使わないという塩漬けな状態があったりするのですが、できることなら、すべてを0日で揃えるのが一番価値の高いものでしょう。

そう考えると、ソフトウェア開発における要件定義のまとめからソフトウェアの開発期間、品質の向上、機能の豊富さなどが、すべてマイナス要因となり、減点法で考えることができるようになります。学校においては「減点法」は良くないのですが、リリースが即日であって開発期間が0日であることが「最高」であると考えると、開発期間が増えるたびにマイナスになっていくという単純増加のグラフが簡単に作れるのです。

image

リリースまでの日数が0日でれば、先行利益の価値は最高になります。開発期間が0日以上であれば、その分、先行利益の金額は下がるというわけです。

発注からみれば、すべての機能が揃っているならば、即日使えたほうがいいですよね。既存の製品を売る場合はこのパターンになるでしょう。

開発期間により機能が増えると考えると

リリースまでの日数が0日の場合は、開発期間がなしということなので、何もモノがない場合は、モノがない状態で納品することになります。開発期間が数日、数週間、数か月と増えていくたびに、なんらかの機能が追加され製品を使ったことによる収入が増えると考えられます。これは、間接部門が使う情報管理システムかもしれないし、会計システムかもしれないし、顧客管理のシステムかもしれません。何の機能もない場合は、何も効率化できないけど、数週間なり数か月のソフトウェア期間を設けることによって、何らかのモノができるという考え方です。

image

開発期間を0日を基準にしたとき、右上がりのグラフが「先行利益」になり、右下がりのグラフが「機能による利益」になります。リリース日より、数日前から機能による利益は発生し、開発期間が長くなれば、機能による利益はアップします。ただし、開発期間を数十年にしたら、どこまでも伸び続けるかというとそうでもなく、ある程度の限界が必要なのですが、ここで注目したいのは「適切な開発期間」なので、長期すぎる開発期間の話は省きます。

図を見て分かる通り、二つの線には交点があります。2つの利益を加算したときに、最高になる地点がこの交点になります。2つのグラフが直接の場合には、加算しても同じ値になるのだけど、そこは曲線になると考えてください。

つまり、交差する時期にリリース日を設定すると、先行利益+機能による利益が最高になるというわけです。実際には、リリース後にも機能が追加されるので、機能による利益は少しずつ増加していきます。

ソフトウェア開発には最適なリリース日がある

この考察をまとめると、車のように即日買ったときに全ての価値が得られるのではなく、

  • なんらかの開発期間を要する
  • 開発期間により、製品自体の機能価値があがる

という条件のもとでは、リリース日は0日ではない、ということがわかります。また、すべての機能が盛り込まれた状態の最終的な出荷よりも、ある程度の機能が盛り込まれた状態でリリースさるほうが先行利益が加算されて、トータルの利益が大きいことがわかります。つまり、ここが「発注側の視点」によるリリース日の設定になります。

先行リリース、逐次リリースなどアジャイルやウォーターフォールを含めて、いくつかのリリース方法がありますが、発注側からすれば、リリースまでに極端に短期である必要もないし、すべての機能が揃うまでリリースを待つ必要もありません。リリースされたものを利用して、具体的に先行利益が得られる状態でのみ、リリース日の意味があります。

カテゴリー: 設計 パーマリンク