
どうも、きっしゅです。
現在BtoBのWebアプリの開発を行っている現役エンジニアです。
4月からはPMになり、プレイングマネージャーとして働いています。
システムの開発手法には「アジャイル開発」と「ウォーターフォール開発」があります。
この2つの開発手法の違いはネットで調べたらたくさん出てくると思います。
開発手法なので、どのようなプロジェクトや案件に向いているかの違いが記載されていることが多いと思います。
ですが、新人育成の観点でどのようなメリット・デメリットがあるかに関して触れられている記事はあまり見かけません。
そこでアジャイル開発とウォーターフォール開発が人材育成においてどのようなメリット・デメリットがあるのかを自分の経験をもとに記事にしました。
開発手法はころころ変更できるものではありませんが、それぞれの特徴を掴むことで、新人育成の際に何が足りなくて、どのように補っていくかを考えることができると思います。
では早速、紹介していこうと思います。
新人の育成観点から見たアジャイル開発とウォーターフォール開発の違い
早速、紹介に移りたいのですが、まずは簡単にアジャイル開発とウォーターフォール開発の違いをおさらいしたいと思います。
アジャイル開発とは??

アジャイル開発はAgile(機敏な)という言葉の通りスピード重視の開発を行うための手法です。
短い期間でのサイクルを回して、システムを機能強化していくことでシステムを実装していく手法です。
開発の途中での仕様変更や機能追加などに柔軟に対応できるのが特徴です。
明確なゴールラインが定まっていない案件やユーザーさんに使っていただき、フィードバックを反映しながら理想のシステムを開発していく案件に向いています。
少々要件が曖昧でも実装に取り掛かりますし、設計書等のドキュメントはメモ程度のものを作成して、システムが完成してから綺麗に整えることもあります。
アジャイルの開発にはXPやスクラムなど多数の手法があります。おそらく一番有名なのはスクラムだと思います。自分が所属するプロジェクトではスクラムを採用しています。
スクラムはチームワークを重視した手法です。
1週間~1ヶ月のスプリント(アジャイルではイテレーションという)を設けて、スプリント期間単位で開発を行います。
そしてそのスプリントの開発計画、進捗、問題点の精査等は開発メンバー全員で実施します。チームメンバー全員が円滑にコミュニケーションを取ることが求められており、コミュニケーションが枯渇するとチームとして崩壊する可能性もあります。
またユーザーさんとのコミュニケーションも積極的に行います。そしてその都度開発範囲の相談や次の機能強化の話をします。
時には実装が想定より遅れたということで、直前でリリースが次のスプリントに延期になったこともあります。ただそれであってもある程度ユーザーさんが許容してくれます。(理解してくださるユーザーさんだからかもしれませんが。。)
個人的には良くも悪くも、厳格な決まりがなく柔軟(悪く言うと緩い)開発方法がアジャイル開発だと思っています。
マネージャやメンバー次第で大きく明暗が分かれると個人的には感じています。
ウォーターフォール開発とは??

ウォーターフォールはWaterfalls(滝)という名前にあるように、上流工程から下流工程まで順番にステップを踏んでいく手法でです。
厳格に各工程に則って開発を行っていくことが特徴です。
ウォーターフォール開発では「企画」→「設計」→「開発」→「テスト」の全ての工程において常に完璧にして、次の工程に進みます。
最初からある程度完成像が明確になっている場合や、大規模なシステムの開発に向いています。
ゴールが明確なのでスケジュールや予算の管理が非常に楽です。
また開発途中での要件の変更は基本的にありえません。実施する場合は大きなコストと時間を要します。
しっかりとしたドキュメントを多数作成するため、他人への引き継ぎが用意になります。
各工程を順番に完遂させていくため、それぞれの工程での専門のメンバーを集めて開発を勧めることが可能です。
全ての工程で完璧にして次の工程に進むため曖昧な部分や技術的負債が残りにくいです。
初期の企画、設計の段階で漏れ等が発生すると莫大なコストを負うことになるのでマネージャーやメンバーの視野の広さによって明暗が分かれると、個人的には感じています。
新人育成におけるメリット・デメリット

