初めまして、JCB デジタルソリューション開発部の貝塚です。 今回はアジャイル開発で作るプロダクトと既存のウォーターフォール開発で開発している関連システムとの開発の進め方について紹介していきたいと思います。
関係するシステムのご紹介
以下が今回私がPOとして開発に携わっているプロダクトの関連システムになります。
Accel ・・・今回私がPOとして開発に携わっているプロダクトです。
JENIUS ・・・JCBの様々なプロダクト・ソリューション・業務を支える基幹システムになります。
JAMP ・・・外部システムとJENIUSなどの既存の内部システムを中継するAPI連携基盤になります。
どうやって開発を進めてきたか?
当然ですが、ウォーターフォールで開発を進めている上記システムは、クライアントが実装してほしい機能や性能を明確にしていく 要件定義工程
を経て、
クライアントの要望を満たす機能や製品をどのように作るかを外部設計工程
で設計し、その後、詳細設計
、実装
、単体テスト
、結合テスト
、
総合テスト・受入テスト
を実施し、リリースという運びになります。
一方、アジャイル開発は、クライアントの要望に応えるシステムをできる限り早くリリースしようという考えに基づいているため、MVP(Minimum Viable Product)という 必要最低限の機能を備えたプロダクトをリリースし、実際にクライアントに利用・検証していただき、そこで得たフィードバックをもとに改善を加えていく開発手法になります。
この2つの手法で、最終的には同じ時期にクライアントが望む状態を実現する必要があります。 さらに、双方のシステムが密接に関連する仕組みのため、それぞれのシステムのリリース時期を合わせていく必要があります。 そこで、双方で進め方を検討した結果、以下のように各機能毎に小さなウォーターフォール開発を複数走らせていく進め方を実施することになりました。
イメージ図
開発の進め方
準備期間・・・ウォーターフォールでいう要件定義工程。
- 双方で授受するIFの要件(レイアウト・項目・文字タイプ)についてはこの工程で決めました。
- 双方で授受するIFのチェック仕様についても大まかにこの工程で決めました。
- アジャイル開発の方では検討に着手していない機能についても、POにてIFの要件だけは仮決めしました。
開発期間・・・ウォーターフォールでいう外部設計〜ST工程。
- ウォーターフォール開発の方では、要件定義工程にて確定した要件をもとに粛々と設計工程を進めていきます。
- アジャイル開発の方では、優先順位に基づき、開発できる部分から設計・開発・テストをSprint単位で実施していきます。
- 1つの機能について、双方が結合テストまで完了した状態で、その機能に関するIF疎通テスト・STを実施していきます。(片方が先に結合テストまで完了していたらもう一方を待つ)
- この工程の中で仕様変更が発生したり、STにおいて不具合が発生した場合は、その後どちらが改修するのかを双方で協議します。
ST・UAT期間・・・ウォーターフォールでいうST・UAT工程。
- すべての機能がSTまで完了した時点で、すべての機能についてのST・UATを実施します。
- この工程の中で仕様変更が発生したり、ST・UATにおいて不具合が発生した場合は、その後どちらが改修するのかを双方で協議します。
やってみて学んだ事
準備期間にて、アジャイル開発の方では検討に着手していない機能についても、POにてIFの要件の仮決めをしましたが、 実際にSprintにてDevメンバーを含めて実装方針を検討していくと、やはり変更した方が良いケースが多く発生しました。 よって、当初のアジャイル開発の方で仕様変更を取り込む前提が崩れ、ウォーターフォール開発の方で仕様変更を取り込む必要が発生しました。 幸いにも、ウォーターフォール開発の方でバッファをもってスケジュールを立てていたため、仕様変更取り込み期間を取ることができましたが、 全体スケジュールに影響を及ぼす可能性もあったと思います。
まとめ
まだプロダクトは開発途上の状態であるため、今後も様々な課題が発生してくるかと思いますが、JCBにおいてすべてのシステムの開発手法が アジャイルになることはないと思います(ウォーターフォールで開発したほうがよいシステム・ケースもあるため)ので、引き続きアジャイルとウォーターフォールの 共存についてトライ&エラーを繰り返して行きたいと思います!
終わりに
最後に、JCBでは我々と一緒に働きたいという人材を募集しています。 詳しい募集要項等については採用ページを ご覧下さい。
最後まで読んでいただき、ありがとうございました。