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.
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.
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 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.
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.
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 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 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.