Einiges wiederholt sich im Leben eines Software-Entwicklers: Wir starten erst mal klein und überschaubar. Das ist ein schlaues Konzept, wenn neue Projekte mit neuen Projektpartnern in Angriff genommen werden. Die Software setzt genau das um, was gefordert ist. Gut. Lean. Yes!
Dann kommen die ersten Erweiterungen. Auch diese sind schlank. Continuous Integration; iterativ inkrementell; budgetierte Aufwände; planbar; …
Aber dann kommen die Ausnahmen: Wir bauen für die Kunden unserer Kunden. Kundenkunde XY möchte Löckchen. Kundenkunde UV möchte Balköngchen. Hey – wir sind Dienstleister, also machen wir das!
Dann kommt Kunde XV und möchte Löckchen mit Balkönchen. Das haben wir ja auch beides schon gemacht. Aber – warum kostet das nun extra Zeit?
Als Techniker ist die Antwort auf die Frage klar: Es sind zwei Zweige der selben Software, die wir Techniker lieber auseinander halten, weil wir zwischen allgemein und spezifisch unterscheiden.
Ich schaue meinem Kunden in die Augen und – mir ist klar, dass das nicht die Antwort sein kann, die ich ihm geben möchte.
Eine kleine Übersicht, was uns Softwareentwickler so umtreibt:
- Es gibt Software für hunderte oder tausende Benutzer. Solch eine Software hat dann einen Standard-Umfang. Die Anbieter solcher Software-Produkte sind Unternehmen, bei denen man im Callcenter landet, wenn man eine Frage hat. Wenn etwas fehlt, wird für die Massen gebaut. In der neuen Version haben die neuen Features dann alle Anwender – egal ob sie es brauchen oder nicht.
- Es gibt Software für exakt einen Anwender oder Betreiber. Solch eine Software wird im Projekt umgesetzt und sie hat exakt den spezifizierten Leistungs-Umfang. Wenn etwas fehlt, kommt der Feature-Request und der Anwender erhält die fehlende Funktion.In einer schwarz-weiß-Welt wäre das dann Alles.
- Und dann gibt es die Software-Projekte dazwischen. Projekte werden weiter entwickelt und neue Kunden erhalten ihre angepasste Version. Alte Kunden behalten ihr jeweils ausgelieferte Version.
Ich erinnere mich an Projekte, bei denen wurde die Versionsnummer mit jedem Kunden erhöht und die Software hat sich Feature-Speck angefressen, bis sie sich nicht mehr bewegen konnte. Die Entwickler waren unentbehrlich, weil sonst niemand mehr den Durchblick durch Versionen und Funktionen hatte.
Aktuell betreiben wir Projekte, bei denen differenziert wird, zwischen Standardumfang und kundenspezifischen Erweiterungen. Ich denke, dass ist auch für den Kunden eine nachvollziehbare Sache: Alles, was nicht im Standardumfang enthalten ist, ist mit zusätzlichem Aufwand verbunden. Im Ergebnis haben wir einen stabilen Kern mit überschaubaren Abhängigkeiten und dedizierte Komponenten für die individuellen Kunden.
Bewährt hat sich das auch aus Gründen der Wartbarkeit. Irgendwann läuft jedem ein altes Projekt über den Weg. Wenn sich die Versionsuhr dann schon deutlich weiter gedreht hat, lässt sich leicht entscheiden, ob das alte Projekt aufgefrischt werden kann oder ob ein Upgrade ansteht.