今日は、アジャイル開発とウォーターフォール開発の違いについて考えて見たいと思います。
まず、アジャイル開発とは何でしょうか?
アジャイル開発とは、約2週間という短期間でサイクルを回して、出来上がったものを確認しながら、作り込んでいく手法です。
これと反対なのが、ウォーターフォールという、従来の開発手法です。
滝という意味ですが、滝の水はは、必ず上から下に流れます。工程を分割して開発する手法なのですが、きっちり決めて、次に進みますので、基本戻ることができません。仕様に変更があると膨大な工数がかかります。仕様変更が生じると費用がかさみます。
工程を「企画」「設計」「実装」「テスト」に分けています。
企画の最初の段階で、全て必要な機能を決めます。そしてそれに基づいて開発していきます。
この2つ開発手法の大きな違いは何でしょうか?
様々な意見がありますが、2つ上げるとすれば、
この2点だと思います。
まず1の発注者と受注者のトラブルが少ないという点について説明します。
なので、分厚い、要件定義書や、DB設計書などを見せられても、概要しか理解できません。なんとなく、うまく作ってくれるのだろうな〜。と思っています。
しかし、実際にできたものを見ると、思っていたのとは少し違います。
それでトラブルになります。
受注者は、契約書に書いてある と主張しますし、発注者は、これでは業務で使いにくい。と主張します。それなら先に行ってくださいよ、、、、
わかるわけ無いだろと、、
それで、裁判になることも多いですね。発注したほうが約15億円も払わされるという有名な判決もあります。
旭川医大対NTT東日本事件 :イノベンティア・リーガル・アップデートより参照
事件の概要は、病院側がNTTにシステムの開発を依頼したけど、病院の先生が忙しくて時間が取れなかったというものです。そして、ソフトウエア開発は、共同して作るものであるから、協力しなかった医師には責任が生じるというものです。
これが、もし、アジャイル開発だとどうでしょうか?
推測ですが、多少問題が少なくなっていたと思います。ウォーターフォールは最初に機能を全て決めますので、ソフト開発のプロでない、病院の先生は、ソフト開発については素人です。必要な機能を伝えたつもりだけど、できたものを見ると、違っていたのかもしれません。また医者として、通常の業務もあり、時間も取れません。
それで、追加機能を後から追加しました。それで、工期が遅れた、どっちの責任?費用負担は?という争いですね。
これがアジャイル開発なら、まず、先生に、一番必要な機能はなんですか?
いまの職場で、どんな問題がありますか?
というリストを作ります。
これを作った上で、互いに協議して、優先度の高いものから作り込んでいきます。
アジャイル開発では、3つの役割を決めます。
各役割は2重に担当することはできません。
プロダクトオーナーはどんな人がなるといいでしょうか?それは、
が望ましいでしょう。
とりあえず、部長がなっておいて、ではいいものはできません。
部長が、これも管理しないといけないの?なんて思っていると、いいものはできません。
いまのシステムを使っていて、使いにくい、こうすべきだ!と業務をよく知っている人。そして、完成したものをこれで行く!と社内に言える人が望ましいでしょう。
せっかくいいシステムを作っても、他の立場が高い人が反対するとだめになってしまう人では、いいもの作っても壊されてしまいます。
なので、上記2つを兼ね備えている人が望ましいのです。
プロダクトオーナーが作りたいと思っているものを作る人達です。
設計、デザイン、実装、テストなど、みんなが横断的に行います。僕はテストだけします。という人はいません。
プロダクトオーナーと開発チームの関係を良くするために存在します。
開発中に、なにかうまく行かないことがあったら、それを取り除きます。ときには、プロダクトオーナーと交渉したり、必要な機能の実装方法の修正の提案をしたりします。金魚がうまく泳げるように、水槽の水をきれいに保つ役割だと思います。
そして、ソフト開発にも精通していますので、プロダクトオーナーにわかりやすく説明することもできます。
アジャイル開発では、基本、2週間毎にスプリントという期間を切って、そのサイクルを回していきます。
この期間が伸びることはありません。もしより多くの時間が必要なら、2週間でできるところまで細分化します。
今日はアジャイル開発とウォーターフォール開発の違いについて、少しだけ説明しました。
3つの役割分担があることについて、触れました。
次回は、スプリントと呼ばれるサイクルを回すことについてお話しします。