概要
最近のシステム開発はアジャイル開発が多くなってきました。私が入る案件はほぼアジャイル開発が多いです。しかし、ウォーターフォール開発もまだまだ多いのが現状です。
今回はアジャイル開発とウォーターフォール開発の違いを説明していきます。旧来の方法がウォーターフォール、新しい開発方法がアジャイル方法になります。
目次
ウォーターフォール開発とは
[企画 → 要求定義 → 要件定義 → 基本設計(外部設計) → 詳細設計(内部設計) → 実装 → テスト →納品
例えば、企画が終わってから要求定義を行い、次に要件定義に進めるという流れです。特徴としては企画が終わってから要求定義に行ったら企画に戻れません。そして、要件定義が終了し、基本設計に進むと要件定義に戻れません。
極端な話にはなるのですが開発は基本設計や詳細設計まで行く頃にはどんどん要望が増えてきて8割ぐらいの時間を費やしてしまうことになり、開発時点では遅れることが決定しているができるだけ早く終わらせるために開発時間は一人のエンジニアの労働時間が300時間を超えてしまうケースが多かったです。デスマーチと言われるものです。
基本設計から要件定義に戻らざるをえない場合、戻ることはありますが要件定義に戻るとまた基本設計をやり直す必要がありその分の時間的コストが莫大になります。
資金に余裕があれば問題ないのですが基本的に経費をかけないです。
仕様変更が常時行われる現在では、ウォーターフォールは時代の潮流に合わないです。技術革新のスピードが早い現在は要件の変更やシステム技術の更新は当たり前のようにあります。そんな中で後戻りできない開発方法は難しいと思います。
アジャイル開発とは
開発工程は繰り返しになりますが以下の通りです。
要件定義 → 基本設計(外部設計) → 詳細設計(内部設計) → 実装 → テスト
基本この開発工程を小さい単位で繰り返していくことになるので仕様変更があって、要件定義から始めてもすぐに実装できるなど柔軟性が高くなります。
ウォーターフォールのように企画や要求定義もする場合もありますが基本的にすでに要件定義にあるはずですので省略することが多いです。
小さい単位なので機能修正も耐えることができます。プログラミングコードをGitに保存、共有して進めていきます。
複数人でプロジェクトをするときは人によって別の機能を進めることが多くプログラマーが要件定義や基本設計も進めることがあり、フルスタックなエンジニアであることが求められることがあります。
ウォーターフォール開発のメリット
予算を立てやすいことがメリットです。開発を一気に進め、完了させるのでスケジュールの作成が求められ、いつまでにできるのかがわかれば予算も立てやすくなります。そのため、アジャイル開発の方針で進めないと達成が難しいプロジェクトがあります
アジャイルのデメリットは予算が立てにくいということで無理やりウォーターフォール開発させられ、失敗することもあります。
ウォーターフォール開発のデメリット
一気にプロジェクトを作るため、作業の後戻りが非常に困難になります。
そのため、簡単な仕様変更もまた、一旦、要件定義に戻り、基本設計をし、詳細設計に落とし込んでから開発するという工程を踏む必要があるのですごく手間のかかる後戻りとなります。
アジャイル開発のメリット
小さい単位でプロジェクトを進めていくので仕様変更に耐えられる作りになります。仕様変更は無いに越したことはないですが、会ってもスケジュールのズレは大きくないと思います。
私が携わった労働環境もすごくよく労働時間も140時間から200時間の間で全て収まっていました。
アジャイル開発のデメリット
予算が立てづらいです。
小さい単位のスケジュールは立てますが全ての開発ロードマップまではまだ作成できていないことが多々あります。そのため、開発を知らない経営者の判断により無理やりウォーターフォールで開発を進めさせることがあります。
アジャイル開発はまだまだ認識されていない場合もあるので予算を立てるためのプランやプレゼンテーション能力も必要になります。
まとめ
最近の流れではアジャイル開発が多くなってきています。PythonやGo言語といったプログラミング言語の開発や、マイクロサービスによる開発方法といった様々な開発手段が出現してきました。様々な開発手法に柔軟に対応すること求められてきています。
開発手法だけでなく、クラウド環境で新しいDBやクラウドロードバランサーにサーバーといった新しい環境にも対応するときにウォーターフォールの開発ではもはや対応できない時代になってきているのではないでしょうか