最近分かったけれどウォーターフォールとアジャイルの違いって開発者がユーザーかどうかの違いなんだよな
開発者自身が作っているソフトウェアのユーザーだと、使っているうちに仕様の変更に自然と気付くし
ユーザーの状況・環境の変化や社会・技術の変化によって仕様が変わるのは避けられないっていうことに気付くから
最初に仕様を固めるウォーターフォールのやり方は根本的に間違えてると分かるんだけど
ユーザーじゃない人は他の観点(開発工数とか予算とか)に左右されるから仕様を固めようとする
そもそも人間が使う以上は仕様なんて変わるのが当たり前なんだけど、それから目を反らしてるのがウォーターフォール
よく家とか車とかはウォーターフォールで作る、みたいなこと言うけど
設計士だって建築する人だってその家に住むわけじゃ無いから仕様の変更っていう観点を持たないっていうだけだよね
家に住んでると「やっぱりこうすれば良かった」とか「趣味が変わって部屋が必要になった」みたいな仕様変更は当たり前で
自動車についても状況の変化や想定外によって仕様変更は当たり前だけど買い替えという形で対応してるし
自動車は中古車市場が充実してるからローンで買うのが正解というのはこの辺の買い替え需要もあるよね
一方でソフトウェアだと大半の場合は仕様変更に対して「技術的に」対応することは可能なんだけど
ウォーターフォールだと金銭的な問題で作り直しになることが多いし
自動車みたいな汎用物じゃなくて専用設計で一から作り直すことになるからコストが割に合わないことがほとんど
なので、その仕様変更に最大限満たそうとするのがアジャイル開発で、そのために必要なのが動いているコードとコミュニケーション、リスクの共有