現代社会において、ソフトウェア開発モデルの主流といえばアジャイル開発でしょう。従来型とも呼ばれるウォーターフォール開発ではプロジェクト途中での仕様・要件変更に対応しづらいことが多く、柔軟性の低さにより顧客要求を最大限に反映できない可能性がありあます。もちろん、プロジェクトの種類によってはウォーターフォール型を採用するのも1つの手段ですが、今では大規模プロジェクトにおいてもアジャイル開発化が進んでいます。
日本は「アジャイル後進国」でもあるので、一刻も早く日本ビジネス全体にアジャイル開発が浸透して、ソフトウェア品質と生産性を同時に向上するための体制を整えることが大切でしょう。
しかしながら、アジャイル開発を導入したからといってその効果を引き出せるわけではありません。アジャイル開発に取り組む企業の中には失敗に陥るケースも多く、必ずしも「アジャイル開発=品質と生産性の向上」ではないのです。
本稿ではこれからアジャイル開発に取り組もうとしている企業に向けて、アジャイル開発導入で失敗しないためのポイントを紹介します。
アジャイル開発に対するたくさんの誤解
アジャイル開発導入を失敗させないためにまず大切なのが「アジャイル開発について知ること」です。基本的なポイントではありますが、実はアジャイル開発についてあまり知らずに導入してしまうというケースは非常に多いのです。「知らない」というよりも「誤解している」という方が正しいでしょうか。
以下にアジャイル開発に対するよくある誤解を紹介しますので、同じ認識を持っていたという項目があればすぐに考えを改めましょう。
アジャイル開発は大規模プロジェクトに適さない
アジャイル開発黎明期では「大規模プロジェクトに適さないソフトウェア開発モデル」などと言われていましたが、最近ではプロジェクトやチームの規模を問わずアジャイル開発が採用されています。そのためミニマムなプロジェクトだけにアジャイル開発を採用して、その効果を最大限引き出せていないという企業はたくさん存在します。
ミッションクリティカルな業務に適さない
「ミッションクリティカル(重大な)業務に適さないソフトウェア開発モデル」というのもアジャイル開発の昔からあるイメージ。特に医療・金融・公共インフラといった分野ではミスが許されないことからアジャイル開発を避ける企業が多数存在しました。しかし最近ではそうしたイメージも払拭され、失敗から学びを得ること品質と生産性を向上する何よりもの近道だという認識が強まっています。
受託開発に適さない
受託開発ではソフトウェア開発モデルよりも契約がボトルネックになることが多く、アジャイル開発自体が適さないわけではありません。むしろ発注者にアジャイル開発のメリットを伝えて納得してもらえば、顧客要求をより反映したソフトウェアを開発できます。
アジャイル開発の導入コストは低い
これもよく誤解されることの1つです。アジャイル開発はウォーターフォール開発に比べて簡易的なソフトウェア開発モデルというイメージから、導入にかかるコストを低く見積もり過ぎる傾向にあります。しかし、新しい開発言語やフレームワークを導入する際にコストがかかるように、新しいソフトウェア開発モデルを導入する際にもそれなりのコストがかかります。なのでネットや書籍で得た知識だけでアジャイル開発を導入しようとすると確実に失敗に陥ります。アジャイル開発の経験豊富なエンジニアまたはコンサルタントを中心に、しっかりと計画を立てた上で導入しましょう。
アジャイル開発にドキュメントは不要
「アジャイルソフトウェア開発宣言」に「包括的なドキュメントよりも動くソフトウェアを」という一文があります。しかしながら、これはアジャイル開発においてドキュメントが不要だと言っているのではなく、あくまで「動くソフトウェアに価値を置くこと」を強調しています。従ってアジャイル開発にも当然ドキュメントは重要です。
アジャイル開発は計画が必要ない
アジャイルソフトウェア開発宣言には「計画に従うことよりも変化への対応を」という一文もあり、これを受けて「アジャイル開発に計画は不要」と誤解してしまっている人もいます。しかしアジャイル開発においても計画は重要であり、あくまで柔軟性を持つことが大切です。
アジャイル開発に失敗しないためのポイント
アジャイル開発に対する誤解が原因になったり、その他様々な要因でアジャイル開発導入に失敗するケースがあります。ここではそうしたことを踏まえてアジャイル開発に失敗しないためのポイントをご紹介します。
Point1. 正確な情報伝達を心掛ける
アジャイル開発はウォーターフォール開発に比べて開発チームやクライアントとのコミュニケーションを重視するソフトウェア開発モデルです。複数のイテレーション(開発単位)の中で計画・設計・実装・テストを繰り返し、かつ開発者同士やクライアントと一緒になってテストや進捗確認等を行っていくため、コミュニケーションによる正確な情報伝達が何よりも大切になります。情報が誤って伝達されてしまうと、それだけで開発の方向性がブレてしまいます。
Point2. それぞれの責任を明確にする
アジャイル開発で大切なのは開発者各人の責任を明確にして、責任感と創出とモチベーションの向上を同時に行うことです。ウォーターフォール開発では1つ1つの作業単位を見つめてモチベーションを向上することが難しい傾向にありました。しかしアジャイル開発ではイテレーションごとに開発チームの責任がはっきりしています。そのため、開発者各人が責任を持って作業にあたることで、より高品質かつ生産性の高いプロジェクトを推進できます。
Point3. 木だけでなく森を見る
アジャイル開発における最終的な成果物とは、小さな成果物の集合体です。そのため最終的な成果物よりも目の前のイテレーションを重視する傾向があり、小さな成果物にばかり気を取られてしまいます。つまりは「木を見て森を見ず」という状態です。もちろんそれでもプロジェクトは難なく進行しているように思えますが、最終的な成果物が想定したものが違ってしまう可能性もあります。従ってアジャイル開発ではKPIを作り、イテレーション単位だけでなくプロジェクト単位でソフトウェア開発をコントロールすることが大切です。
Point4. 適切なツールを導入する
アジャイル開発ではそれを実現するためのツールが欠かせません。適切なツールを導入してこそアジャイル開発が成功するので、まずはどんなツールが必要なのかを整理する必要があります。そうしたツールの中の1つが「GitHub(ギットハブ)」です。GitHubはオープンソース型のバージョン管理システム「Git(ギット)」をベースにしたホスティングサービスであり、複数の開発者間で自分のソースコードを共有したり、ソースコードに対してフィードバックを持ったりといった機能が充実しています。
アプリケーション開発に最適なクラウドインフラ
アジャイル開発をスタートさせる際に、もう1つ重要な点がシステムインフラのクラウド化です。あらかじめ開発規模やシステムのキャパシティーを決めてから開発する従来のウォーターフォール型アプリケーション開発と異なり、ビジネスの成長や新たに必要となるサービス要件を踏まえることで、DevOps型のアプリケーション開発が実現できます。
一時的に大量なデータを退避させるエリアを確保させたり、複数のスプリントを同時に進める上で、開発環境で使用するリソースを拡張するなど、プロビジョニングにかかる手間や負担もクラウドインフラを利用することで格段に軽減させることができます。
例えば、クラウドインフラのプロビジョニング自動化ツールなどを利用することで、開発環境が複数のクラウド環境を利用しているマルチクラウド型にも対応でき、アプリケーション開発やクラウド移行時における運用管理のリスクを低減することができます。
日立ソリューションが提供する、クラウド環境のプロビジョニング自動化ツールである「HashiCorp Terraform」をぜひご検討ください。