Die Entwicklungs-Abstraktionsebene

Die Entwicklungs-Abstraktionsebene

Originaltext auf "Joel On Software", http://www.joelonsoftware.com/items/2006/04/11.html
©1999-2006 Joel Spolsky. All Rights Reserved. Mit freundlicher Genehmigung des Autors.

Aus dem Englischen von Jens Geyer.

Ein junger Mann kommt in die Stadt. Er sieht einigermaßen gut aus, er hat ein wenig Geld in der Tasche. Er spricht gern Frauen an.

Er redet nicht viel über seine Vergangenheit, aber es ist klar, dass er lange in einer großen, seelenlosen Firma zugebracht hat.

Er ist natürlich freundlich und aufgeschlossen, selbstsicher, ohne arrogant zu sein. Daher fällt es ihm leicht, kleine Aufträge am schwarzen Brett des lokalen “Programmer´s Café” zu finden. Aber er verliert immer mehr das Interesse an Datenbankprojekten für Versicherungen, eitlen Webseiten für Hausfrauen und finanziellen Berechnungsalgorithmen.

Ein Jahr später rechnet er sich aus, dass sein gespartes Geld ausreicht, um seine bescheidenen Ausgaben für ein Jahr zu bestreiten. Nachdem er sich mit seinem treuen Schäferhund beraten hat, stellt er einen Computer in einen sonnendurchfluteten Raum seines gemieteten Appartements über dem Lebensmittelladen und installiert eine Reihe sorgfältig ausgewählter Tools.

Er ruft er seine Freunde an, einen nach dem anderen. Er warnt sie, falls er sich in den nächsten Monaten rar macht, dann nur, weil er hart arbeitet.

Und er setzt sich hin um Code "abzuspulen".

Und was für Code! Lupenrein, artistisch, elegant, ohne Bugs. Die Benutzeroberfläche bildet den Gedankengang des Anwenders derart perfekt nach, dass die Leute im “Programmer´s Café”, denen er es vorführt, kaum bemerken, dass es überhaupt eine Benutzeroberfläche gibt. Es ist ein brillantes Stück Arbeit.

Ein brilliantes Stück Arbeit
Vom Feedback seinesgleichen ermutigt, startet er ein Business und bereitet sich darauf vor, Bestellungen entgegenzunehmen.

Seine Bescheidenheit lässt ihn keine großen Ansprüche haben, aber nach einem Monat sieht die Situation auf seinem Bankkonto nicht sehr ermutigend aus. Bisher gab es nur drei Bestellungen: Eine von seiner Mutter, eine von einem anonymen Wohltäter aus dem “Programmer´s Café” und die eine, die er sich selbst geschickt hat, um das Verkaufssystem zu testen.

Im zweiten Monat kommt keine weitere Bestellung.

Das überrascht ihn und lässt Melancholie aufkommen. In der großen Firma wurden regelmäßig neue Produkte entwickelt; selbst wenn diese unelegant und schlicht waren, so verkauften sie sich doch in ausreichender Menge. Eines der Produkte, an denen er dort mitarbeitete, wurde ein großer Hit.

Nach einigen weiteren Monaten beginnt seine finanzielle Situation prekär zu werden. Sein Hund sieht ihn traurig an, unsicher über das, was vorgeht, doch bemerkt er das etwas ausgemergelter als normal aussehende Gesicht. Es scheint, als könne er keine Energie aufbringen, mit Freunden auszugehen, einzukaufen, um die gefährlich leere Speisekammer aufzufüllen, oder nur zu baden.

Der Funken in seinem Blick fehlt
Am Dienstagmorgen verweigerte ihm der lokale Lebensmittelhändler weiteren Kredit, sein Banker beantwortet seine Anrufe schon lange nicht mehr. Die große Firma ist nicht rachsüchtig. Sie erkennen Talent und sind glücklich, ihn zu höherem Gehalt wieder einzustellen. Bald sieht er besser aus, er hat neue Kleidung und sein altes Selbstvertrauen wieder. Aber irgendetwas, irgendwo, fehlt. Der Funken in seinem Blick. Die Hoffnung, der Herr seines eigenen Schicksals zu werden, ist fort.

