システム開発における契約形態には、SES(準委任契約)と受託開発(請負契約)の2つがあります。両者の特徴を知り、使い分けることで効果的にシステム開発を行うことが可能です。 しかし、両者の使い分けやどのような開発タスクに適しているか理解している人は多くありません。そこで本記事では、次の点について解説します。
SESに適している開発タスクは、開発期間が長期に及ぶものや開発途中での仕様変更や追加が発生しやすい、あるいは仕様を決定しきれない部分があるものです。受託開発(請負契約)では成果物の納品が目的となるため、買い切り型のシステム開発に適しており、要件定義から納品までの工程を順に完了していくウォーターフォール型開発と相性が良いです。
反対にSESでは、成果物の納品などを目指した作業の履行に対して報酬が支払われるため、伴走型のシステム開発に適しており、開発単位を小さく分割し1つずつ機能を実装していくアジャイル型開発に馴染みやすいとされています。
アジャイル開発を採用する場合において、契約形態はSESが馴染みやすいことについては、独立行政法人 情報処理推進機構と経済産業省が公表している「情報システム・モデル取引・契約書<アジャイル開発版>アジャイル開発外部委託モデル契約」※1でも述べられています。
特にモバイルアプリ開発とWebサイト開発は、アジャイル開発が適している開発タスクです。それぞれ適している理由について詳しく解説します。
モバイルアプリ開発では仕様の変更や追加といった、アップデートが容易に行えるアジャイル開発が主流です。従来のウォーターフォール開発では、最初の打ち合わせで作成される仕様設計書に基づいて開発がすすめられ、途中での仕様変更が難しく追加費用が発生することも多くあります。
アジャイル開発ではイテレーションと呼ばれる開発サイクルの中で、1つずつ開発タスクを完了し機能実装していくため、機能の追加や仕様変更にも対応が可能です。特にゲームアプリやSNSなどのユーザーからフィードバックを受けて随時更新を行う必要があるアプリ開発には、アジャイル開発が向いているといえます。
Webサイト開発もアジャイル開発が適しています。WebサイトではUI(ユーザーインターフェース)の改善やページ間の導線の改善など、リリース後も品質向上のためにやるべきことが多いです。
また、問い合わせフォームや予約システム、ECサイトなどをサイト内に持つ場合、コンバージョンまでのデザインやシステムの利便性を高めるためにも常に改善が求められます。デザインやサイト設計、既存機能の改善など伴走型の開発が必要なWebサイト開発にも、アジャイル開発が適しているといえます。
SESにおける開発フローは大きく次の4ステップです。
アジャイル開発では2から4のステップを各イテレーションで繰り返しながら、システム開発を進めていくため、一度デプロイしたらプロジェクトが完了するわけではありません。
(アジャイル開発のプロジェクトの大まかな流れについては独立行政法人 情報処理推進機構の「アジャイル開発の進め方」※2を参考としています。)
アジャイル開発における要件定義はプロダクトバックログを作成することが目的です。プロダクトバックログとは、ユーザーの目的を達成するために必要なタスクに優先順位をつけ、リスト化したもの。プロダクトバックログは開発工程が進む中で随時更新されます。
このプロダクトバックログを作成するために、ユーザーとの打ち合わせを行います。打ち合わせの中でユーザーストーリー(ユーザーがシステム開発によって達成したい目的やシステム導入をするに至った理由)の聞き取りを行い、ユーザーストーリーマッピングを作成します。
ユーザーストーリーマッピングとは、ユーザーストーリーから価値観を整理してプロジェクトの軸を固めるためのものです。アジャイル開発では小単位で開発を進めるため、開発過程でプロジェクトの軸がぶれてしまうリスクがあります。そのリスクを回避するために、ユーザーストーリーマッピングを作成することで、プロジェクトの大きな方向性を見失わないようにしています。
アジャイル開発では、開発からデプロイまでを1サイクルとして何度も回していきます。この1サイクルの期間をイテレーションと呼びます。イテレーションごとにチームで打ち合わせを行い実装する機能を決定。チーム内で進捗管理を行いながら機能の開発を行います。
開発された機能に対してテストを行います。内部のコードに対するチェックやユーザーストーリーに照らしたテスト、手動で行う探索テスト、安定性やセキュリティ面などのパフォーマンスに関するテストといった過程を経て機能実装へ向かいます。
テストを行う際にもユーザーストーリーを満たす機能となっているか確認が必要です。そのためにも要件定義の際にしっかりとユーザーへヒアリングをしなければなりません。また、アジャイル開発では開発単位が小さいため、問題が起こった際の原因特定が早い傾向にあるのも特徴です。
テストが完了すれば機能を実装しデプロイを行うことができます。この際、ユーザーからのフィードバックをもらい改善点や方向の修正などを必要に応じて行います。デプロイまで終われば、次のイテレーションです。プロダクトバックログを確認し、次に実装すべき機能を検討。チーム内でタスクの分担を決めて開発にかかります。開発からデプロイまでのサイクルを繰り返してシステム開発を進めていきます。
SESによるシステム開発タスクを成功させるために必要なことは事前の準備とベンダーとのコミュニケーションです。その理由は大きく次の2点です。
SESと親和性の高いアジャイル開発では、要件定義を行うキックオフミーティングの際にユーザーストーリーを聞き取り、プロダクトバックログを作成します。キックオフミーティングでは、ユーザーがシステムを導入するに至った理由やシステム開発によって達成したい目的などの聞き取りが必要です。もちろんアジャイル開発では細かな要件や機能を当初から定める必要はないため、目的がはっきりとしていなくても問題はありません。
しかし、目的や問題意識が事前に定まっている方が、ベンダーのヒアリングも円滑に行えるうえに、その後の開発工程もスムーズに進むことは間違いないでしょう。
アジャイル開発の概念が生まれたアメリカでまとめられた「アジャイルソフトウェア開発宣言」※3の中でもコミュニケーションの大切さに触れられています。
プロセスやツールよりも個人との対話を優先し、契約交渉よりも顧客との協調を大切にするといった内容を宣言に盛り込んでおり、原則の中でも情報を伝えるもっとも効率的かつ効果的な方法は面と向かって話をすることと記載がありコミュニケーションを重視する内容が多いです。
アジャイル開発においては顧客とベンダーのコミュニケーションを大切にしていることが分かります。アジャイル開発では、プロダクトバックログの作成や機能実装に係るフィードバックなど多くの場面でユーザーとの対話が必要です。
今回解説したようにSESはモバイルアプリやWebサイトなどの随時機能追加が必要であったり、開発途中の仕様変更が行われたりする開発タスクに適しています。SESはアジャイル開発と親和性が高く、公的機関の開発モデルにも取り入れられています。
アジャイル開発のフローは要件定義によって、ユーザーの開発目的や求める機能などのユーザーストーリーを念入りに確認し、開発・テスト・デプロイの工程をイテレーションごとに回していく流れです。この開発・テスト・デプロイの工程を短期間で回すことで、次々と必要な機能を実装することができます。
株式会社Jiteraでは開発自動化プラットフォーム「JITERA」を独自で構築し、これまでにない速度で開発から機能実装までを行うことが可能です。開発速度を上げることで、ユーザーのニーズに即応し、取りこぼしを防ぐことができます。また、JITERAを活用することでこれまで人間が書いていたコードを一部自動化できるため、開発コストも抑えることが可能です。まずはお見積もりや問い合わせフォームからのご連絡から検討ください。
<参考>
※1 独立行政法人 情報処理推進機構・経済産業省「情報システム・モデル取引・契約書<アジャイル開発版>アジャイル開発外部委託モデル契約」
https://www.ipa.go.jp/files/000081484.pdf
※2 独立行政法人 情報処理推進機構「アジャイル領域へのスキル変革の指針 アジャイル開発の進め方」
https://www.ipa.go.jp/files/000065606.pdf
※3 アジャイルソフトウェア開発宣言
https://agilemanifesto.org/iso/ja/principles.html