イテレーション開発とウォーターフォール開発

以前かかわったプロジェクトはスクラムや XP の要素を取り入れたアジャイルであり、イテーレティブな開発でした。時間的な問題やメンバ間での摩擦等があり残念ながらプロジェクトは失敗といわざるをえない状態でしたが。
そして、現在かかわっているプロジェクトでは昔ながらのウォーターフォール開発に近いです。これら二つのプロジェクトを経験(片方はまだ始まったばかりですが)して、イテレーティブな開発の利点をようやく実感しています。

よく知られているように、イテレーティブな開発では細かい間隔である程度の機能ごとに設計、実装、テスト、リリースとこなして行きます。このため、プロジェクトがすべて終わるまでにどれくらい時間が足りないのか、はたまた余裕があるのかなどを各メンバが認識しやすいと思います。
一方、ウォーターフォール開発では、プロジェクト期間全体を設計、実装、テスト、リリースのように分割するため、開始直後や中盤あたりでは、まだ全体の規模に実感がわきづらいように思えます。結果、各メンバが状況のを認識しづらく、最後になって慌てるということが怒りやすいのではないかと。

また、ウォーターフォール開発では、最初に作るものを決めて、後ろの工程ではその機能を実装していくという形になると思います。このため、時間が足りなくなった場合に機能を削りづらく(作るものについては最初に決めてしまっているため)、結局は実装の品質が落ちていくことになったり、中途半端なままリリースとかになったりするのではないかと思います。
対してイテレーティブな開発では、短い期間で作れる範囲での開発を繰り返すため、途中で時間が足りなくなったとしても、直前のイテレーションで作った部分までに関しては十分な品質を持っていると思います。また、後ろのイテレーションに行くほど、システムで本当に必要としている機能ではなく、付加的な機能を作っているとおもうので、時間が足りない場合に付加的な機能を切り捨てることも可能です。そのシステムで本当に欲しい機能に関しては、前半のイテレーションで作りこめているためシステム的に問題は無いのではないかと思います。*1

繰り返しになりますが、現在かかわっているプロジェクトはウォーターフォール開発です。行き先が見えなくて不安です。それでいて、サービスインが四月一日と決められています・・・
ケツの決まっているプロジェクトほど、イテレーティブに開発した方が安全な気がします。*2

追伸

いくらアジャイル・イテレーティブだからといって、データモデル設計(テーブル設計)やアーキテクチャまで、イテレーション毎にその場限りでやってしまうと、あとあと響きます。後続イテレーションで機能を実装するために、すでに終わっているイテレーションにて開発した部分に対する変更が頻繁に発生することになり、変更コストがバカになりません。
とくに、データモデルの変更はかなり響きます。テーブルを追加するようなパターンならそれほどでもないのですが、既存テーブルのカラムを削除したり、移動したり、はたまた、リレーションを張り替えたりなど等はかなりの苦労を強いられます。

データに関しては変化を抱擁しないで済むように、初期段階である程度のものを作った方がよいとおもいます。

*1:もっとも、お客さんが納得するかどうかは別問題だとは思いますが

*2:イテレーティブな方が柔軟に機能追加ができると思うので、ケツの決まっていないプロジェクトについても同様なのは言うまでも無いですよね