もしすべてのバグを完全除去したソフトウェアを作成しようとした場合、製品の開発・デバッグ・テストからリリースまでに膨大な時間と何がかかってしまう
コスト
バグ 
 もしすべてのバグを完全除去したソフトウェアを作成しようとした場合、製品の開発・デバッグ・テストからリリースまでに膨大な時間とコストがかかってしまい、開発費用を回収できなくなってしまう。このため、ソフトウェアメーカーの多くは、ある程度のバグが残っていても、致命的な不具合や主要機能への影響がなく、また別の回避策があるなどの想定範囲内のバグであれば、既知の問題点としてユーザーに告知した上でリリースしたりしている。
プログラミング 
 可能な限り避けたいものではあるが、プログラムにはバグ (bug) の混入が避けられない。場合によっては仕様にバグがあることもある（もっとひどい場合には標準規格のようなものでもバグがある）。デバッグ (debug) とはバグを取る作業であり、プログラミングの過程に必要なものとして見積りなどでは含めておかなければならない。 医薬品 
 新薬の開発の場合、まずさまざまな素材から化合物を抽出または合成し、基礎研究を行った後、動物などによる非臨床試験をおこない、その後3段階に分けて臨床試験を行う。試験終了後に国による承認審査が行われ、承認されれば生産体制を整え、販売が始まる。この一連のプロセスには非常に長い時間が必要であり、最短でも10年近くの年月がかかる。この一連のプロセスは創薬と呼ばれる。 プログラミング 
 ソフトウェア開発の第一段階は要求分析であり、その後モデル化し、実装し、デバッグする。これら作業については様々な方法論がある。要求分析で一般的な方法論としてユースケース分析がある。 プログラミング 
 続いて、全体のスタイルをおおまかに2つに分けると「トップダウン設計」と「ボトムアップ実装」になる。「なんとかの設計と実装」といったようなタイトルの本が多くあるように、どちらも重要だが、一般に対象についてよくわかっているものについてのプログラミングでは前者のスタイル、よくわかっていない場合は後者のスタイルとする。「設計された通りに実装することは不可能」といった場合に開発体勢の問題などから正しい対処がされないまま、設計と実装がちぐはぐになったプロダクトは悲惨である。また反復型開発では、あまりに大きなプログラムを一方通行のプロセスで書くことは最初から避けるものとされる。 プログラミング 
 デバッグには統合開発環境 (IDE) が使われることが多い（Visual Studio、NetBeans、Eclipseなど）。独立したデバッガ（gdbなど）も使われている。 ソフトウェア設計 
 ソフトウェア設計は、ソフトウェアのための問題解決と計画の工程である。ソフトウェアの目的と仕様が決定した後で、ソフトウェア開発者が設計をしたり、専門の設計者が開発計画を立てる。細かいコンポーネントやアルゴリズムの実装だけではなく、アーキテクチャ的観点での検討も行われる。 カーネル 
 カーネル開発はプログラミングの中でも複雑で難しいタスクのひとつと考えられる。オペレーティングシステムの中核部であるということは、高い性能を要求される最重要なソフトウェアであり、正しく設計し実装することは難しい。カーネルはユーザプログラムの互換性や移植性を考慮する必要などから、設計が制限されることもあり、そのことがさらに開発を難しくしている。 ハッブル宇宙望遠鏡 
 この問題を修正するために、焦点に入ってくる15%の光を最大限に活用するソフトウェアが開発された。これで性能は58%まで回復。これ以上の修復は直接宇宙へ行き、ハッブルを修理するしかなかった。 並列計算 
 しかし、問題点もある。並列計算を行う場合、もっともパフォーマンスを発揮するのはこれら複数のプロセッサが全て100%使い切られた時と考えられるが、従来のプログラムの多くは、複数のプロセッサを均等に全て使い切るようにはできておらず、また、そういったプログラミングは難しい。 ソフトウェア設計 
 ソフトウェア開発工程での要求分析によって、ソフトウェア工学における仕様が確定する。そのソフトウェアがユーザーとの対話を必要とするものか、あるいはユーザー中心設計であれば、ソフトウェア設計にはユーザーエクスペリエンス設計も関わり、絵コンテなども仕様に含まれることになる。完全に自動的に動作するソフトウェア（ユーザインタフェースのないソフトウェア）であれば、ソフトウェア設計は単なるフローチャート作成程度の作業となるかもしれない。また、統一モデリング言語 (UML) などの半形式的手法もある。いずれにしても、ソフトウェア設計工程の成果物としては、何らかのソフトウェア設計文書が生成される。