さ、やっと本題が書ける。表題の説明をする。
今まで、「ソフト受託ビジネスには、2つのビジネスモデルがある」ことを書いた。
1つは、単価を上げる戦略。
もう一つは、人数を増やす戦略
結果として(それを意図してるわけではないのだが)
・前者は、設計に力を入れ、あらかじめリスクを回避する方法
・後者は、とにかくやってみるので、開発後期にリスクが出る方法
となる。
ここで、最近の最新技術?を導入した、革新的な大規模システムを開発することを考えよう。この場合、最新技術なので、全てを見通せない。そこで、後者の「とにかくやってみる戦略」を取ることになる。この結果、うまくいけば、開発できるが、まずい事が起こると、上記の「とにかくやってみる戦略」のように、テスト以降で問題が発覚、炎上することになる。
これを回避するために、よく、「アジャイルで」ということになるが、
アジャイルは
・革新的な小規模開発か
・漸進的な大規模開発
に向いている手法である。
アジャイルも、「とにかくやってみる戦略」なので、リスクはある。そのリスクを軽度に押さえるため、開発期間を短くし、細かく区切って確認しながらやっていく。そして、その結果を見て、取るべき手段を変えていく(アジャイルの文脈だとリーンのセットベース開発、経営の文脈だとリアルオプション)。
リスクを制御するので、革新的なことはできるが、細かく区切って、(具体的には、1スプリントのレベルに)開発していくので、小規模開発ということになる。
また、個々には革新的なことを行っても、それを長いスパンで継続的に行っていくので、全体的には、漸進的に見える。したがって、大規模開発に導入した場合、全体的に見ると、「漸進的な大規模開発」となる。
大規模開発を行う場合、リスクを押さえて行う必要がある。
ハイリスクの場合、ハイリターンにならずに、会社が潰れてしまう危険性が大きい。
リスクを押さえるためには、設計部分でリスクに対処しておく必要がある。
つまり、「設計に力を入れる戦略」となる。
しかし、この戦略は、リスクがある程度見えていないと使えない。
枯れた技術を使う場合は、リスクは見えるので、問題はない。
しかし、革新的な技術だと、リスクは見えない。なので、このパターンにはならない。
つまり、「設計に力を入れる戦略」は、
・枯れた技術による大規模開発
には向いているのだが、革新的な大規模開発は、できない。
この開発方法は実はウォーターフォールに近い。
つまり、
「ウォーターフォールでは、革新的な大規模開発はできない」
例えば、
仕様がころころ変わってしまうような、クラウドのAPIや
結局リリース時、できない仕様やバグがいっぱいあるOS
とかを使って、ウォーターフォールでは開発できない。
急にインターフェースが変わったりするから・・・
ということで、大規模開発は「受託で行う場合」
・最新技術を漸進的に取り入れて行うか
・枯れた技術を使って行うか
になる。前者はコアビジネスを行う場合、後者は、そうでないビジネスに対して(バックオフィス的な)有効な手法となる。
では、革新的な、大規模開発はできないか・・・
とは、書いていない。この場合、「とにかくやってみる戦略」でのテスト以降のリスクをすべて発注者が受け取ればよい。つまり、受託ではなく、発注者が情報システム部を使って行うか、請負受託ではなく、準委任契約をすれば、実現可能になる・・・理論上は・・・(ただし、そんなことをする会社はないが。。)
今まで、「ソフト受託ビジネスには、2つのビジネスモデルがある」ことを書いた。
1つは、単価を上げる戦略。
もう一つは、人数を増やす戦略
結果として(それを意図してるわけではないのだが)
・前者は、設計に力を入れ、あらかじめリスクを回避する方法
・後者は、とにかくやってみるので、開発後期にリスクが出る方法
となる。
ここで、最近の最新技術?を導入した、革新的な大規模システムを開発することを考えよう。この場合、最新技術なので、全てを見通せない。そこで、後者の「とにかくやってみる戦略」を取ることになる。この結果、うまくいけば、開発できるが、まずい事が起こると、上記の「とにかくやってみる戦略」のように、テスト以降で問題が発覚、炎上することになる。
これを回避するために、よく、「アジャイルで」ということになるが、
アジャイルは
・革新的な小規模開発か
・漸進的な大規模開発
に向いている手法である。
アジャイルも、「とにかくやってみる戦略」なので、リスクはある。そのリスクを軽度に押さえるため、開発期間を短くし、細かく区切って確認しながらやっていく。そして、その結果を見て、取るべき手段を変えていく(アジャイルの文脈だとリーンのセットベース開発、経営の文脈だとリアルオプション)。
リスクを制御するので、革新的なことはできるが、細かく区切って、(具体的には、1スプリントのレベルに)開発していくので、小規模開発ということになる。
また、個々には革新的なことを行っても、それを長いスパンで継続的に行っていくので、全体的には、漸進的に見える。したがって、大規模開発に導入した場合、全体的に見ると、「漸進的な大規模開発」となる。
大規模開発を行う場合、リスクを押さえて行う必要がある。
ハイリスクの場合、ハイリターンにならずに、会社が潰れてしまう危険性が大きい。
リスクを押さえるためには、設計部分でリスクに対処しておく必要がある。
つまり、「設計に力を入れる戦略」となる。
しかし、この戦略は、リスクがある程度見えていないと使えない。
枯れた技術を使う場合は、リスクは見えるので、問題はない。
しかし、革新的な技術だと、リスクは見えない。なので、このパターンにはならない。
つまり、「設計に力を入れる戦略」は、
・枯れた技術による大規模開発
には向いているのだが、革新的な大規模開発は、できない。
この開発方法は実はウォーターフォールに近い。
つまり、
「ウォーターフォールでは、革新的な大規模開発はできない」
例えば、
仕様がころころ変わってしまうような、クラウドのAPIや
結局リリース時、できない仕様やバグがいっぱいあるOS
とかを使って、ウォーターフォールでは開発できない。
急にインターフェースが変わったりするから・・・
ということで、大規模開発は「受託で行う場合」
・最新技術を漸進的に取り入れて行うか
・枯れた技術を使って行うか
になる。前者はコアビジネスを行う場合、後者は、そうでないビジネスに対して(バックオフィス的な)有効な手法となる。
では、革新的な、大規模開発はできないか・・・
とは、書いていない。この場合、「とにかくやってみる戦略」でのテスト以降のリスクをすべて発注者が受け取ればよい。つまり、受託ではなく、発注者が情報システム部を使って行うか、請負受託ではなく、準委任契約をすれば、実現可能になる・・・理論上は・・・(ただし、そんなことをする会社はないが。。)