🐨

目的から考えるウォーターフォール開発とアジャイル開発

2022/03/30に公開

私の今までのエンジニア経験で、ウォーターフォール開発とアジャイル開発の両方を、一応はやってきました。ただ、完璧に理論通り開発が進んだことは稀だし、理論やプラクティスはもちろん大事なのですが、なんでこういう形で開発をやってるのかと考えることも、大事とは感じました。
というわけで、今回は「目的」という観点から、双方についてかなり少し個人的ではありますが、暴論見解を書いてみたいと思います。

<ウォーターフォール開発>

ウォーターフォールの概要についてはwikipediaのページを参照頂きたいのですが、基本的には工程毎に区切って開発を進めていく形です。

では、ウォーターフォールの目的とは何か、「品質を担保する」や「計画を立てやすくする」などなど色々あるとは思いますが、個人的には「スケールメリットの追求」だと考えています。
なぜきちんとドキュメント化する必要があるのか、それは後工程のスケールメリットを出すためと私は考えています。極論にはなってしまいますが、前工程で非の打ちどころがない完璧な成果物を作れば、後工程の人はそこまで自分で何か考える必要は無いでしょう。極端に言うとスキルがそれほど無い人でも、作業が出来る状態になっているわけです。この状態が出来上がると、人をどんどん突っ込んでスピードを上げるということが、実現できるわけです。
個人的に感じるウォーターフォールにおいて最低限必要なロールは、PMと各工程の作業者のみです。各工程の作業者は前工程の成果物に沿って割り当てられた作業をすればよく、PMがいかに人を集めて作業を割り当てるのか、というのが重要になってきます。正直、人はどこからか集められるという発想なので、いかに人を割り当てるかというPMの役割がプロジェクトの成功に直結するでしょう。なので、ウォーターフォール開発を事業の主軸としているSIerなどは、PM人材を最優先で育てたいわけです。(あくまでこれは個人的な所感ですが)

<アジャイル開発>

アジャイル開発というと、まず見るべきはアジャイルソフトウェア開発宣言ではありますが、ではアジャイル開発は何を目的として、こういう宣言を行ったのか。
これも色々考えはあるとは思いますが、個人的にはアジャイルを成功させるために理解しておきたい本質の記事にある、「企業にとってのアウトカム(成果)を創出すること」というのが一番しっくりきました。

企業としての成果とは何かというと各企業によって異なりますが、分かりやすいものでいくと、売上であったりコスト削減であったり顧客満足であったりが、挙げられるかなと思います。ただ、重要なのはソフトウェアを開発することではなく、成果を上げることです。だから別に、手段がソフトウェアでなくても良ければ、それは開発しないというのも全然ありと思っています。
とはいえ、どうやったら成果が出せるかというのは、明確にこれだというものが無い状況のほうが多いでしょう。だから、成果を出すために試行錯誤は大事だし、スピード感を持って進めることも必要でしょう。
アジャイル開発においても、PM的な役回りの人ももちろん重要とは思います。一方でメンバーについても、作業者というよりは成果に向けてどう動くべきかを考えることが重要です。だから、個々のメンバーが自分の得意な領域で大まかなロールは設定されつつも、自分はこれしかやらんみたいなスタンスだと、成果に向けた動きと反してしまうことにもつながると感じます。

<その他雑感>

こうやって振り返ると、そもそもウォーターフォール開発とアジャイル開発は目的が違っていると考えていて、自分達が今どちらの目的に近いかを、考える必要はあるかなと思います。目的が違うのに別の手法を取り入れたところで、やはり達成できる見込みが低くなってしまうだろうし、メンバーの生産性低下にもつながる気はします。

Discussion