では「要求される機能を実行できない状態」がどのようなことで起きるかと言うと、さまざまである。その原因の分類法も多いが、そのひとつに、以下のような広く行われている分類法がある
さて1番目に挙げた初期不良について説明すると、大きく分けると以下のような場合がある。
頻度が高い、製造時の失敗によるものは、一般にメーカーが良品に交換に応じるということが行われており、輸送時の破損事故によるものは、運送業者が保険を用いて損害額を補償するなどということ（その補償で使用者は良品をあらためて購入するか、あるいは運送業者がメーカーに補償し、メーカーがユーザに新品の良品を届ける）ということが行われているが、設計自体に重大な問題がある場合は、代わりとなる良品が無い場合もしばしばで、代替品が無い場合は製品回収および返金となる。設計ミスによる初期不良が起きた場合は、メーカーはそれを公表して、ユーザーに連絡をとり、無償で修理や交換をする、というリコール制度に関する法律が徐々に整備されてきた歴史がある。 
設計自体に問題がある場合についての解説は「設計」の記事に譲る。
というわけで、専門家の間においても、「不具合」「フォールト」「故障」は区別して使われていないことが多い。ただし、JISの定義では「故障は（一回きりの）イベント（出来事）」「フォールトは（継続した）状態」と定めて、一応は使い分けている。
コンピュータの場合.
コンピュータの不具合がどのように起きるかというと、実にさまざまである。
ソフトウェアのレベルで起きることもあるし、ハードウェアのレベルで起きることもある。
前者のソフトウェア（コンピュータ・プログラム）の不具合はどのようにして起きるかと言うと、これもさまざまである。
バグとはコンピュータ用語では「プログラムに含まれる誤り」や広く「ソフトウェア開発者の意図した動きと違う動作をする原因」を指すが、その原因もさまざまである。
等々である。あまりに種類が多すぎてここでは挙げきることができない。場合によっては、そもそも、システム開発としては最初期の段階、要件定義の段階で、根本的に間違っている場合もある。
不具合はハードウェアのレベルで起きることもある。