Warum schlug es fehl? Er ist ziemlich sicher, dass er es weiß. “Marketing” sagt er. Wie viele junge Techniker ist er geneigt, Dinge zu sagen wie “Microsoft hat schlechte Produkte, aber besseres Marketing.”.

Wenn ein Softwareentwickler das Wort “Marketing” in den Mund nimmt, meint er damit das gesamte Business ringsherum. Alles, was er am Prozess der Entwicklung und dem Verkauf eines Softwareproduktes nicht versteht. Allerdings ist das nicht wirklich das, was “Marketing” bedeutet. In Wirklichkeit hat Microsoft ein ziemlich schreckliches Marketing. Sehen Sie die Dinosaurier-Anzeigen vor sich, mit denen versucht wird, jemandem Microsoft Office zu verkaufen?

Software ist eine Unterhaltung zwischen Software-Entwickler und Anwender. Aber damit diese Konversation funktioniert, ist eine Menge Arbeit jenseits der eigentlichen Entwicklung erforderlich. Sicher, Marketing ist nötig, aber auch Verkauf, Öffentlichkeitsarbeit, ein Büro, Netzwerk, Infrastruktur und Klimaanlage im Büro, Kundendienst, Buchhaltung und eine ganze Menge anderer Aufgabenbereiche.

Aber was tun Software-Entwickler? Sie designen und schreiben Code, entwerfen Benutzerschnittstellen, sie debuggen, sie integrieren und checken alles in ein Repository ein.

Die Ebene, auf welcher ein Programmierer arbeitet (z. B. EMACS), ist zu abstrakt für ein Business. Die in der Entwickler-Szene arbeitenden Entwickler benötigen eine Implementations-Ebene - eine Organisation um sie herum, die aus deren Code erst Produkte macht. Dolly Parton, die in der “sing einen schönen Song”-Ebene arbeitet, benötigt ebenfalls eine riesige Implementierungs-Ebene, um Platten zu pressen, Konzerthallen zu buchen, Tickets zu verkaufen, das Audio-Equipment aufzubauen, die Platten zu bewerben und die Einnahmen zu zählen.

Jede erfolgreiche Softwarefirma besteht aus einer dünnen Schicht softwareproduzierender Entwickler, verteilt auf die Spitze einer großen, abstrakten, administrativen Organisation.

Die Entwicklungs-Abstraktionsebene hat oberste Priorität.
Die Abstraktion existiert nur zu einem Zweck: Erzeuge die Illusion, dass die tägliche Arbeit der Programmierer (Code designen, codieren, einchecken, debuggen etc.) alles ist, was notwendig ist, um Softwareprodukte zu erstellen und zu verkaufen. Was mich zum wichtigsten Punkt in diesem Essay bringt:

Die oberste Priorität für Sie als Manager eines Softwareteams ist der Aufbau der Entwicklungs-Abstraktionsebene.

Die meisten frischgebackenen Softwaremanager übersehen diesen Punkt. Sie denken weiterhin im alten “Befehlen-und-Besiegen”-Managementmodell, welches sie aus Hollywoodfilmen gelernt haben.

Genau wie in "command and conquer" finden die Manager-Schrägstrich-Anführer heraus, wohin sich das Geschäft entwickeln wird, dann geben sie entsprechende Befehle an ihre Leutnants, um die Firma in diese Richtung zu bewegen. Die Leutnants wiederum teilen die Aufgaben in kleinere Bruchstücke auf und befehlen ihren Untergebenen, diese zu implementieren. Das setzt sich durch das gesamte Organigramm hindurch fort, bis - eventuell - jemand am Fuß tatsächlich etwas Arbeit verrichtet. In diesem Modell ist der Programmierer ein Rädchen im Getriebe, ein Typist, der einen Teil der Management-Befehle ausführt.

