Risiken und Nebenwirkungen von Wiederverwendung

24.01.2010 Permalink

Die Situation kommt sicherlich häufiger vor: Ein Softwareprojekt übergibt erfolgreich seine erste Version an den Betrieb, und es dauert nicht lange, da steht bereits das nächste fachlich und technisch ähnliche Projekt vor der Tür. Im letzten Projekt hatte man sich einige Mühe gegeben, eine saubere Infrastruktur bestehend aus Entwicklungsumgebung, Buildverfahren, Generatoren, Laufzeitprodukten, Bibliotheken und kodierten querschnittlichen Lösungen zu etablieren. Und was liegt näher als diese Infrastruktur gleich weiter zu verwenden?

Für die Widerverwendung gibt es jetzt zwei Wege. Man kann a) alle Projekte dieselbe Infrastruktur gleichzeitig nutzen lassen, oder b) man erschafft einen dauerhaften Branch, den man dann den Wünschen des neuen Projekts ohne sonderliche Rücksicht anpasst.

Der Reflex des guten Softwareingenieurs ist klar: Keine Duplikation, um keinen Preis! Das würde zu Mehrfachpflege führen, oder schlimmer noch: man lässt zeitweise die Divergenz zu und muss sich dann wieder mit der Konsolidierung mühen. Dieser Reflex ist gesund, aber man sollte eine bewusste Entscheidung treffen, ob man eine gemeinsame Infrastruktur oder verschiedene ähnliche haben möchte, denn die technischen und organisatorischen Konsequenzen, die dem Nachgeben des Reflexes folgen, können teurer und unerfreulicher sein als das divergierende Nebeneinander. Letztlich ist hier eine Entscheidung mit strategischem Weitblick und langfristiger Kosten-Nutzen-Betrachtung nötig.

Konsequenzen bei Zusammenhalten:

Konsequenzen bei Nichtzusammenhalten: Die Frage ist letztlich: wieviele technisch ähnliche neue Projekte wird die Organisation in Zukunft haben, die den weitgehend unveränderten Einsatz dieser Infrastruktur erfordern?

Wenn die Antwort ist: ja, noch einige, dann sollte man über eine gemeinsame Infrastruktur nachdenken.
Wenn die Antwort ist: nicht viele oder nur mit stärkeren Abweichungen untereinander, dann würde ich die Finger davon lassen und die projektweise Weiterentwicklung nebst informellem Austausch vorziehen.