最近、とあるAI絡みのプロジェクトでLLMを使ったシステムの研究開発をやっておるのですが、個人的に応用が利くものができつつあると実感しているのですが、一方で、今は広める訳にはいかないので、成果の一部を小出しにします。
ちなみに、「オブジェクト指向おじさん?」の記事については、「感情的である」というAIからのご指摘を受けてそのうち修正を行いたいと思います。
以下本題、下記の記事にコメントします。
・なぜ、「ウォーターフォールでソフトウェアを作れる」という嘘を信じる人が世の中にいるのか?
・ウォーターフォール開発がダメなのかは、弁護士が請負契約で仕事しないことでわかる?
あくまでも個人的な感想ですが、どうもAIを使ったある種のバズり目的の記事だとは思うのですが、私のAI分析が良い感じだったのでその成果ということであえてコメントします。
まず、結論ですが、ウォーターフォールだろうが、アジャイルだろうがその場にあった方法でどうぞとなります。
「プログラマ」ではなくある種のコンサルタント的な立場の人間(SEや営業、アーキテクトもその一人かもしれません)、つまり上司やプロジェクトリーダの元での作業ではなく、非エンジニアの顧客(情報システム部門の方でも、そうでない方でも)と直接話をする場合にわかるかと思いますが、おそらく99%の顧客の関心事項は
金をどぶに捨てることにならないか?(何らかの成果物が出てくるか?)
ということです。顧客目線に立てばウォーターフォールが良い場合もあればアジャイルが良い場合もありますし、ウォーターフォールだろうがアジャイルだろうが、最終的にモノが出来なければ「修羅場」になるということです。
まともな顧客の場合は、RFP(Request for Proposal)を用意して提案書(見積)を求めてきます。
そうでなくても「こんなシステムを作りたいのだが・・・」からはじめに打合せを行ってから、ある程度「何を作るか?」を話し合ってからの見積となります。
この場合、ウォーターフォール開発が想定されるような「システム開発」の場合、ほぼ間違いなく
完成保証があります。
つまり請負契約になります。ここで『ウォーターフォール開発がダメなのかは、弁護士が請負契約で仕事しないことでわかる?』とありますが弁護士が請負契約をしない最大の理由は「原理的に完成保証ができない」からです。つまり裁判になったときには必ずどちらかが負けます。つまり弁護士が仕事を受けるときには原理的に「勝ち」を保証できないことになります。
一方でソフトウェア開発の場合は、「不確実性」があったとしても顧客と開発者が成功に向けて協力すれば、「何を作るか?」ということに関しては何らかの合意ができることが多いです。また、記事にあるような『不確実性が高い』というのは、開発するエンジニアの技術不足や経験不足ということもあります。つまり『不確実性』を『ソフトウェア開発の本質』ということだけでなく関わる顧客の要求仕様の変更や開発者の技量によって不確実性が変わるということもあります。
「完成保証なんて出来ない」と思っている人もいるかもしれません。実際にWikipediaにも「問題点」として挙げられています。当然ですが、ここは現状に合わせて適宜修正を行うことになります。「出来るかどうかわからない」という状態はウォーターフォール開発的に言えば「要件定義が終わっていない」ということになります。実はウォーターフォール開発でも現状分析や要件定義などのいわゆる上流工程は原理的に「完成保証」ができません(し実務上もしません)。また、要件定義がまとまっても技術的にできないことが後になって発覚する場合もあり得ます。そういうのを防ぐ為にも「プロトタイプ」を要件定義の間に行うこともあります。また、テスト工程では「要件定義のバグ」も考慮して期間や費用の見積もりを行った方がよいでしょう。
私の経験では、要件定義の段階で大体プロトタイプを作成しますしそれなりの費用をいただいております。
ウォーターフォール開発の利点の一つですが、「仕様を確定させる」というのがあります。これはお客からの理不尽な要求を抑止する効果があります。もっとも「全ての追加要求を突っぱねる」というのは営業的に問題がありますし、私も「当初の約束でないタスク」をしたこともありますが、一定の線引きがないと収拾がつかなくなります。
仕事というのは契約なので「何を何処まで、幾らでどの期間で」というのを確定させるには工程もある程度は確定している必要があります。ウォーターフォール開発というのは、一般的なビジネス習慣と親和性が高いということになります。
一方でアジャイルという言葉には曖昧性が含まれています。つまり誰にとってアジャイルか?ということです。顧客企業にしてみれば「仕様変更がアジャイル」というかもしれませんが、上記の筆者の言いたいことは「アジャイルは完成保証を前提としない」というこのように読み取れます。こういう認識の違いは潜在的に後になってある意味ウォーターフォール以上に揉める要素となりうるのでできれば避けたいところです。『『アジャイル開発の失敗率は268%も高い』のコメント欄が面白かったので紹介するよ』という記事もあるので、基本的に開発プロセスについてはそもそも比較自体が怪しいということは知っておいた方がよいかと思う。
また、アジャイル開発外部委託モデル契約についてを引用しますと『アジャイル開発においては、開発過程において仕様変更を柔軟に受け入れる場合や、そもそも仕様が明確でない場合等がある。しかし、こうしたアジャイル開発の特徴に対するユーザ企業側の理解が十分でない場合には、期間内に成果物が完成しない等により、ユーザ企業とベンダー企業の間でトラブルとなるケースも発生するとの指摘がある。』とあります。
つまり、ウォーターフォールでもアジャイルでも、モノができなければ揉めます。逆説的になりますが、経験上、信頼されている開発者(会社)は顧客からアジャイル(準委任)を要望され、信頼されない開発者(会社)は顧客からウォーターフォール(請負)を強制される傾向があります。つまり、あまり声高にアジャイル(準委任)を叫ぶと逆効果ということもあります。
ちなみに、過去にアジャイル的な開発プロジェクトに入ったことがありますが(まぁ時効ということで告白しますと)、ある意味ぶっ飛んだプロジェクトで、ソフトウェアのリリースが直前になって差し止められるという究極のアジャイル、を経験しました。