Sie denken im alten Command-And-Conquer - Modell
Einige Firmen funktionieren nach diesem Prinzip. Man kann schnell sagen, wenn man es mit einer solchen Firma zu tun hat, weil die Person, mit der Sie gerade reden, etwas Ärgerliches und Sinnloses tut und sie wissen es selbst und vielleicht sind sie sogar darüber besorgt, aber es gibt nichts, was sie tun könnten. Es ist die Fluggesellschaft, die einen Millionen-Meilen-Kunden verliert, weil sie sich weigert, sein nicht umtauschbares Ticket doch umzutauschen, damit er zu einem familiären Notfall nach Hause fliegen kann. Es ist dieser ISP, dessen Service mehr down als up ist, und wenn Sie ihre Geschäftsbeziehung mit ihm beenden, werden sie trotzdem nicht müde, Rechnungen und Rechnungen zu schicken. Aber wenn Sie sich beschweren wollen, müssen Sie eine kostenpflichtige Nummer anrufen und verreisen eine Stunde in der Warteschleife. Trotzdem weigern sie sich, das zu viel eingetriebene Geld zurückzuzahlen, bis Sie einen Blog über diese Reaktion starten. Es ist dieser Detroiter Autohersteller, der lange vergessen hat, wie man Autos baut, die die Leute kaufen wollen, stattdessen von Marketingstrategie zu Marketingstrategie schlingert, als ob der einzige Grund, warum die Leute die beschissenen Autos nicht kaufen wollen, der zu geringe Rabatt wäre.

Genug.

Vergiß es. Das Kommandohierarchie-System wurde ausprobiert und es schien in den 1920ern eine Zeitlang zu funktionieren, im Wettbewerb gegen Hausierer und fliegende Händler. Es taugt nichts für das 21. Jahrhundert. Für Softwarefirmen wird ein anderes Modell benötigt.

In einer Softwarefirma hat die oberste Priorität für das Management die Erzeugung dieser Abstraktion für die Programmierer zu sein.

Wenn ein Programmierer sich irgendwo Sorgen um seinen kaputten Stuhl macht oder in der Warteschleife der Dell-Bestellhotline festhängt, ist die Abstraktion leckgeschlagen.

Wenn ein Programmierer sich Sorgen um seinen kaputten Stuhl macht ist die Abstraktion leckgeschlagen
Stellen Sie sich Ihre Entwicklungs-Abstraktionsebene als große, schöne Yacht mit irrsinnig starken Motoren vor. Sie ist unfehlbar gewartet. Wohlschmeckende Speisen werden wie am Schnürchen serviert. Die Prunkzimmer haben zweimal täglich Zimmermädchenservice. Die Navigationskarten sind immer aktuell. Sowohl GPS als auch Radar arbeiten perfekt und wenn sie kaputtgehen, ist unter Deck Ersatz vorrätig. Sie stehen auf der Brücke, ihre Programmierer denken wirklich nur an Geschwindigkeit, Richtung und ob man Thunfisch oder Lachs zu Mittag essen sollte. In der Zwischenzeit schleicht ein großes, professionelles Team in gestärkten weißen Uniformen unter Deck umher, hält alles am Laufen, füllt die Treibstofftanks, kratzt Seepocken ab, bügelt die Servietten. Das Support-Personal weiß, was zu tun ist, sie bekommen ihre Anweisungen von einem alten Seebären, welcher immer ein wenig in die eine oder andere Richtung nickt, um die gesamte Symphonie zu koordinieren. Die Programmierer können daher alles bezüglich der Yacht wegabstrahieren - außer Geschwindigkeit, Richtung und was sie zum Mittagessen wollen.

