Beim Spezifizieren an Änderungen denken
Dass eine Software später einmal geändert oder erweitert werden soll, ist nicht die Ausnahme, sondern der Normalfall. Endgültige Funktionswünsche gibt es nur in Übungsaufgaben in der Schule. Wenn ich eine Spezifikation schreibe, überlege ich mir daher auch gleich, wie die Sache in Zukunft aussehen könnte. Spezifiziere ich z. B. eine neue Funktion für ein Dokumentenverwaltungsprogramm, möchte ich eventuell gerne schreiben: "Diese Funktion soll für alle Dokumenttypen, die es jetzt oder in Zukunft geben wird, verfügbar sein." Mit dieser Idee bin ich jedoch auf heftigen Widerstand gestoßen. Ich darf die Anforderungen nicht so formulieren, dass bei zukünftigen Änderungen irgendetwas "automatisch" richtig funktionieren wird. Stattdessen soll ich, wenn es einen neuen Dokumenttyp gibt, eine neue Spezifikation schreiben, die alle bisher bereits für andere Dokumenttypen vorhandenen Funktionen durchgeht und (nochmals) spezifiziert.
Vergleiche
- Was ist, wenn ich ein Auto in meiner Wunschfarbe haben will? Muss ich dann eine vollständige Spezifikation des Autos abgeben, nur weil ich eine andere Farbe haben will und ich nicht schreiben darf: "alles außer der Farbe wie in der Serienproduktion"?
- Darf ich der Haushaltshilfe nicht sagen: "Alle Messer kommen bitte in das 3. Fach der Besteckschublade"? Muss ich jedesmal, wenn ich ein neues Messer kaufe, der Haushaltshilfe erklären, in welches Fach ich es haben möchte?
Ich verstehe, dass es einfacher ist,
- alle Anforderungen als endgültig zu betrachten und
- für jeden neuen Fall im Programmcode eine neue Kopie der bisherigen Funktionen anzulegen (Gegenteil von redundanzfreiem Programmieren).
Aber das ist so wie zu sagen: "Ich verwende Word nur noch als Schreibmaschine, denn die automatisch erstellten Seitenumbrüche, Nummerierungen, Referenzen usw. machen alles zu kompliziert."
Mögliche Erweiterungen voraussehen
Manche meinen, eine Softwarefirma soll strikt nur das tun, was beauftragt ist, keinen Strich mehr. Ich hingegen denke, dass manchmal absehbar ist, welche Erweiterungswünsche der Kunde haben könnte und versuche diese vorauszusehen und dort zu berücksichtigen, wo es jetzt nicht viel Aufwand verursacht, später aber größeren Aufwand einsparen kann. Das heißt nicht, dass man diese Zusatzerweiterungen dem Kunden gratis gibt. Aber es heißt,
- dass man den langen und aufwendigen Weg durch alle "Instanzen", den ein Änderungsauftrag in einer gut strukturierten Softwareentwicklung nehmen muss, vermeiden kann, wenn der Kunde irgendwann eine Kleinigkeit haben will, die man vorausgesehen hat
- dass man zukünftige Erweiterungsaufträge des Kunden leichter umsetzen kann, weil man die Software von vornherein für Erweiterungen ausgelegt hat
Vergleich
Nur das derzeit unbedingt Notwendige zu tun, ist so, wie wenn du beim Einkaufen nur das kaufst, was du sofort verbrauchen willst. Klingt vernünftig: Du kaufst nur, was du brauchst. Aber es bedeutet: Wenn du morgen Früh einen Kaffee trinken willst, musst du vorher in den Supermarkt...