上司の理解力
今、相当無茶な仕事をしてます。スーパーコンピュータMAGIの予測に従うと、成功確率0.0000000001%と言ったところでしょうか。
さて、こんな失敗確率が高いプロジェクトをいかに成功させるか、無い知恵を絞って考えます。
ウォーターフォール型の開発をやめる
うちの会社は古い会社なので、伝統的なウォーターフォール型の開発を続けてます*1。ウォーターフォール型は、下記の条件に当てはまっている場合のみ上手く行きます。
- 要求が変わらない。→今のプロジェクトでは、要求が大きく変わることがない。
- 開発中に仕様が改訂されるような問題が発生しない。→これは、予測不可能です。
- 見積もりどおりにことが進む。
今のプロジェクトの場合、問題が発生しないことはありません。顕在化していないだけです。
アジャイル開発手法の限界
と言うことで、伝統的な開発手法は捨てる必要があります。そこで、代替案として何が考えられるか。今、流行のアジャイル開発手法でしょうか?
アジャイル開発手法も一つの手だとは思いますが、おそらく私たちのプロジェクトでは合わないと考えてます。理由は、
- 要求(Input)は変わらない
- 問題が顕在化するタイミングが遅い
と言うものです。特に2が問題だと思っています。いくらアジャイルで機嫌良く開発していても、どこかで大きな問題が発生して、そこでストップしてしまうと、今までかけたお金が回収できなくなってしまいます。
プロトタイピング
そう、僕らのプロジェクトの最大の問題点は、問題が顕在化していないことなのです。いくら想像を働かせても、問題になりそうな箇所はわかるのですが、必ず想定外のトラブルが発生すると考えています。なので、問題点を早期にあぶり出す手法と言うと、プロトタイピングとなるのでしょう。プロトタイプを開発する意義は、
- 問題の早期あぶり出し
- 仕様の確立
- 開発力への自信
- 成功体験の獲得
と言ったところでしょうか。何よりも、3,4が大きいような気がします。
問題は、このような開発手法をうちの現場では誰も取ったことがない、ということ。と言うことで、上司にはかなり無茶なお願いをしました。
- コーディングだけしかできない人、言われたことしかしない人はいらない。
- 頭数ではなく、突破力のある人を二人欲しい。
- プロトが開発できるかどうかで、プロジェクトの90%が決まるので、今考えられる最高のチームで仕事をさせて欲しい。
- 言語は問わないが、コード量が極力少なくなるようPerl/Ruby/Pythonのどれかで開発したい(これは、問題が起きた時に、見通しを良くするため、本質のみを記述できる言語を選択する必要がある)。
- 従来のように、一人一人で開発を分担するのではなく、一つのテーマに対して、必ず二人当てて欲しい。そうすることで、問題の顕在化と対処を早めることができる。
当初、上司は嫌がってましたが、今のところ『これ以外に成功に導ける方法がないのだ』と訴えた結果、何とかプロト開発を提案することができそうな感じになってきました。上司なんて堅物だと思い込んでたのだけど、ここまで裁量権をくれるとは思わなかった。
無茶なプロジェクトですが、少し希望の光が見えてきた気がします*2。