Management in einer Softwarefirma ist in erster Linie verantwortlich für die Erzeugung von Abstraktionen für Programmierer. Wir bauen die Yacht, wir dienen der Yacht, wir sind die Yacht, aber wir steuern die Yacht nicht. Alles, was wir tun, dient am Ende der wasserdichten Abstraktion für die Programmierer, damit diese großartigen Code erstellen können und damit dieser Code in die Hände der Kunden gelangt, die davon einen Nutzen haben.

Für die Entwickler muß das alles wegabstrahiert werden.
Programmierer brauchen ein Subversion-Repository. Ein Subversion-Repository zu bekommen heißt, Sie brauchen ein Netzwerk und einen Server, der gekauft, installiert, gebackupt und mit einer USP abgesichert werden muß. Und dieser Server erzeugt eine Menge Hitze, was bedeutet, er muß sich in einem Raum mit Extra-Klimaanlage befinden; diese Klimaanlage benötigt einen Durchbruch nach außen, was die Installation eines 80-Pfund-Ventilators an der Außenseite des Gebäudes bedeutet, was den Eigentümer nervös macht, deshalb schicken sie ihren Ingenieur vorbei, der die Position des Ventilators aushandeln soll (Entscheidung: an die Außenseite, hier im 18. Stock, an der am meisten lästigsten Stelle) und die Rechtsanwälte werden involviert, weil wir unseren Erstgeborenen hergeben müssen, um die Erlaubnis zu bekommen, dann taucht der Klimaanlageninstallateur auf, mit einer Sicherheitsausrüstung, die ganz gut in eine Barbie-Puppenstube passen würde, was wiederum unseren Konstrukteur nervös macht und er erlaubt ihm nicht, an der Außenwand des 18. Stocks herumzuturnen - gekleidet in einen Mattel-Gurt aus ½-zölligem, pinkem Plastik - ich schwöre bei Gott, es könnte Disko-Barbies Gürtel sein -, und irgendjemand muß den Verwalter wieder anrufen, damit er sich das ansieht, und warum zur Hölle muß man erst 12 Wochen in ein Konstruktionsprojekt investieren, um plötzlich zu bemerken, dass eine weitere Vertragsergänzung benötigt wird für diese gottverdammte Klimaanlage, über die sie schon vor Weihnachten Bescheid gewußt haben und sie haben es nur gerade herausgefunden und wenn ihre Programmierer daran nur eine Minute verschwenden müssen, ist das eine Minute zuviel.

Für die Softwareentwickler in Ihrem Team muß all das wegabstrahiert werden, so wie das Eingeben von SVN COMMIT an der Kommandozeile.

Das ist der Grund, warum Sie ein Management haben.

Es ist für all den Kram, den keine Firma vermeiden kann, aber wenn sich die Programmierer darum kümmern müssen, tja, hat das Management einen Fehler gemacht, auf diesselbe Weise wie die 100-Fuß-Yacht nicht funktioniert, wenn der Millionär und Eigentümer in den Maschinenraum gehen muß, um, ähem... die Maschine einzubauen.

Sie haben ihre typische Softwarefirma mit Hilfe von Ex-Softwareverkäufern gegründet, solche, bei denen alles nur verkaufen - verkaufen - verkaufen ist, und wo alle nur existieren, um mehr zu verkaufen. Diese Firmen können in freier Wildbahn identifiziert werden, weil sie nur Version 1.0 entwickelt haben (irgendwie) und dann komplett das Interesse daran verloren, neue Software zu entwickeln. Das Entwicklungsteam ist ausgehungert oder nicht existent, weil es keinem in den Sinn kommt, Version 2.0 zu entwickeln.....alles, was das Management weiß, ist wie man den Verkauf steigert.

Das andere Extrem sind Firmen, gegründet von Ex-Programmierern. Diese Firmen sind schwerer zu finden, weil sie sich in den meisten Fällen still verhalten, irgendwo in einer Dachkammer Code polieren, den nie jemand findet, und so versinken sie still in Vergessenheit kurz nach dem “Großen Umschreiben in Ruby ” in ihren weltverbessernden Refactoring-Code, Code der nur irgendwie von “den Leuten” unbeachtet bleibt.

