なぜアジャイルなのか? - VUCAな時代
VUCAとは、V(Volatility)=変動性、U(Uncertainty)=不確実性、C(Complexity)=複雑性、A(Ambiguity)=曖昧性の頭文字です。
元々は軍事用語で、「変化が激しく、先行きも見通せず、複雑で、曖昧である」という軍事の潮流を表した言葉です。
2010年代ころからビジネス界でもよく使われるようになりました。それはAIなどの技術革新により、GAFAMなどのテック企業が台頭してきたことが要因です。ChatGPTの登場など、これまでの常識を覆すサービスが登場するなど、想定外の出来事が次々と起こる、今はそのような時代になっています。
なぜアジャイルなのか?- テクノロジーの変化
図は、プロダクトが5000万人に普及するまでに要した期間を年代順に並べたものです。
例えば、上段を見ると「飛行機」は5000万人に普及するまでに68年、その隣の「自動車」も62年とずいぶんかかっています。右上の「テレビ」は22年です。
下段ではコンピュータが普及した近代を表していて、「携帯電話」は12年と次第に早くなってきて、このスピードは右に行くほど加速度的になっていき、「ポケモンGo」にいたってはわずか19日で5000万人を突破しています。ここには記載されていませんが、最近ですとチャットGPTの利用者がわずか2ヶ月で1億人を突破したことは記憶に新しいところです。
もちろん製品によって、さまざまな特色があり条件が異なるのですが、全体的にスピードがすごく早くなっている、ということは確実に言えます。これほどまでに環境が激しく変化し、テクノロジーが急速に進歩して、人々の価値観も多様化した時代=VUCAな時代においては、旧来のやり方ではうまくいかない、変化についていけなくなっています。
システム開発の方法としても、従来の「事前の予測と計画に基づくウォーターフォール型」から「変化に対応しやすいアジャイル型」が適している場面が多くなっています。
アジャイル開発とは
アジャイル開発とは、短い期間の開発サイクルを繰返し、優先度の高い機能から順番にリリースしていく開発手法です。
※「アジャイル」(ajile)とは、「素早い」「機敏な」の意味。
顧客との綿密なコミュニケーションを重視し、開発中の変化・変更に柔軟に対応できることが特徴です。少人数による開発チームを構成し、それぞれの専門性を備えたメンバーが目標に向かってベクトルを合わせ、自律的に行動することが求められます。
アジャイルソフトウェア開発宣言
左側の画像は「アジャイルソフトウェア開発宣言」と呼ばれるアジャイル開発の宣言文書です。これは、2001年に当時ソフトウェア開発手法の分野で活躍していた17名の専門家によってまとめられたものです。
ここでは4つの価値が述べられています。
●プロセスやツール よりも 個人と対話を
●包括的なドキュメント よりも 動くソフトウェアを
●契約交渉 よりも 顧客との協調を
●計画に従うこと よりも 変化への対応を
左側のことがら(従来大事だとされていたこと)に価値があるとは認めながらも、右側の赤字のことにより価値を置くと捉えることができます。
従来型の開発プロセス
これまで長い間行われていた開発手法は「ウォーターフォール開発」と呼ばれるものです。ウォーターフォール開発では、最初にどのようなものを作るか細かいところまで決めて、計画して、その通りに作っていくやり方です。
途中で変更などが発生すると、全ての前工程に影響し大きな労力とコストがかかってしまうため、基本的に不可とされています。
図で示す例では、機能A、B、Cのすべてについて、企画、設計、実装、テストといった工程で進捗させていきます。A~Cのすべての企画をしたら、次にA~Cすべての設計を行い、次はA~Cのすべての実装(開発)を行う、という具合です。
アジャイル開発のプロセス
アジャイル開発では、「イテレーション(反復)」と呼ばれる開発サイクルを繰返し、イテレーションごとに機能をリリースします。
イテレーションは1週間から4週間ごとが一般的です。
顧客にとって価値の高い機能から優先的に作成していきます。
DevOps
DevOpsとは、「開発(Development)」と「運用(Operation)」を組み合わせた造語であり、開発担当と運用担当が連携・協力し、フレキシブルかつスピーディーに開発するという考え方です。
元々、それぞれの立場の違いから、開発から運用への移行がボトルネックになることが多く、アジャイル開発による真価が失われていました。
しかし、継続的インテグレーションと継続的デリバリー(CI/CD)という手法により、ソフトウェア変更からテスト、リリースまでを自動化することが可能となり、DevOpsの成功に重要な役割を果たしています。
※CI/CDとは
継続的インテグレーション(CI)とは、開発プロセスにおける自動化の仕組みを指します。複数の開発者が別々のプログラムを製作した後、それらをシステム全体に統合してテストまで自動で行います。
継続的デリバリー(CD)とは、利用者の本番環境への組み込みを自動化する仕組みを指します。
つまり、CI/CDとはDevOpsを実現するための手法であると言えます。
プロジェクト全体における各方法論の関係
ここまで、様々な方法論を解説してきましたが、プロジェクト全体における各方法論の関係の例を図示します。
この例では、「システム思考×デザイン思考」に基づき新商品や新サービスについてのアイデア創出と企画を実施し、「PoC」にて新技術の実現可能性を検証し、「リーンスタートアップ」により市場への受容性を検証します。実際の開発ではより価値の高い機能を優先する「アジャイル開発」で行い、リリース後の運用とのシームレスな連携を行う体制(DevOps)を構築するといったイメージになります。
実際には、プロジェクトにおける内容、リソース、環境などの制約条件など考慮して、どのような方法論を利用するか判断します。