このすみノート

Webエンジニアが技術や趣味を書くブログです。

アジャイルとウォーターフォールの違いと使い分け

こんにちは。私は、以前にアジャイル開発を知って以来、アジャイルで開発を続けています。

f:id:konosumi:20171123023832j:plain

私がアジャイルにハマることになるきっかけを作ったのは、アジャイルサムライという名著でした。

ただ、実際にアジャイル開発をやってみた結果、メリットやデメリットが色々と見えてきました。今回は、ウォーターフォール型の開発と比較しながら、考察していきます。

アジャイル宣言

アジャイル開発には、有名なアジャイル宣言があります。まずはご確認ください。

プロセスやツールよりも個人と対話を、
包括的なドキュメントよりも動くソフトウェアを、
契約交渉よりも顧客との協調を、
計画に従うことよりも変化への対応を、
http://agilemanifesto.org/iso/ja/manifesto.html

それでは、アジャイル宣言に沿いながら、実際に比較検討をしていきます。

プロジェクトメンバー数による違い - プロセスやツールよりも個人と対話を

アジャイル開発は、ドキュメントよりも動くソフトウェアを重視する傾向があります。

つまり、実際には納品をしない仕様書を作り込むくらいだったら、コミュニケーションで仕様を伝達し、ダイレクトに動くソフトウェアを開発していったほうが早いのです。

ところが、プロジェクトメンバーが増えれば増えるほど、コミュニケーションのコストは増大していきます。会議室にメンバーが一堂に会するだけでも、全員の15分が奪われてしまうのです。

コミュニケーションに対するコストが馬鹿にできないプロジェクトの場合、アジャイル開発は不向きになり、ドキュメントによる情報共有の効率のほうが勝ります。

アジャイル型の開発は少人数、ウォーターフォール型の開発は大人数のプロジェクトに適しているというのが、私の印象です。

ミニマムドキュメントという選択 - 包括的なドキュメントよりも動くソフトウェアを

ウォーターフォールのドキュメントと聞いた時に、エクセルの仕様書や設計書を思い浮かべる人はいませんでしょうか?

ウォーターフォールが嫌われやすい理由のひとつに、重厚長大で分厚い本のようなイメージの仕様書があります。ただ、これは仕様書を過剰に作り込んでしまうから発生してしまうことなのです。

現在は、モックアップやプロトタイピングを利用した画面設計が流行っています。

techlife.cookpad.com

最小限のドキュメントで情報共有を図ることが最近の潮流であり「プロセスやツールよりも個人と対話を」とは限らないのです。

これは、アジャイル型開発にも適用できます。アジャイル型開発のコミュニケーションコストの高さを、最小限のドキュメントで補うのです。つまり、アジャイルが定義している問題は包括的なドキュメントにあるので、それさえ解消してしまえば良いのです。

最小限のドキュメントによる効率的な情報共有を、私は強くおすすめいたします。

なお、クックパッド様の開発手法は非常に参考になりますので、ぜひご参照ください。

techlife.cookpad.com

アジャイルな顧客 - 契約交渉よりも顧客との協調を

顧客との協調を強くするためには、アジャイルな顧客が必要になります。アジャイルな顧客とは、平たく言ってしまえば協力的な顧客のことです。

つまり、協力的な顧客を獲得できるのであればアジャイル開発は優位性を持ち、そうでない場合はアジャイル開発の強みは減少してしまいます。

アジャイルは動くソフトウェアを重視しているので、実際に顧客にソフトウェアを触ってもらう必要があるのです。

・・・では、ウォーターフォール型開発の場合は協力的な顧客は必要ないのかと言うと、そうではありません。

ウォーターフォールが嫌われやすい理由のひとつとして、一枚岩の重厚長大なシステム開発によく用いられるので、後半の工程での手戻りが大きいといった理由があげられます。しかし、これは一枚岩だから発生するのです。

ウォーターフォールであったとしても、まずは最小限のプロダクトでリリースしましょうといった取り決めを締結できれば、リスクは抑えることができます。そこから、少しずつ機能拡張していけば良いのです。何も、一度のウォーターフォールですべてを解決する必要はありません。

結局のところ、アジャイルであろうがウォーターフォールであろうが、協力的な顧客は必要なのです。

変化量による違い - 計画に従うことよりも変化への対応を

アジャイルは変化への対応を柔軟にすることを重視します。言葉を言い換えてしまえば、アジャイルは変化が大きいプロダクトに向いているのです。

アジャイルは頻繁に機能を見直すようなスタートアップの自社プロダクトに、ウォーターフォールは変化量の少ない請負や受託開発のプロダクトに向いています。

なぜ、請負や受託開発に向いているかと申しますと、請負や受託開発では、計画の尊守をどうしても求められるケースが多いのです。そういった状況下において無理にアジャイルを回すくらいでしたら、素直にウォーターフォールで開発するという選択もありなのではないかと考えています。

視野を広く持ち、他の開発モデルも知ろう

開発モデルに関しては、以下の「tasuwo blog」様によくまとまっておりますので、ご確認ください。

tasuwo.github.io

ここで私が言いたいことは、一言に集約されます。

「アジャイルはウォーターフォールと比較されがちですが、開発手法はアジャイルとウォーターフォールだけではありません」

参考までに「tasuwo blog」様で言及されている開発手法を列挙してみます。

  • ウォーターフォールモデル
  • プロトタイピングモデル
  • スパイラルモデル
  • インクリメンタルモデル
  • イテレーションモデル

