DeusterDevelopment
← Zurück zur Übersicht

Was macht ein System überlebensfähig? (7/8)

TCP/IP, Unix-Pipes, SQL und Postgres überleben seit Jahrzehnten, weil sie textlich, klar begrenzt, rückwärtskompatibel, semantisch bescheiden und institutionell eingebettet sind. Keine dieser Eigenschaften ist clever — alle sind demütig, und genau deshalb wirken sie. Zeit ist die Ressource, über die wir im Design fast nie ehrlich nachdenken.

Was macht ein System überlebensfähig? (7/8)

Einleitung

TCP/IP wurde 1981 standardisiert.

Unix-Pipes gibt es seit den frühen siebziger Jahren.

SQL stammt aus derselben Zeit.

Postgres ist seit den späten achtziger Jahren dabei.

Jedes dieser Systeme hat die Erwartungen von 1980 überlebt.

Die achtziger, die neunziger, die Cloud, Mobile, die KI-Welle.

Und wird mit hoher Wahrscheinlichkeit auch die nächste Welle überstehen.

Was haben sie gemeinsam?


Die Eigenschaften

Meine Beobachtung nach zwanzig Jahren mit verschiedensten Systemen:

Sie teilen einige wenige Eigenschaften.

Keine davon ist technisch clever.

Alle sind demütig.

Und sie wirken, weil sie demütig sind — nicht obwohl.


Textlich, wo möglich

Unix-Pipes arbeiten mit Text.

CSV, JSON — Text.

SQL — Text.

Das hat einen Grund.

  • Text lässt sich lesen, ohne das Tool zu haben, das ihn geschrieben hat.
  • Text lässt sich in jeder Sprache verarbeiten, die es gibt und noch geben wird.
  • Binärformate sind schneller, aber sie setzen voraus, dass der Leser die Version des Schreibers kennt.

Text tut das nicht.


Klare Grenzen

Eine Unix-Pipe ist ein Bytestrom zwischen zwei Prozessen.

Nicht mehr.

  • Kein geteilter Speicher
  • Kein impliziter Zustand
  • Keine Callbacks

TCP stellt Bytes zu.

Was darin steht, ist nicht sein Problem.

SQL hat eine Tabellenform.

Die Formate verschweigen nichts, was in ihnen nicht steht.

Das klingt trivial.

Es ist die schwerste Eigenschaft in Software überhaupt.


Rückwärtskompatibilität als Wert

Postgres bricht Clients ungern.

Features werden über mehrere Versionen entfernt, mit Deprecation-Warnungen.

TCP hat seit Jahrzehnten dieselben Kernsemantiken.

Das ist kein Zufall.

Es ist eine Haltung, die entschieden wurde, als diese Systeme jung waren.

Und eingehalten wurde, als sie es nicht mehr waren.


Semantisch arm

SQL ist als Sprache nicht elegant.

Es hat Inkonsistenzen, Lücken, anachronistische Syntax.

Aber es ist spezifiziert genug,

dass Dutzende Implementierungen sich auf gemeinsames Verhalten einigen können.

Eine reichere, elegantere Sprache wäre schwerer zu standardisieren.

Also fragmentierter.

Armut an Semantik ist in Standards oft eine Tugend.


Institutionell eingebettet

Für TCP/IP gibt es die IETF.

Für SQL gibt es ANSI.

Für Unix gibt es POSIX.

Jedes dieser Systeme hat ein Dokument, auf das man sich berufen kann.

Und eine Community, die es fortschreibt.

Das ist der Unterschied zu vielen Open-Source-Projekten, in denen die Spezifikation das Repository ist.

Institutionelle Einbettung verlagert Wissen aus dem einzelnen Kopf in die Organisation.


Der Moment im Designreview

In fast jedem Designreview, in dem ich gesessen habe, gab es einen Moment:

Jemand sagt:

„Wir können doch hier einfach ein eigenes Binärformat definieren, das ist viel effizienter.”

Der Satz stimmt.

Er stimmt in einer Messung.

Und er fügt dem System eine Abhängigkeit hinzu,

die in zehn Jahren zur Last wird,

wenn jemand das Format lesen will, der das System nicht kennt.

Der Moment, in dem man sich für Text entscheidet, sieht langweilig aus.

Er ist die einzige Entscheidung, die in zwanzig Jahren nicht bereut wird.


Zentrale Beobachtung

Überlebensfähigkeit ist keine Eigenschaft, die man einem System hinzufügt.

Sie ist die Zusammenfassung vieler kleiner Entscheidungen,

die für sich genommen unauffällig wirken.

Zeit ist die Ressource, über die wir im Design fast nie ehrlich nachdenken.


Abschlussgedanke

Wer Systeme bauen will, die bleiben, sollte aufhören, clever zu sein.

Und anfangen, demütig zu sein.

Das ist kein moralischer Ratschlag.

Es ist ein Designprinzip.

Verwandte Beiträge

Systeme für das Altern entwerfen (8/8)

Systeme für das Altern entwerfen (8/8)

Systeme, die altern sollen, müssen ohne ihre Autoren funktionieren — das verlangt langlebige Schnittstellen, vorsichtige Versionierung, ehrliche Dokumentation und das bewusste Vermeiden ephemerer Abhängigkeiten. Legacy ist kein Scheitern, sondern Erfolg, der lange genug angehalten hat, um außer Mode zu kommen. Die Frage beim nächsten Projekt lautet nicht „wird das modern sein?", sondern „kann ich mir vorstellen, dass das in zwanzig Jahren noch läuft, ohne dass mich jemand dafür verflucht?".

Legacy ist kein Defekt, sondern ein Zustand (1/8)

Legacy ist kein Defekt, sondern ein Zustand (1/8)

„Legacy" ist ein soziales Urteil, kein technisches Kriterium — es beschreibt meist nur, dass ein System länger existiert, als die Leute im Raum darüber reden wollen. Alter und Veraltetsein werden routinemäßig verwechselt, obwohl sie nichts miteinander zu tun haben müssen. Die ehrliche Designfrage lautet nicht, wie man Legacy vermeidet, sondern wie man Systeme baut, die diesen Zustand würdig erreichen.

Der Strangler Fig und andere ehrliche Strategien (6/8)

Der Strangler Fig und andere ehrliche Strategien (6/8)

Inkrementelle Ablösemuster — Strangler Fig, Anti-Corruption Layer, Parallel Run, Branch by Abstraction — funktionieren, weil jeder Zwischenschritt produktionsfähig bleibt und das Risiko pro Schritt begrenzt ist. Auf Folien wirken sie ineffizient, in der Realität sind sie die einzigen Varianten, die zuverlässig ankommen. Disziplin, nicht Geschwindigkeit, ist das knappe Gut.