要求変更に伴うコスト増も、最初から変更を見越しているアジャイル開発は、変更要求が後工程になればなるほど膨らんでしまうウォーターフォール型に比べ、一定の範囲に抑えることが可能です。ただしコストに関しては、アジャイル開発の場合、どの程度の変更までを許容するのかといった見積りが難しいという面もあります。ウォーターフォール型の場合、基本的に最初の要求定義以上に仕様が膨らむことはないので、予算の見積りがしやすいのです。アジャイル開発の案件が増えてくれば、このあたりのノウハウも充実するかもしれません。
さて、まとめるとアジャイル開発は以下のような特徴を有しています。
- 顧客の参画の度合いが強い
- 動くソフトウェアを成長させながら作る
- 反復・漸進型である
- 人と人とのコミュニケーション、コラボレーションを重視する
- 開発前の要求の固定を前提としない
アジャイル開発がウォーターフォール型といかに大きく異なるかがおわかりかと思います。技術者だけでなく、「顧客も共に開発に参加する」ということが重要なので、アジャイル開発を進める際には顧客の同意と協力が不可欠です。残念なことに「発注者(顧客)のほうが受注者(開発側)より立場が上」という感覚が必要以上に強く刷り込まれている企業の間では、この図式が崩れることを嫌がる発注者と受注者が多いこともまた事実です。コミュニケーションが苦手な技術者であればアジャイル開発を苦痛に感じることもあるでしょう。
このコミュニケーション/コラボレーションをいかにうまく行っていくかがアジャイル開発の成功のカギを握っていると言ってもいいでしょう。そういう意味ではチームのメンバーを束ねるプロジェクトリーダー(アジャイル開発の場合には「ファシリテーター」と称することが多い)には、人間関係を円滑にするため、より細やかな視点でメンバーの管理を行う役割が求められます。
アジャイル開発とウォーターフォール型開発の違いをもうひとつ挙げるなら、それは技術者に求められる能力です。ウォーターフォール型の場合、たとえばテスト技術者はテストだけを行えばよく、コーディング担当者は仕様書の通りにコードを書けばよく、それ以外の作業に関わる必要がないことが多いです。
一方、短い期間でひと通り動くソフトウェアを作り上げるには、1人でソフトウェア開発のすべての工程をこなせるスキルをもった技術者が必要です。ある程度以上のスキルをもった技術者でプロジェクトチームを構成してこそ、アジャイル開発は成り立つのです。従って、技術者にはこれまで以上のスキルアップが求められることになります。