回答:
数年前、私はエラーを投げ始めたデータベース中心のアプリケーションの主任開発者でした。データベースフィールドに許可されるべきではない重複した値があったという事実を突き止めました。
このフィールドに必要なことは明らかだったので、データベースに本番環境にプッシュしたときに、データベースに一意の制約を設定するのを忘れることに打ち勝っていました。私は私の仲間の開発者の1人に私を正してくれました...
他の開発者:「ああ、あなたは忘れていませんでした。そのフィールドには一意の制約がありました。削除しました。」
私:「なぜそれを削除したのですか?」
他の開発者:「数週間前にそれを行いました。顧客からデータファイルを取得していましたが、一意の制約が新しいデータをブロックしていたため、インポートされませんでした。そのため、インポートを完了するために制約を削除しました。」
私:「既存のデータと重複する新しいデータを取得していて、インポートする前に誰かにそれについて言及することを考えている場合、問題があった可能性があることを考えるのをやめましたか?」
その他の開発者:(空白の凝視)
私:Facepalm。
これが技術的な決定と見なされるかどうかはわかりませんが、私は4年間PHPで記述されたCMSのようなドキュメント管理Webサイトの責任者でした。これらの年間を通して、私は多分、おそらく、のような、する人(管理者、ユーザー、機能、要求者)を取得するために複数回試みたかもしれない、一緒に座って、要件と実物の将来の方向を考えるの可能性を検討します。それは決して起こらなかった。それは常に「この機能を追加する」、「その機能を追加する」であり、誰もが他の誰もがWebサイトを使用するさまざまな方法すべてに幸福にも気づいていませんでした。私が辞任する頃には、相互に関連しあっていたが関係のない機能が非常に乱雑になり、会社全体ですべての機能を知っていたのは私だけでした。今、誰もしません。ムワハハ。
SVNスナップショットに基づいて、最初のリリースバージョンの前に外部ライブラリ(この場合はSpring RCP)を採用します。プロジェクトが多かれ少なかれ死んでしまうことはほぼ保証されており、死体に縛られていることに気づくでしょう。まあ、私たちの場合、それはもっと悪いことかもしれません。まだ大きなリスクです。
特定のJavaアプリケーションサーバーにプロジェクトに必要な機能がまだないという事実にもかかわらず、特定のJavaアプリケーションサーバーにコミットすることを思い出した1つの例、それらが実装されるときのロードマップだけです。当然のことながら、ベンダーは最初に示したほど迅速に配達しませんでした。これは大きな問題であるはずでしたが、実際には、失敗への遅い道のりにおける多くの乱闘の1つにすぎませんでした。
私が遭遇したこの種の問題のほとんどの事例は、証明されていない/未熟な技術へのコミットメントに関係しています。これは、技術面で影響力のある誰かが、レジュメ主導の開発の支持者であることが多いためです。
C / C ++で最新のオペレーティングシステムを作成する。Morris Worm(80年代後半)以来、ネットワーク化されたソフトウェアを構築するのに完全に不適切な言語であることはわかっていましたが、基本的には刑事過失IMOに相当するものです。
std::string
が、それは機能します。また、コンテナクラステンプレートを使用すると、潜在的なエラーの大規模なクラスを排除できます。
私が見たもの...
1980年代には、Primeという会社があり、PickデータベースとBASICのバージョンを実行するコンピューターを製造していました。私が働いていたときに購入した場所のユーザー部門は、これにより多くのお金を節約でき、1人のビジネスアナリストが必要な処理と結果を4分の1の時間で得ることができると確信していました。4人のフルタイムのプログラマーアナリストと仕事のバックログができるようになるまで、それほど長くはありませんでした。
テクノロジーが彼らのために何をするかを見積もる際の大きな間違い。