Un logiciel étant un bien immatériel, les seules représentations observables du logiciel sont le code source, l'interface utilisateur et la documentation (spécification). La quantité de code source (nombre de lignes) est rarement connu, ce qui entraîne souvent une sous-estimation de la complexité du logiciel.
Pour chaque module d'un logiciel il existe de nombreuses conditions d'utilisation. La combinaison des différentes conditions d'utilisation des différents modules d'un logiciel amène une explosion combinatoire, et lors de sa construction un logiciel n'est jamais contrôlé dans la totalité des conditions d'utilisation qu'il rencontrera durant son exploitation; ceci pour des raisons pratiques (coût et durée des travaux).
Une autre raison est qu'il n'y a pas de lien entre un défaut mineur et majeur, et une modification mineure ou majeure. Et l'effort de détérioration d'un logiciel n'est pas proportionnel à l'effort de construction. Un défaut mineur peut entrainer un incident majeur, et nécessiter une correction mineure. Dans l'incident du vol 501 d'Ariane 5, une correction mineure a suffi à éviter la destruction de la fusée. De même une modification mineure d'un logiciel peut le mettre hors d'usage; un phénomène largement exploité par les virus informatiques.
Pour être considéré comme produit de qualité par l'usager, un logiciel doit répondre aux besoins exprimés explicitement par l'usager aussi bien qu'aux besoins implicites (non exprimés). Or les vœux implicites évoluent avec le marché, et il arrive bien souvent que des vœux implicites des usagers ne soient pas connus des ingénieurs logiciels.
Un phénomène de baisse des prix du matériel informatique et d'augmentation des prix du logiciel, accompagné d'une baisse de la qualité des logiciels a été identifié à la fin des années 1960 et nommé la "crise du logiciel". Cette crise s'apparente aujourd'hui à une maladie chronique de l'industrie du logiciel, dont les symptômes sont les suivants:
Auparavant minoritaire, le coût du logiciel en 1965 représentait 50% du coût total d'un système informatique. En 1985 la part du logiciel est de 80% et les coûts dus à la correction des défauts dans les logiciels (maintenance) représente jusqu'à 3 quarts du coût total d'acquisition, un excédent dû uniquement à la mauvaise qualité du logiciel lors de sa livraison.
Selon une étude réalisée en 1994 par le Standish Group, 53% des logiciels créés sont une réussite mitigée : le logiciel est opérationnel, cependant le délai de livraison n'a pas été respecté, les budgets n'ont pas été tenus, et certaines fonctionnalités ne sont pas disponibles. Le dépassement des coûts est en moyenne de 90%, et celui des délais de 120%, et la qualité moyenne est estimée à 60%.