近年、ウォーターフォール開発に変わって主流になりつつあるアジャイル開発。
しかし、アジャイル開発の特性を理解しないまま採用し、プロジェクトが失敗してしまった例も少なくありません。
本記事では「ウォーターフォール開発とアジャイル開発って何が違うの?」「アジャイル開発を採用するメリットは?」「アジャイル開発を成功させるコツは?」といった疑問を解決します。
ここでは、大きく分けて6つのテーマについてご紹介していきます。
- アジャイル開発とは?
- アジャイル開発とウォーターフォール開発の違い
- アジャイル開発を採用するメリット・デメリット
- アジャイル開発を成功させるコツ
- アジャイル開発の成功事例
- アジャイル開発の主な手法
最後まで読めばアジャイル開発の特性が理解でき、アジャイル開発の良さを活かせます。
アジャイル開発とは?
アジャイル開発とはシステムを小さな機能単位に分割し機能ごとに、定義・設計・開発・テストを繰り返す開発手法です。
「定義・設計・開発・テスト」の周期はイテレーションと呼ばれており、リリースはイテレーションごとに行われます。
上記のフローをイテレーション1とした場合、次はイテレーション2、その次はイテレーション3と繰り返しながら、システム精度を向上させていきます。
飲食店の予約システムをアジャイルで開発する場合を考えてみましょう。
まず、ユーザーがスマホやパソコンからお店の予約が出来る機能をリリースするのがイテレーション1です。
リリース後にクライアントや利用ユーザーから「ネット注文にも対応したい」「1時間単位ではなく30分単位で予約出来るようにしてほしい」といったフィードバックをもらったと仮定します。
開発チームはフィードバックを参考に、イテレーション2で「テイクアウト注文を受け付ける機能」「30分単位の予約受付可能」などを実装します。
このように、イテレーション1→1回目のリリース→クライアントや利用ユーザーからのフィードバック→フィードバックをもとにした開発(イテレーション2)→2回目のリリース…を繰り返していくのがアジャイル開発です。
また、ウォーターフォールと比較すると開発期間が短くなり、迅速なリリースが実現できるのでアジャイル(俊敏な)と呼ばれています。
アジャイル開発とウォーターフォール開発の違いは?
ウォーターフォール開発は要件定義を綿密に決めてから、設計・開発・テスト・リリースの順に沿って進めていきます。
開発するまでに時間はかかりますが要件定義や機能設計がしっかりと決められているため、予算やスケジュールを立てやすいのがメリットです。
しかし、開発途中で仕様変更や新機能追加・機能削除に対応するのは難しいといった側面もあります。
ウォーターフォール開発は、前工程に戻らない前提で進められます。
つまり、「開発」で問題が生じた場合は「設計」から見直さなければなりません。
ですので、別途費用が発生したり、スケジュールが伸びたりするケースも出てきます。
一方アジャイル開発は最初のリリースですべてのシステム要件は満たしておらず、重要度の高い機能から順番にリリースしていきます。
しかし、リリース後にブラッシュアップしていくことが可能なので、システムリリースまでの時間を大幅に短縮できます。
また、小さな機能単位ごとに開発を進めるので、急な機能追加や仕様変更にも柔軟な対応が可能です。
以上のことから、「要件の全体像が不明瞭なプロジェクト」「顧客の状況によって機能開発の優先順位が変わるプロジェクト」「仕様変更が前提のプロジェクト」はアジャイル開発が向いています。
一方「時間がかかってもいいので品質を優先したいプロジェクト」「作る機能が決まっているので仕様変更は想定していないプロジェクト」なら、ウォーターフォール開発のほうが適切です。
一概にどちらかの開発手法が良い・悪いのではなく、プロジェクトの特徴や目的によって選択するべき開発手法は異なります。
ウォーターフォール開発もアジャイル開発も向き不向きがあるので、開発手法の特徴をしっかり把握し、どの手法を採用すべきか検討しましょう。
アジャイル開発のメリット
ウォーターフォール開発ではなく、アジャイル開発を採用するとどんなメリットがあるのでしょうか?
ここでは3つのメリットについてご紹介します。
仕様変更に柔軟で開発スピードが早い
アジャイル開発は「開発中の仕様変更は当たり前」が前提にあるので、急な仕様変更にも柔軟に対応可能です。
ある機能の開発中に仕様変更が発生した場合、ウォーターフォール開発だと前工程の「設計」を見直す工数が増えるだけでなく、1つの修正がシステムの他機能に影響する可能性が出てきます。
しかし、アジャイル開発は小さな機能単位で開発しているため修正範囲が狭く、システム全体に与える影響は最小限に抑えられます。
開発スピードが速い
ウォーターフォール開発は要件定義書や詳細設計書、マニュアルといった多くのドキュメントを作成する必要があります。
一方のアジャイル開発は、大まかな仕様が決まったらすぐ開発が始められるので、開発に取りかかるまでの日数を短くできます。
また、開発途中で仕様変更が生じても、ウォーターフォール開発のように前工程の内容をすべて吟味する必要はありません。
アジャイル開発では修正対象にあたる機能だけ見直せばいいので、開発スピードが速められるのです。
顧客の要望に応えやすい
アジャイル開発では顧客と会話をしながら作業を進めていくので、顧客の要望に応えやすくなります。
また、イテレーションごとに顧客、さらには実際にシステムを利用しているユーザーからフィードバックが得られるのもメリットです。
第3者の客観的な意見によってユーザビリティが向上し、結果として顧客から高い満足度が得られるでしょう。
アジャイル開発のデメリット
メリットが多いアジャイル開発ですが、もちろんデメリットもあります。
2つのデメリットを把握した上で、各プロジェクトに最適な開発手法を選択できるように知識を身につけておきましょう。
プロジェクトの方向性がズレやすい
アジャイル開発は詳細な仕様を決めないので、プロジェクトの方向性がズレやすくなります。
顧客の要望を取り入れすぎたり、さらにシステムを良くしようと改善を重ねていった結果、「当初の構想とまったく違うシステムになってしまった」という事態も珍しくありません。
スケジュール調整が難しい
アジャイル開発のメリットでもある仕様変更に対する柔軟さは、時にデメリットに働く場合があります。
なぜなら、何度も仕様変更が発生した場合、全体のスケジュールが伸びる可能性が出てくるからです。
また、いくつかのチームに分かれて開発を進めている場合だとプロジェクト全体の状況が見えにくく、最終的には「納期に間に合わなかった」ケースも十分にあり得ます。
アジャイル開発が失敗する原因
アジャイル開発は多くの現場で採用されているものの、失敗に終わるケースも多数あります。
それではなぜ、アジャイル開発がうまくいかなかったのでしょうか?
失敗する原因を把握し、アジャイル開発が成功する可能性を最大限に高めましょう。
開発組織内のコミュニケーション不足
アジャイル開発はイテレーションを終えた後に開発チーム・顧客と話し合い、次のイテレーションに取りかかります。
話し合いの時に具体的なフィードバックや改善案が出れば、次に行うイテレーションの精度は上がっていきます。
しかし、コミュニケーションが不足し、満足のいく話し合いが出来ないと「必要な機能が実装できない」「当初の方向性とまったく違う」といった失敗に繋がりかねません。
アジャイル開発は開発チームと顧客の意見も取り入れながら進めていくことで、より高品質なシステム開発を目指す手法です。
日頃から開発チームや顧客と会話する機会を増やし、信頼関係を築くことを意識してみてください。
何でも相談しやすい環境をつくることが、アジャイル開発の成功に近づくのです。
アジャイルの特性を理解せずに導入
アジャイル開発の特性を理解せず、手当たり次第で開発を進めてしまうと失敗しやすくなります。
仕様変更が頻繁に起こるアジャイル開発では、都度プロジェクトの方向性やスケジュールの確認をしないと「求めていたシステムと違う」「納品日に間に合わなかった」とプロジェクトが頓挫してしまいます。
また、アジャイル開発を成功させるためには関係者間のコミュニケーションが必要不可欠です。
たとえば、顧客が意見交換や話し合いで積極性に欠けていると、顧客が望むシステム開発が難しくなり失敗します。
アジャイル開発を採用する前は開発側だけでなく、プロジェクト関係者全員がアジャイル開発の特性を理解し、主体的に取り組む必要があるのです。
アジャイル開発を成功させる3つのコツ
アジャイル開発を成功させるコツを3つ紹介します。
3つのコツを意識することで、前述した失敗例を防ぐことができるので参考にしてみてください。
密なコミュニケーションを心がける
アジャイル開発は仕様変更が何度も起きるため、開発要件が複雑化しやすくなります。
些細な変更内容だったとしても、必ずチームメンバーに共有するようにしてください。
「このくらい報告しなくても大丈夫だろう」といった安易な考えが、後々の開発に大きな影響を与えるかもしれません。
定期的に話し合いの場を設けて、開発チーム一丸となってプロジェクトを遂行しましょう。
開発チーム内で役割を明確にする
開発チーム内での役割を明確にし、各々がどういった仕事をするべきかメンバー全員に共有します。
メンバーの役割が分かれば「この仕事は〇〇さんに振ろう」「〇〇さんにプログラミングの相談しよう」といった判断が出来るようになり、円滑なコミュニケーションが可能です。
また、役割が与えられることで自分の仕事に責任を持つようになり、期待以上の成果を出せるといったメリットも挙げられます。
プロジェクト全体の見通しを立てる
アジャイル開発では要件や機能ごとの計画は立てるものの、プロジェクト全体のスケジュールを立てない場合が多々あります。
だからといって、何度も仕様変更を行なっているとスケジュールはどんどん押していきます。
アジャイル開発を成功させるためには余裕のあるスケジュールを組み、納品日は◯日とプロジェクト全体のゴールを決めておきましょう。
アジャイル開発の成功事例
株式会社デンソー
世界中の主要自動車メーカーに自動車部品を提供するデンソー。
既存システムに最新のクラウドやAIといったテクノロジーを融合させて、さらなる高度化を図るためにアジャイル開発の採用を決めます。
従来の方法では半年の開発期間を見込んだサービスでしたが、アジャイル開発で進めるとたった2週間でシステムのリリースに成功しました。
さらに2ヶ月後には、当初の想定を超えた追加の付加価値機能の実現を果たしました。
参考:伝統的な日本の企業文化への アジャイル開発導入、デンソーの選択とは
株式会社KDDI
KDDI(auでんきチーム)は2016年4月の電力小売りの自動化に向け、他者と差別化を図るアプリのリリースを計画します。
しかし、開発にかけられる時間は4ヶ月しかなく、従来の開発手法だと8ヶ月はかかる見込みでした。
そこでアジャイル開発のスクラムを導入し、4ヶ月で開発を完了させます。
アジャイル開発によってリリースまでの期間が大幅に短縮できただけでなく、従来の開発手法でかかるはずだったコストを2/3削減することに成功しました。
現在KDDIでは開発部門だけでなく、バックオフィス業務にもアジャイル手法を取り入れています。
参考:開発期間の半減に成功したauでんきの選択
株式会社富士通
生命保険販売システムの構築を依頼された富士通は、顧客が「保険市場や顧客ニーズが変化するので、どういったシステムが最適か分からない」と懸念を抱えていました。
そこで富士通は、柔軟な仕様変更が可能なアジャイル開発を提案します。
アジャイル開発を採用したことで品質を確保しつつも開発スピードの向上を実現しました。
さらに、過去の同規模案件と比べてかかった工数は80%程度、最終確認時の不具合検出数は1/3程度に抑えることに成功しました。
参考:生命保険販売システムにおけるアジャイル開発 アジャイルプロジェクト事例
アジャイル開発の主な手法
スクラム
アジャイル開発の中でも最も有名な手法であるスクラムは、開発チームが一丸となって開発を進めるためのフレームワークです。
スクラムでは開発チーム内で計画を立案し、スプリントごとに「機能は正常に動いているか?」「進捗状況に問題はないか?」を確認します。
そのためスクラムでは、開発チーム内のコミュニケーションがとても重要です。
開発チーム内での情報共有が不足していると、機能の実装漏れや不具合といった問題が生じやすくなります。
補足ですが、スクラム開発では開発周期をイテレーションではなく、スプリントと呼びます。
どちらも意味は同じですが、開発手法によって呼び方が異なるので覚えておきましょう。
エクストリーム・プログラミング(XP)
エクストリーム・プログラミング(XP)はエンジニアを中心にし、仕様や要件変更に柔軟に対応できることに重きをおいた開発手法です。
アジャイルを実現するための手段として「テスト駆動開発」と「ペアプログラミング」が挙げられます。
テスト駆動開発とは、プログラミングする前にテストコードを作成し、テストを通過するようなプログラムを書いていく方法です。
一方ペアプログラミングは、2人1組でプログラミングを行うことです。1人が実際にプログラムを組み、もう1人はコードの確認や指示を出します。
注意点としてエンジニア同士の相性が良くない場合、作業効率の低下やチーム内の雰囲気が悪くなる可能性があるため、リソースの配置には十分な配慮が必要になります。
ユーザー機能駆動開発(FDD)
ユーザー機能駆動開発(FOD)は顧客にとって価値ある機能を選定し、開発する手法です。
「どのような業務をどういった流れで行うのか?」といった顧客のビジネスを可視化し、適切な間隔で開発を進めていきます。
ユーザー機能駆動開発を成功させるためには、顧客と密なコミュニケーションを取り、顧客のビジネスを根本から理解する必要があります。
まとめ
アジャイル開発を成功させるコツや特性、メリット・デメリットを中心にお伝えしました。
アジャイル開発は仕様変更に対する柔軟性や、従来のウォーターフォール開発に比べて開発スピードを向上できます。
一方でプロジェクトの方向性がズレやすく、全体のスケジュールが把握しにくいといったデメリットもあります。
アジャイル開発は主流になっているものの、すべてのプロジェクトに適しているわけではありません。
プロジェクトによっては、ウォーターフォール開発やそのほかの開発手法が適切な場合も十分にあり得ます。
今回紹介したアジャイル開発の特性をしっかり把握し、プロジェクトに合った開発手法を選択できるようにしましょう。