アジャイル開発導入の障壁を乗り越えるには
以上、アジャイル開発における「課題」として指摘されている主だった項目を見てきました。特にウォーターフォール型開発との比較においては、アジャイル開発が誤解されている部分も多々あるのですが、その誤解を解くことも含めて、アジャイル開発を導入するために必要な要素を考えてみたいと思います。
開発チームでミッションを共有する
本来、ソフトウェア開発とは、顧客と開発側が同じ目的を達成するために行われるものです。開発手法がウォーターフォール型開発であろうとアジャイル開発であろうと、それは同じです。にもかかわらず、最初から最後まで、双方が違う方向を向いたままのプロジェクトのなんと多いことでしょうか。これは顧客のビジネスだけでなく、日本のソフトウェア開発力にかかわる重大な問題です。「使えない」「使いにくい」ソフトウェアの量産は、誰も幸せにしません。
アジャイル開発では、顧客と開発側との連携を非常に重要視しています。それは顧客の要求を何でも受け入れるためではありません。顧客のビジネスの成功に貢献するためです。開発側が、要求通りにソフトウェアを作成、納品して終わり、というスタンスではアジャイル開発は決して成功しません。限られた予算と期間と人員の範囲内で、できるだけ顧客のビジネス戦略の遂行を支援し、競争力向上を実現するソフトウェアを作り、顧客のビジネスに役立てるという意識を常に持つ必要があります。開発側は、時には顧客の耳に痛いことも提言しなければならないかもしれません。
一方、顧客は要件定義をなるべく迅速に行うことや、プログラムの受け入れテストを綿密に行うことなどで、開発側との協働関係を示すことができます。アジャイル開発にはウォーターフォール型開発とは全く異なるコミュニケーションやコラボレーションのあり方が求められますが、それを実行する覚悟も、また必要になります。
仕様変更できる範囲を可能なかぎり明確にする
アジャイル開発が顧客からの要求に柔軟に対応するからといって、すべての仕様変更を受け入れてしまえば、やがて全体像まで変わってしまうことも起こり得ます。局所的な変更を繰り返しているうちに、当初の基本的な要求まで変わってしまうということにもなりかねません。そのような事態を生じさせないためにも、見積もりの段階で「アジャイル開発で対応する範囲」、つまり仕様変更に応じられる範囲をある程度明確にしておいたほうがいいでしょう。
また、仕様変更を行う場合、それが本当に必要な変更かどうか、顧客と開発側は一緒に検討し、アジャイル開発はムダな仕様変更や機能追加を推奨するものではないということを十分に理解する必要があります。また、仕様変更を行う際は、どの優先順位で仕様の変更を反映させるかも重要になります。
アジャイル開発に必要なスキルを見極める
優秀なエンジニアはどこの会社でも不足していると前述しましたが、アジャイル開発はスーパープログラマーでなければできないというわけではありません。ただし、可能であればチームのリーダー的存在(もしくは補佐役)には、過去にアジャイル開発の経験がある人材を配置することをお勧めします。
アジャイル開発に不慣れなメンバーばかりだと、アジャイル開発で始めたつもりが、顧客の要求に引っ張られすぎて、アジャイル開発ともウォーターフォール型開発ともつかない、とんでもないプロジェクトと化してしまう危険性があるからです。
また、アジャイル開発には必ずしも熟練したエンジニアが向いているとは限りません。どんなに開発技術のスキルがあってもアジャイル開発に向かない人もいます。アジャイル開発はチームで行うものであるため、コミュニケーションが苦手な人や、自分のやり方に固執している人には、なじめない場合が多いようです。こういったヒューマン系のスキルの習得はすぐには難しいのですが、プロジェクト開始前にアジャイル開発関連の教育を受けてもらうなど、チームのメンバーを選ぶ際にはよく気をつける必要があります。
一方で、さまざまな作業を1人でこなさなければならないアジャイル開発は、ある意味、未熟な若いエンジニアにとって成長するチャンスでもあります。チーム全体のバランスを考慮してメンバーを選ぶのはもちろん重要ですが、若手を教育するトレーニングととらえ、積極的に登用してアジャイル開発に慣れさせてみるのも手ではないでしょうか。彼、彼女が将来の有力な戦力に転じる可能性は十分にあります。アジャイル開発は、短い期間で一通りの開発作業を行うので、ウォーターフォール型開発と比べて短期間での若手の戦力化が期待できます。
アジャイル開発に必要な環境を整える
アジャイルという言葉には「迅速な」という意味があります。その言葉どおり、変化のスピードが速い現代では、ソフトウェア開発にも迅速さが必要です。個々のエンジニアのスキルアップに依る部分も大きいのですが、開発をスピードアップさせるための環境づくりも重要です。
例えば、短い期間でのイテレーションに適したビルドシステム、テストの自動化、分散開発環境にも対応したプロジェクト管理ツール、チーム内での情報共有システムなどです。特にアジャイル開発には不向きと言われがちな大規模開発案件を迅速に進めるには、一定レベル以上の開発作業の自動化がポイントとなります。実際に最近では、これらの作業の自動化や作業者間のコラボレーションを支援するツールや環境も容易に入手することができるので、活用に取り組んでみてはいかがでしょうか。
誤解されがちなのですが、大規模案件はアジャイル開発だけでなく、ウォーターフォール型開発でも難しいことには変わりないのです。ウォーターフォール型開発に比べてアジャイル開発の大規模案件事例が少ないため、「アジャイルでは難しい」と言われやすいのかもしれません。