Das Not-Invented-Here-Syndrom ist eine weit verbreitete Krankheit, die insbesondere unter Softwareentwicklern grassiert.
Passt bestehende Software nicht zu 100% genau auf die eigenen Anforderungen (welche tut das schon?), wird sie einfach durch einen Eigenkreation ersetzt. Insbesondere, wenn das die eigentliche Aufgabe "trivial" ist. Sei es jetzt eine simple kleine C-Bibliothek zur Verwaltung von dynamischen Datenstrukturen (Argument dagegen: "verschwendet zuviel Platz") oder eine Monitoring-Lösung ("Ich mochte XY noch nie, und ausserdem kann man sich das mit den Plugins von XY ja problemlos selbst eine Lösung schreiben"), der gemeine Entwickler ist sich selten schade genug, das Rad neu zu erfinden, weil alle bisherigen Räder nicht die Anforderung erfüllen, die gerade spezifisch für sein Problem sind. Eine 99% Lösung zu nehmen und das restliche Prozent selbst dazuzuentwickeln kommt als Lösung auch nicht in Frage ("Dann muss ich die Patches ja bei jeder neuen Version mitziehen" oder "$Upstream/$Hersteller wird mein Patch nie akzeptieren, weil er zu spezifisch ist").
Hat man denn nun eine neue, hundertprozentige, selbstgestrickte Lösung entwickelt und nimmt sie in Betrieb, so stellt sich normalerweise sehr schnell heraus, daß diese 100 Prozent bei weitem nicht ausreichen (Stichwort: sich ändernde Umgebungsbedingungen); man hat Fehlerfälle komplett ausgeklammert oder übersehen, die einem in einem ernsthafteren Betrieb sofort auf die Nase fallen. Bei 100 Datensätzen ist die Lösung noch elegant und brauchbar, bei der tausendfachen Anzahl schläft man ein.
Bereits bestehende Software hat eine Vorteil: Es verwendet sie auch jemand anders. Und dieser jemand hat vielleicht schon diverse Fehler behoben/beheben lassen. Es besteht die Hoffnung, daß diese Lösung bereits einen Reifungsprozess hinter sich hat und man selbst nicht für diesen kompletten Prozess verantwortlich zeichnen muss.
Wiederverwendbarkeit ist das Stichwort. Sei es bei Bibliotheken oder kompletten Anwendungen. Gibt es für ein Problembereich viele Komponenten/Bibliotheken und Anwendungen, bedeutet das üblicherweise:
- Das Feld ist extrem breit, von der Software für den Heimanwender bis zur absoluten Profianwendung.
- Das Problem scheint so einfach zu sein, daß jeder eine eigene Lösung anbieten kann und will.
Und letztere Lösung sieht man insbesondere im Opensource-Bereich sehr viele. Angefangen bei den ähnlichen Routinen, die im C-Umfeld immer wieder neu erfunden werden (was die STL für C++ ist, gibt es für C leider nicht) und immer ihre eigenen Bugs mitbringen. Dann zu den manigfaltigen Netzwerk-Monitoring-Lösungen, die vielmals aus persönlichen Animositäten herrühren.
Habt ihr auch schon solche Software geschrieben? Und wenn ja, warum?