アジャイル開発、ウォーターフォール開発それぞれの特徴を捉え、現場での経験をもとに以下の図の観点でメリット・デメリットを紹介します。
- コミットメント力
- 知識、スキルの習得
コミットメント力
結論から言うと、ウォーターフォール開発の方がコミットメント力は養われます。
アジャイル開発は非常に柔軟な上に、多少であればリリースの延期も発生します。また多少であれば不安が残っていてもリリースをする場合があります。(※自分の開発するシステムが完全なBtoBだからかもしてません)
一方でウォーターフォール開発は厳格に期限が決まっています。リリースの延期は絶対にありえません。もし延期したら、延期した分のコストは開発側が請け負うことが基本です。
ですので、アジャイル開発の場合は「間に合いませんでした」が許される場合がありますが、ウォーターフォールの場合は「間に合いませんでした」は絶対に許されません。
それはプロジェクトの雰囲気にも大きく現れます。
少なくとも自分が所属する会社ではアジャイルとウォーターフォールどちらを採用しているかで、プロジェクトの雰囲気が全く違います。
アジャイル開発では常に明確な期限があるとは限りません。タスクを消化してそれを経験値(ベロシティ)としてチームのタスク遂行能力を把握し、今後の開発スケジュールに反映していきます。
そのため残業などを積み重ねてタスクを消化してしまうと、正しくベロシティを図ることができず、今後の見積もりの際のズレに繋がります。
そのため、十分なテストが間に合わなった、無理なものは無理だと判断してリリースを延期することがあります。
また多少不安が残っても許容してリリースする場合があります。
これが悪い方向に働くと新人たちは多少遅れても問題ないんだ、常に完璧にしなくても問題ないんだ、と勘違いしてしまう可能性があります。
ですので、コミットメントに関してはしっかりと口に出して重要性を伝えていかないと、期限を守ることに関して甘い人材に成長する可能性があります。
逆に、タスクを早く消化して余った時間でバックログからタスクを引き上げて次々と取り組んでいくことも可能です。柔軟な対応ができるためスキルにばらつきがあってもそれぞれのスキルに応じて適した成長機会を提供できるのはメリットです。
一方でウォーターフォール開発のプロジェクトでは、決められた期限までに何が何でも終わらせないといけないため、全員がコミットメントにこだわります。
「期限に遅れるということ」=「損失または利益の減少」に直結します。だから、メンバー全員が期限を確実に守ります。
新人は最初にそのような環境に放り込まれるため、確実に期限を守ってタスクを消化する精神が自ずと養われます。
ただ一方で、その決まった期間でタスクを消化していくため早くタスクを終わらしてしまうと、時間を持て余す人が出てきます。その工程が終わっていない段階で次のタスクに取り掛かることはできないので、スキルにばらつきがある時の調整が非常に難しく、できる人ほど手を抜き成長機会を逃している可能性があります。
一長一短ではありますが、コミットメント力の観点から見るとウォーターフォールの方が養われます。
ここに関しては最初に身を置く環境の問題次第で、最初の基準が大きく変わるので開発手法よりもチームの雰囲気に依存する可能性も大いにあります。
知識、スキルの習得
こちらも結論から述べると、アジャイル開発は広く浅く、ウォーターフォールは狭く深く、知識やスキルが身につきます。
アジャイル開発の場合は、曖昧な状態、資料が出来上がっていない状態でも実装フェーズに入ります。実装も多少の技術的負債が残っていてもリリースに持っていく場合があります。
深くは追求せずスピード重視でステップを踏んでいくため、専門的かつ深い知識やスキルは身につきにくいです。
ですが、多くの場合は設計、実装、テストの全行程を経験するため、幅広い経験ができます。故に幅広い知識やスキルの習得が可能です。
一方でウォーターフォール開発では各工程で完璧にタスクをこなします。曖昧な部分がなくなるまで徹底してタスクを消化します。
専門的要素が強く、各工程に特化しがちであるがゆえに、他の工程を経験する機会が少なくなります。そのため幅広い知識の習得は難しいです。
一方で時間をかけて1つの工程に取り掛かるため、専門的な深い知識は身につきます。曖昧な部分をなくすまでタスクに取り組むため自然と細かい部分の知識、スキルを習得します。
こちらも一長一短ではありますし、携わるプロジェクトによっても異なるため一概には言えません。ウォーターフォールだけど全行程に携わるというプロジェクトも存在します。
まとめ
新人の育成観点から見たアジャイル開発とウォーターフォール開発の違いを述べてきましたが、最後に要点だけおさらいしておきます。
観点 | アジャイル開発 | ウォーターフォール開発 |
---|---|---|
コミットメント力 | 少し甘くなりがち | 徹底して守る |
知識、スキルの習得 | 浅く広く | 深く狭く |
先にも述べましたが、アジャイル開発とウォーターフォール開発の選択は外的要因が多く簡単に選べるものではありません。
そのため自分が携わるプロジェクトの状況と上記で上げた観点を意識することで、どのような点を意識的に補ってあげることで、より優秀な人材の育成が可能になると思います。
優秀な人材を育成することが全てではありませんが、スキル等を身に付けることは、プロジェクトにとっても、本人にとっても、ポジティブな結果を生むと思います。
だから先輩側に立つ方々が違いを理解して、意識的にリードしてあげることが大切になると思います。
みなさまの人材育成、プロジェクトの遂行の役に立つと幸いです。
コメント