開発手法は、さまざまな開発モデルの中から、取捨選択された結果として検討されることが望ましいのです。

さいごに

私が本記事において言いたいことは、アジャイルサムライの教えと似ています。

今回は、アジャイル宣言に沿いながら比較検討をしてみました。しかし、最も大事なことは、自分の頭で考えることです。

アジャイルを実践してみた結果、コミュニケーションコストの増加に悩まされることもあれば、ウォーターフォールでプロジェクトを進めた結果、手戻りの影響に悩まされることもあります。

結局のことろ、自分のプロジェクトの性質にあったプロジェクト管理手法を選択する必要があります。どのプロジェクト管理手法が合うのかという、絶対的な最適解はありません。

だからこそ、我々は考える必要があるのです。

プライベートをTrelloでタスク管理する

私は、プライベートをTrelloでタスク管理しています。以前は、目標をたてずに何となく生きている人生でした。

しかし、日々テレビを見ているだけの人生で良いのかと自問自答し、一念発起してプライベートのタスク管理をはじめました。

実際どのようにタスク管理しているのか、せっかくブログもはじめましたので紹介させていただこうと思います。

Trelloとは?

Trelloとは「プロジェクト管理、TODO管理、タスク管理のためのツール」です。

trello.com

プロジェクト管理やタスク管理というと、業務やビジネスを思い浮かべませんか?確かに、Trelloでもビジネスシーンを想定した使い方が説明されています。

長くて難解なメールのやり取り、いつ更新されたかわからないスプレッドシート、古くなってもう付かない付箋、使いにくいプロジェクト管理ソフトは、もう忘れてください。Trelloを使えばプロジェクトのすべてがひと目でわかります。

私は、仕事上プロジェクト管理やタスク管理を行うこともあります。トヨタ式のカンバンを利用したタスク管理のように、プロジェクトの今の状況をひと目で把握し、現状を把握した上で次の一手を決定できるコトは非常に重要です。

つまり、これを応用すると、自分の人生というプロジェクトをタスク管理できるわけです。なんか壮大ですね。

もちろん、最も重要なのはどう管理するかではなく何をやるかだと思うので、自分は今後どうなりたいかという目標決めの方が大切ですよ・・・と、一言注釈を加えておきます。

私のタスクボードの例

以下のタスクボードは、私のプライベートのタスクボードをサンプル用に加工して、一部を切り抜いて掲載したものです。

f:id:konosumi:20170825000359p:plain

赤は英語、黄は将棋、紫はブログです。

長期目標

長期目標には、自分が達成したいことを記述します。私の場合は、例えば以下のような目標になります。

  • 将棋でアマチュア初段を獲得する
  • TOEICで○○○点を獲得する
  • ブログの月間PV数○○を獲得する

他にも、割愛しましたが「本を執筆して電子書籍か同人誌として出版したい」など、壮大な目標でも自分の願望でも良いので記載していきます。

目標設定の重要性の話でいうと、有名な「7つの習慣」とも似た考え方になりますね。

短期目標・継続タスク

短期目標には、長期目標を達成するために必要な細分化したタスクや、日次ないし週次で行なう必要のあるタスクを記載します。私の場合は、例えば以下のようなタスクになります。

  • 将棋ウォーズ(オンライン将棋)で一日三回対局する
  • 瞬間英作文トレーニング(本)を繰り返し行なう
  • ブログを毎週書く

長期目標を達成するためには、日々の細かな積み重ねが大切なので、長期目標をブレイクダウンしたのが短期目標であり継続タスクになります。

短期目標を継続的に実践していくと、いつの間にか長期目標の達成に近づいている状態が理想です。私もまだまだですが、タスクを実践していくことによって、少なくとも成長は実感できている気がします。

将棋も、囲いをひとつも知らない状態から脱却し、オンライン将棋で少しは勝てるようになるまで成長しました。

単発タスク

単発タスクは、一回で終わるようなタスクを記載します。「歯医者を予約する」「○○という映画を観る」・・・など。忘れないための備忘録としても利用しています。

普通の方であればスケジュール帳などで管理するのでしょうが、私は日程を厳密にした管理は苦手なので、単発タスクに積んでいって順番に消化していくスタイルをとっています。

これは好みの問題でもありますね。

タスク管理をやってみた感想

まだ、どの長期目標も達成できてはいないので、ドヤ顔で語れるような状態ではないのですが、少なからずダラダラする時間は減り、メリハリのある私生活にはなりました。

私は、有名な「7つの習慣」を読んだときに、スケジュール帳によるタスク管理を実践したことがあります。

その時はスケジュールを決めるのが大変とか、書いてもスケジュールが守れなかった・・・など、結局目標が達成できず、そのままの流れで挫折してしまいました。

しかし、Trelloにタスクを貼るだけくらいのライトな運用であれば、私は続けることができそうです。

私のプライベートにおけるタスク管理実践法が参考になるかはわかりませんが、ぜひ、タスク管理をやったことがない方は一度お試しください。

なにせ、Trelloは無料で使えるのです。

Trelloによるタスク管理を知ったきっかけ

私が Trello によるプライベートのタスク管理をやってみようと思った直接のきっかけは、omoiyari.fm のポッドキャストです。

lean-agile.fm

kakakakakku氏のタスク管理にかける情熱が非常に熱いので、ぜひ一度聞いてみてほしいです。

このポッドキャストを聞いた時に、私も頑張らねばと強く感じ今に至る次第です!