Beide Firmen können leicht vernichtet werden von einer Firma, die von Programmierern angetrieben ist und organisiert ist, um Programmierer in den Fahrersitz zu setzen und außerdem eine exzellente Abstraktion besitzt, die all die harte Arbeit unter Deck in Produkte verwandelt.

Die römische Armee hatte vier Bedienstete pro Soldat
Ein Programmierer ist am produktivsten in einem ruhigen Büro, mit einem großartigen Computer, unbegrenzten Getränken, einer Umgebungstemperatur zwischen 20 bis 22 °C, kein Spiegeln auf dem Bildschirm, ein Sessel, so bequem, dass man ihn kaum spürt, ein Administrator, der die Post bringt und der Handbücher und Literatur bestellt, einen System-Administrator, der Internet so verfügbar wie Sauerstoff macht, einen Tester, der auch die Bugs findet, die man kaum sehen kann, einen Grafiker, der die Programmoberfläche wunderschön designt, ein Team aus Marketing-Leuten, die die Massen heiß auf das Produkt machen, ein Team aus Verkäufern, um sicherzustellen, dass die Massen diese Produkte bekommen können, ein paar geduldige Support-Heilige, die den Kunden helfen, das Produkt zum Laufen zu bekommen und den Programmierern helfen, die Probleme zu finden, die Auslöser für die Supportanrufe sind, und ungefähr ein Dutzend ander unterstützende und administrative Funktionen, die sich in einer typischen Firma zu etwa 80 % der Lohnliste summieren. Es ist kein Zufall, dass die römische Armee ein Verhältnis von vier Bediensteten pro Soldat hatte. Das keine Dekadenz. In modernen Armeen liegt es etwas bei 7 : 1 (Hier etwas, was mich Pradeep Singh heute lehrte: Wenn nur 20 % Ihrer Angestellten Programmierer sind und Sie können 50 % des Gehaltes sparen, wenn sie die Programmierung nach Indien outsourcen, tja, wieviel Wettbewerbsvorteile werden Sie aus diesen 10 % Einsparung wirklich ziehen?)

Die primäre Verantwortung des Managements ist es, eine Illusion zu erzeugen, dass eine Softwarefirma betrieben werden kann, indem man Code schreibt, weil es das ist, was Programmierer tun. Auch wenn es großartig wäre, wenn Programierer auch tolle Verkäufer, Grafiker, System-Administratoren und Köche wären, es ist unrealistisch. Wie der Versuch, ein Schwein das Singen zu lehren, verschwenden Sie Ihre Zeit und gehen dem Schwein auf die Nerven.

Microsoft ist so gut darin, dies Abstraktion zu erzeugen, dass es Ehemaligen regelmäßig schwer fällt, eine Firma zu starten. Sie können einfach nicht glauben, wie viel unter Deck vorgeht und sie haben keine Ahnung, wie man das reproduziert.

Niemand erwartet, dass Dolly Parton weiß, wie man ein Mikrofon einstöpselt. Es steht eine unglaubliche Infrastruktur aus Managern, Musikern, Aufnahmetechnikern, Plattenfirmen, Roadies, Friseuren und Publizisten hinter ihr, die existieren, um die Abstraktion zu erzeugen: Wenn sie singt, ist das alles, was nötig ist, damit Millionen Leute ihren Song hören können. Das gesamt Personal und Management, dass Dolly Parton möglich macht, erledigt seinen Job am besten, wenn sie die perfekte Abstraktion erzeugen.: Die perfekteste Illusion, dass Dolly für uns singt. Es ist ihr Song - wenn Du ihr auf Deinem iPod zuhörst, ist da eine riesige Infrastruktur, die das möglich macht, aber das Allerbeste, was diese Infrastruktur tun kann, ist, komplett zu verschwinden. Erzeugen Sie eine wasserdichte Abstraktion, dass Dolly Parton für uns ganz persönlich singt.