気になる記事が投下されたので、アンサー記事的に書いておきます。ちなみに元記事はこちら [ アジャイルって受託開発との相性が最悪な気がする - GoTheDistance ]
アジャイルってなんだ?
アジャイルってたとえば、アンチドキュメントだとか、設計がないとか、そういう勘違いが多い(このエントリーの元になった記事もわりとミスリーディングが多い気がする)のだけれども、アジャイルでもドキュメントも設計もとても必要。特にゼロから作る場合は特に。
インフラとかミドルウェアに絡んでいるところは早めに決めておかないと進まないし、画面のUIも表示する項目と画面遷移くらいは決めておかないと。イメージ的には最初に大雑把なドキュメントを作っておいて、それを開発が進む度に穴埋め、修正していくイメージ。だからこそアジャイル開発にはホワイトボードが超重要(紙とかじゃ面倒なので)
工程
アジャイル開発においても
「要件定義」→「設計」→「実装」→「テスト」
の流れは重要で、ウォーターフォールと違うのは、それぞれが100%を満たす必要があるのではなく、次に進むための必要条件が揃えばいいというくらい。それぞれのフェーズごとにデザインチェックをするようなガチガチの試験はしなくていいですよってのがアジャイル開発だと思ってもらえれば。
上流側で設計して、それを下流に投げて作ってもらうんだと思うんだけど、下流に投げたものをたとえば2週間置きに確認する。不明確な点はお客さんに確認するといった流れで進めればいいんじゃないかと思う。
お客さんとだと「いつまでに、どういうものを納品する」という内容の契約で、進め方まで契約の中に入っていないんだろうから、たとえば下流工程の契約上に2週間おきに納品すること、という条件さえ入れておけば問題ないはず。
プロトタイピング
お客さんとの絡みでいえば、ウォーターフォールだと最後の最後に「出来上がりました」と見せるんだろうけど、そうではなくて、たとえば「2週間ごとに出来る範囲で見せます」という感じで見てもらって、「ここの文言変えたいんだけど」というアドバイスをもらう感じ。いわゆるプロトタイプ開発に近いんじゃないかなと思う。
質問に答えてみる
で、書けば長くなりそうだし、うまく説明できる気もしないので、元記事にあった質問に答えてみることにする
最終的なリリース日はいつになるの?
ウォーターフォールと変わりません。ビジネスがなければ生きていけないので、ビジネス要求が最優先です(納期を約束しない仕事なんて趣味と一緒です)。たとえば、機能詰め込みすぎて開発が苦しくならないように、機能要件一覧表を作って、お客さんと相談した上で重要度が少ない機能をリリースから落としていくということはやるでしょう(出来る関係と出来ない関係がありそうなのでそのあたりは柔軟な対応が必要そうですが)。"意志決定を延ばす"ことはしますが、ビジネス上延ばせない時点でそれは意志決定をするタイミングです。
イテレーションって毎回納期もスケジュールも違うの?
アジャイル開発手法の1つであるスクラムでは大体2週間というのを推奨しています。イテレーションを決めなければ自然と納期も守れなくなると思います。
ある機能Aの開発中、別の機能Bに要件漏れがあったらどうなるの?
Bの機能の実装に必要な開発であれば、Aの実装中に直します。そうしなければBの開発が終わったと認められません。それを素早くやるために、TDD/BDDや、継続ビルド(継続テスト)といった環境を導入するのですから。
p.s.
ちなみにここで言っているアジャイルは"XP"ではなく"スクラム"開発がメインです。開発する機能をマネージメントすることに重点を置いた手法なので、SIerにはあうんじゃないかと思います。もともとのベースがトヨタ方式ですしね(・・・え、トヨタ?)
