Frühe Software hatte oft eine Liste von Unzulänglichkeiten, Fehlern und anderen Problemen aufgrund einer Reihe von Problemen, die durch Unerfahrenheit sowohl bei Entwicklern als auch bei potenziellen Benutzern verursacht wurden. Im Laufe der Zeit wurden fünf Bereiche innerhalb des Softwareentwicklungsprozesses als Hauptursachen für auftretende Schwierigkeiten identifiziert.
Anfangs waren die Anforderungen oft nicht klar formuliert, was dazu führte, dass später zusätzliche Features hinzugefügt werden mussten, was oft große Probleme bei der Integration der zusätzlichen Features in die bestehende Programmierung verursachte. Anforderungen sind heute klar formuliert und bestehen aus überprüfbaren Anforderungen, auf die sich alle Beteiligten vor Arbeitsbeginn einigen.
Zeitpläne waren oft unrealistisch, was dazu führte, dass Verfahren überstürzt wurden, häufig Fehler verursachten usw. Heute wird ausreichend Zeit für Planung, Design und Entwicklung eingeräumt.
In der Vergangenheit waren die Testmöglichkeiten nicht immer ausreichend, sodass Probleme oft übersehen wurden. Darüber hinaus stützte sich das Testen hauptsächlich auf grundlegende Funktionstests des Endprodukts. Testeinrichtungen sind heute weitaus anspruchsvoller und berücksichtigen Peopleware. Das heißt, die Software wird vor der Finalisierung in verschiedenen Entwicklungsstadien an realen Benutzern getestet, um eine optimale Benutzerfreundlichkeit zu gewährleisten.
- Durchführbarkeit von Änderungen
Wenn in der Vergangenheit späte Änderungen von Anforderungen präsentiert wurden, versuchten Entwickler oft hastig, diese zu integrieren. Heute werden die Änderungen besprochen und bei Bedarf Zeitpläne überarbeitet, um eine nahtlose Integration zu ermöglichen. Nach der Integration durchläuft die Software erneut den Testprozess wie oben beschrieben.
Die frühe Softwareentwicklung wurde oft durch mangelnde Kommunikation und Dokumentation behindert. Heutzutage werden viele Kommunikationsmittel, Informationsquellen und Dokumentationseinrichtungen verwendet, um sicherzustellen, dass sowohl das Team als auch der Endbenutzer jederzeit informiert sind, was wie und wann passiert. Auf diese Weise werden Probleme eher frühzeitig erkannt.