Archive zu Kategorie 'Berufsleben'

Vermisst: Hardware-Benchmark für Entwickler

Ein Umstand, der in Unternehmen auf Entscheiderebene außerhalb des IT-Umfelds gerne verdrängt wird: Softwareentwickler sind Spezialisten und benötigen deshalb spezielle Hardware. Wer denkt, dass “Software schreiben” ungefähr mit dem Schreiben von Textdokumenten vergleichbar ist, liegt in etwa so richtig wie jemand, der meint, Autofahren hieße, auf einem Stuhl zu sitzen und beide Füße unregelmäßig auf- und abzubewegen.
Oberflächlich mag der typische Softwareentwickler Quellcode schreiben, was nicht so entfernt vom Schreiben von Textdateien zu sein scheint.

Tatsächlich ist der Quellcodeeditor nur ein Bestandteil von vielen, die die Integrierte Entwicklungsumgebung (“IDE”) eines Entwicklers ausmachen: Damit der Quellcode überhaupt ausgeführt werden kann, muss er kompiliert werden. Bisweilen muss ein Entwickler während der Ausführung des Programms an bestimmten Stellen den Ausführungsfluss Schritt-für-Schritt  überwachen (“debuggen”), wozu die Anwendung in den Arbeitsspeicher geladen werden muss.

Der Quelltext bewegt sich auch nicht im luftleeren Raum: Anwendungen werden in Projekte und Bibliotheken aufgeteilt, häufig handelt es sich um einige hunderte bis tausende Dateien, die gemeinsam kompiliert und in den Arbeitsspeicher geladen werden müssen. Allein das Lesen der Quelltexte und das Erstellen der Kompilate kann bei mittelgroßen Anwendungen mehrere Minuten, bei größeren sogar viele Stunden andauern.

Auch wenn IDEs inkrementelles Kompilieren ermöglichen, wird des öfteren ein “Build” (alle Kompilate und dazugehörige Dateien) wieder gelöscht und vollständig neu erstellt.Zudem sind Softwareanwendungen im Unternehmensumfeld verteilt und kommunizieren mit Datenbanken, anderen Systemen und/oder der im Unternehmen eingesetzten Middleware.

Normalerweise ist der Entwickler bestrebt, auf seinem Rechner die Bedingungen, unter denen seine Anwendung später ausgeführt werden soll, en miniature nachzubilden: Auf diese Weise ist er unabhängig von Wartezeiten und kann ggf. auch offline (z.B. im Zug) arbeiten.

Was deshalb wirklich entscheidend für einen Entwicklerrechner?

Die Leistung:

Ein Softwareentwickler benötigt ein für seine Ansprüche äußerst leistungsfähiges System, was sich insbesondere auf

a) die Festplatte
b)
den Hauptspeicher
c)
die CPU und
d)
Grafikkarte + Display bezieht.

Die Festplatte ist deshalb so wichtig, weil zum Erstellen von “Builds” oft tausende Dateien gelesen und geschrieben werden. Normalerweise liegt in langsamen Festplatten der Schwachpunkt von Entwicklersystemen (abgesehen von Virenscanner, die die Buildverzeichnisse überwachen). Sinnvoll können hier Solid State Discs (flash-basiert) oder RAID-Systeme (RAID 0 oder 0+1, aber nicht 5) mit SATA oder SAS sein, die den Datendurchsatz erhöhen.

Der Hauptspeicher muss sehr großzügig dimensioniert sein: Zur Zeit sollte ein Rechner für die Anwendungsentwicklung verteilter Systeme über mindestens 8 GByte Hauptspeicher verfügen, besser wäre gleich das Doppelte (einige Notebook-Workstations bieten mittlerweile 16 GByte an).

Softwareseitig bedingt dies den Einsatz von 64-Bit-Betriebssystemen.Wird mit virtuellen Maschinen gearbeitet (was immer mehr zunimmt), ist ein Mehrprozessor- wenigstens ein Multicoresystem sinnvoll. Um die Fülle an Informationen einer IDE wie Eclipse, Netbeans oder Qt auf einen Bildschirm zu bekommen, empfiehlt sich zudem ein hochauflösendes Display und eine entsprechende Grafikkarte.

Wie separat dargelegt, macht sich eine Leistungssteigerung bei Entwicklerrechnern schnell bezahlt. Um Entscheidern (und nach besserer Hardware strebenden Entwicklern) eine objektivere Entscheidungsgrundlage an die Hand zu geben, würde ich mir einen Benchmark wünschen, der

a) die Leistungsfähigkeit eines Systems hinsichtlich der o.a. Kriterien für einen Entwicklerrechner misst,
b)
kostenlos verfügbar,
c)
plattformunabhängig und
d)
einfach bedienbar ist.

Ein Benchmark der mit Referenzprojekten arbeitet, der gängige IDEs startet, auf denen kleine, mittelgroße und große Referenzprojekte mit der IDE erstellt werden, wobei dies noch mit parallel laufenden Middlewareservern kombiniert werden sollte.

Falls jemandem ein solcher Benchmark bekannt ist, wäre ich dankbar für einen Hinweis ()! Interessenten, die ein derartiges Projekt auf die Beine stellen möchten, können mich gerne ansprechen.

Der wahre Preis billiger Hardware

In Unternehmen verdrängen Entscheider außerhalb des IT-Umfelds gerne, dass Softwareentwickler Spezialisten sind und deshalb spezielle Hardware benötigen. Wer denkt, dass “Software schreiben” ungefähr mit dem Schreiben von Textdokumenten vergleichbar ist, liegt in etwa so richtig wie jemand, der meint, Autofahren hieße, auf einem Stuhl zu sitzen und beide Füße unregelmäßig auf- und abzubewegen.

Tatsächlich ist das Schreiben von Quellcode nur die Spitze des Eisbergs: Auf dem Entwicklerrechner wird dieser Quellcode nicht nur zu ausführbarer Software gemacht, sondern häufig eine vollständige Simulation der Unternehmensanwendungen ausgeführt, in deren Umgebung die Software verwendet werden soll. Also Datenbanken, Webserver, E-Mail-Server etc. etc.

Für den Entwicklerrechner bedeutet dies, dass er um ein Vielfaches leistungsfähiger sein muss als die Rechner, die man zur Erfüllung von Büroaufgaben verwendet.

Im Gegensatz zu Joel Spolsky statten viele Unternehmen ihre Softwareentwickler aber mit billiger Standardbürohardware aus. Meist muss schon die Aufrüstung des Arbeitsspeichers gesondert beantragt werden.

Was bedeutet das für die Entwickler? Vor allem müssen sie längere Wartezeiten in Kauf nehmen: Beim Kompilieren, beim Debuggen und Testen ihrer Anwendungen sowie beim Starten der IDE.

Was bedeutet das für die Unternehmen? Berechnen wir das einmal an einem Beispiel (aus meiner Praxis):

Die Entwickler eines größeren Finanzdienstleisters arbeiten mit Eclipse, die Anwendung wird in der Programmiersprache Java erstellt und ist in 10 voneinander abhängige Projekte (genauer: Maven-Module) gegliedert. Insgesamt handelt es sich um über viertausend Dateien, die kompiliert werden müssen (zuzügl. einiger Konfigurationsdateien).

Der durchschnittliche Rechner der Entwickler benötigt für das Erstellen eines Builds eine knappe halbe Stunde (mit Virenscanner über zweieinhalb Stunden).

In dieser Zeit können die Entwickler zumindest nicht programmieren, häufig nicht einmal mehr E-Mails lesen, weshalb der Arbeitsalltag so ausgerichtet ist, dass vollständige Builds zum einen vermieden und zum anderen auf den Morgen (Rechnerstart – Zeit für einen Kaffee) und die Mittagspause verlegt werden.

Im Team wird verteilt gearbeitet und regelmäßig integriert (d.h., Entwickler, die an Modul A arbeiten, stellen ihre Änderungen zur Verfügung, Entwickler, die an Modul B arbeiten, holen sich die aktualisierten Quelltexte von der Versionsverwaltung, was häufiger zur Folge hat, dass ein vollständiges Build erzeugt werden muss), wodurch zwei vollständige Builds am Tag die Regel sind.

Gehen wir vorsichtig von einem Durchschnittsgehalt von 60 T EUR für einen Entwickler mit mehr als sechs Jahren Berufserfahrung aus, ergeben sich folgende Kosten (Berechnungsgrundlage 223 Arbeitstage: 365 Kalendertage abzügl. Wochenenden (104 Tage), Feiertage (8 Tage) und Urlaub (30 Tage), 40-Stundenwoche):

Stundensatz
60.000 / 223 / 8 = 33,62 EUR

Auf zwei Builds zu je einer knappen halben Stunde am Tag bezogen bedeutete dies im ungünstigsten Fall (die Entwickler warten einfach nur, während das Build erstellt wird und sind ansonsten nicht weiter produktiv) jährliche Kosten von

223 x 33,62 EUR = 7.497,26 EUR pro Entwickler und

16 x 7.497,26 EUR = 119.956,16 EUR für das aus sechzehn Personen bestehende Team.

Die Verdopplung des Arbeitsspeichers und der Einbau schnellerer Festplatten bewirkte, dass ein vollständiges Build in gut 15 Minuten erstellt werden konnte.

Vergleicht man die Kosten für die Aufrüstung pro PC (450,- EUR für die Hardware, etwa 150,- EUR Personalkosten [Einbau durch Supporttechniker, Procurement] ) sieht man sofort, dass sich selbst bei einem geringeren Produktivitätsausfall als 100 % eine Investition in bessere Hardware schnell amortisiert:

Ersparnis rein rechnerisch:
119.956,16 EUR / 2* = 59978,08 EUR abzüglich 9.600,- EUR Hardwarekosten = 50.378,08 EUR

*Halbierung der Kompilierzeit

(Aufs Jahr bezogen wird somit eine Aufrüstung rentabel, sobald die festgestellte Produktivitätseinbuße bei über 8% liegt, was in jedem Fall gegeben ist.).

Weiterhin ist interessant, dass dieselben Rechner auch allen extenen Beratern zur Verfügung gestellt wurden. Deren Stundensatz lag dabei weitaus höher, wodurch sich die Investition noch schneller amortisierte.

Positive Seiteneffekte des Einsatzes leistungsfähigerer Entwicklerrechner sind zudem verbessertes Time-To-Market (offensichtlich) sowie ein besseres Betriebsklima (lange Buildzeiten frustrieren Entwickler, schnelle Rechner hingegen erfreuen sie).