Homepage Carsten von Olnhausen Grafik Gelb
Entwicklung
ASP.net ab 2009
Arbeitsbereiche
Private Projekte
Erfahrung

Gedanken: optimaler Arbeitsplatz, optimales Arbeitszeitmodel für Softwareentwickler


Erfahrungen Arbeitsplatz als Softwareentwickler


Rückblickend auf die Jobs in meinen Leben kommt da schon einiges zusammen. Jeder Job hat seine Licht- und Schatten Seiten. Arbeitsbedingungen entwickelten sich im Laufe der Jahre. Wie sollte ein Arbeitsplatz für einen kreativen Künstler in der Software Branche aussehen? Ziel ist hier nicht, einen wundervollen Arbeitsplatz zu beschreiben der nur dem Arbeitnehmer Freude bereitet, nein, ich will hier darauf hinaus, ein optimales Umfeld zu beschreiben. Ein solches Umfeld führt bei einem verantwortungsvollen Arbeitnehmer einfach zu den besten Leistungen, wenn dieser sich wohl fühlt und daher Freude an der Arbeit hat. Freude an der Arbeit ist eine der günstigsten Motivationen, die man sich nur vorstellen kann. Welche Firma wünscht sich nicht hochmotivierte erfolgreiche Mitarbeiter?

Anmerkung, Fließband


Es geht hier nicht um Arbeiten die man einfach so beschreiben kann:

Teil einlegen, Knopf drücken, Maschine arbeitet, Teil entfernen und weiter von vorne.
oder
Vorgänge die zwar komplexer sind, aber doch immer wieder nach Schema F abzuarbeiten sind.
oder
Support Mitarbeiter, welcher Fragen eines Kunden am Telefon beantworten soll.

Hier gibt es wenig bis kaum Möglichkeiten durch die Gestaltung des Arbeitsplatzes die Mitarbeiter zusätzlich zu motivieren. In einem solchen Job ist Kreativität und den Kopf frei zu haben, nicht eine der wichtigsten Voraussetzungen um besondere Leistungen abliefern zu können. Auch findet man in diesen Job selten Mitarbeiter, deren besondere Eigenschaft kreatives Schaffen ist. Bei solchen Jobs sind andere Qualitäten gefragt, die ich nicht habe, aber doch bewundere. Aber darum geht es bei diesen Gedanken nicht.

Einsetzen der Mitarbeiter, ihren Vorstellungen und Eignungen entsprechend.


Jeder Kollege mit dem ich in den vergangenen Jahre zu tun hatte, war erst mal ein Mensch. Menschen sind nun mal keine Maschinen, sie funktionieren am besten, wenn man sie da einsetzt, wo sie ihre Begabungen und Vorlieben am besten umsetzen können.
Nicht immer ist das möglich, immer wieder müssen auch Aufgaben bewältig werden, die eben keiner mag. Aber wenn es möglich ist, arbeitet ein Kollege erheblich effektiver und mit mehr Spaß an der Sache, wenn man auf seine Persönlichkeit Rücksicht nimmt.

Motivation, Förderung der Produktivität


Eine positive Stimmung innerhalb des Teams ist immer förderlich für die Ergebnisse. Jemand der sich auf den Tag freut ist motiviert. Wenn man sich den ganzen Tag nur den Feierabend herbeisehnt, leidet einfach die Arbeitsleistung. Ein gewisser Zeitdruck herrscht immer, es ist nur die Frage wie man damit umgeht.

Arbeitszeitmodell


Als Softwareentwickler folgt man nicht einen Schema F. Mag sein, dass es auch Bereiche gegeben hat, in denen alles vorher feststand und man einfach nach alt hergebrachten festen Regeln Lösungen implementieren konnte. Aber in meinen Jobs war das eher die Ausnahme. Ich habe in den meisten Fällen mit den Aufgaben zu tun, die neue und kreative Lösungen fordern. Dazu muss man eben den Kopf frei haben und den Tunnel nutzen. Der Tunnel, ein Begriff den ein Kollege von mir prägte, man ist völlig losgelöst von der Umgebung, hat sich voll auf die Aufgabe eingestellt und erarbeitet eine Lösung. Wenn man einen Home Run hat, es einfach läuft, die Ideen einfach so aus einen heraus sprudeln, dann ist es am effektivsten. Leider klappt so etwas bei den Menschen die ich kenne, nicht auf Knopfdruck.

8:00 Uhr Kreativität und Genialität ON
17:00 Uhr Kreativität und Genialität OFF

Ja so einen Arbeitsplatz hatte ich auch einmal..., das hatte man nicht verstanden wie Softwareentwickler tickt.

bad days...


Es gibt auch Tage, an denen genau das Gegenteil passiert. Man sieht den Wald vor lauter Bäumen einfach nicht mehr. Tage an denen man besser keinen Code produziert, denn was da herauskommt verschlimmert meistens das Programm anstelle es zu verbessern. An solchen Tagen muss man einfach Pause machen können, oder einfach mal eine Zeitlang etwas anderes machen. Rasen mähen, ne runde Motorrad fahren, Spazieren gehen oder was auch immer einen auf andere Gedanken bringt. Danach ist die Idee oft da und man kann sich entspannt und neu motiviert wieder an die Lösung der Aufgabe machen.

sehr lange Tage und der Morgen danach


Es mag ja sein, das es Arbeitszeitgesetze sehr zu recht gibt, aber wenn man frei entscheiden kann, sind diese hin und wieder auch zu unflexibel. In einer Home Run Phase im Tunnel, zählt keine Arbeitszeitreglung. Wenn ich nach 8 Stunden endlich den Punkt habe, dann wird durchgezogen. Die 6 Stunden danach, haben oft die geilsten Lösungen geliefert. Oder man hat irgendwann aufgehört, weil man einfach nichts mehr zustande gebracht hat. Irgendwann mitten in der Nacht wacht man auf und das Unterbewusstsein hat die Lösung geliefert. Also nachts um 1:00 Uhr an den Rechner und codieren bis einem irgendwann im Laufe des Vormittages die Augen zufallen. Alles Erfahrungen der vergangenen Jahre.

Kreative Phasen nutzen


Im Laufe der Zeit hatte ich mit jedem meiner Chefs eine Absprache, solche Phasen zu nutzen, denn die Ergebnisse sprachen eindeutig für sich. So was geht natürlich nur mit viel Vertrauen, klar kommen da immense Stunden zusammen. Aber man muss so etwas einfach aus einen anderen Blickwinkel betrachten, eine kreative Leistung wie Softwareentwicklung kann man nicht auf beliebig viele Mitarbeiter aufteilen. Ist ein Produkt mal fertig und komplett definiert, kann man Teilbereich identifizieren, Aufgaben genau definieren und diese dann mehrere Entwickler abarbeiten lassen. Im kreativen Prozess auf der Suche nach dem Algorithmus klappt das aber nur mit erheblichem Aufwand.

Warum sollte ein Softwareentwickler "Überstunden machen"


Aus einen ganz einfachen Grund. Ich zum Beispiel habe an einem umfangreichen Projekt mit einem Team zusammen gearbeitet. Meine Aufgabe war zu Anfang die Oberfläche, die ganzen Masken zur Erfassung der Stammdaten. Somit erarbeitete ich mir im Laufe der Zeit die Zusammenhänge welche Einstellung und Optionen das Produkt hatte.
Ebenfalls erarbeitete ich einen Leitstand welcher die Sicht auf die Ergebnisse aller Daten für den Anwender visualisierte. Dieses Wissen um die Business Logik und die Zusammenhänge des Produktes war die Grundvoraussetzung um einen anderen wichtigen Bestandteil der Business Logik zu implementieren.
Es wurde ein Planungswerkzeug benötigt das sämtliche Stammdaten berücksichtigen musste um die Ressourcen zu verplanen. Hätte diese Arbeit ein weiterer Entwickler durchgeführt, hätte dieser all das Wissen sich erst mal erarbeiten müssen. Wenn nun Änderungen oder Erweiterungen erforderlich würden, müsste man diese erst mal im Team absprechen und durchplanen. Klar, macht es einer wird das auch im Team besprochen, aber im Kopf sind alle Voraussetzungen vorhanden, die Zusammenhänge zu erkennen und direkt Lösungen zu kennen. Ganz zu schweigen, von der wichtigsten Sache.
Wenn man nun die Business Logik kennt und versteht, kann man objektorientiert Ansätze umsetzen die in mehreren Bereichen parallel genutzt werden können. Da nun mal die Arbeitszeit endlich ist, dauert das ganze halt recht lange. Ist einer der Mitarbeiter bereit, sein Wissen in mehreren Bereichen des Produktes durch Überstunden gewinnbringend einzusetzen, können in erheblich geringerer Zeit große Vorschritte gemacht werden.

Der große Benefiz von freiwilligen Überstunden:


Das Wissen eines Softwareentwicklers kann somit übergreifend eingesetzt werden. Kollegen die bereit sind, wenn sie Lust haben außerhalb der normalen Arbeitszeit weitere Aufgaben zu übernehmen, sparen eine ganze Menge an Zeit ein, die man aufwenden müsste um weitere Mitarbeiter ins Projekt einzuführen. Das Wissen bleibt im Hause, im Gegensatz zum Einsatz von Mitarbeitern die zweitweise angemietet werden, oder schlimmer noch wenn man wichtige Komponenten außer Haus entwickelt lässt. Auch ist klar, dass ein Kollege aus dem Team die Codierungsregeln kennt, sich an diese automatisch hält. Strukturen wie man innerhalb des Projektes codiert sind somit eingehalten und der Code ist für die Kollegen im Team besser nachzuvollziehen.

Extrem Programming, one man show


Ja, jetzt wird so mach einer den Kopf schütteln. Natürlich birgt ein solcher Ansatz extreme Gefahren, vor denen ich immer wieder gewarnt habe. Wenn man nach einer Phase einer solchen Entwicklung nicht mindestens einen Kollegen einweiht, ist eine große Menge Wissen nur im Kopf eines Softwareentwicklers vorhanden. Leider wurden diese Warnungen nicht immer verstanden.

Wenn die Möglichkeiten fehlen...


Wenn man warnt und auf offene Ohren stößt, aber eben die finanziellen Möglichkeiten der Firma es einfach nicht erlauben, zumindest zwei Mann zu beschäftigen, die sich gegenseitig ersetzen können. So ist es nun immer mal wieder gewesen, einzig und alleine das gute Verhältnis zwischen Firma und Mitarbeiter, die Verantwortung dem Produkt und den Kunden gegenüber, hat dann, wenn es eng wurde, die Situation gerettet. Klappt aber halt nur wenn sich die Firma solcher Dinge bewusst ist und weiß dass das Kapital der Firma eben die Mitarbeiter sind. Hilft aber nur solang man noch verfügbar ist, jeder kann einen Unfall haben und dann war es das. Es geht halt nicht immer so wie es gehen sollte, dann muss man halt auf Risiko Spielen und hofft, dass der Kollege lange lebt und hoffentlich die Firma nicht verlässt.

Code von ehemaligen Kollegen,


Ja, auch die andere Seite kenne ich, wochenlang habe ich mich in Programme von ehemaligen Kollegen eingearbeitet um doch noch die Wartung oder Erweiterung eines Programmes hinzubekommen. Hin und wieder mit vertretbarem Zeitaufwand, in anderen Fällen war das neue implementieren der Anwendung einfacher und vor allem günstiger. Aber das war nicht immer vorher abzusehen. Da wurde unglaublich Zeit und Geld verbrannt, hätte man vorher den Aufwand abschätzen können, wäre eine neue Implementierung sinnvoller gewesen. Kaum einer dieser Aufgaben war in Ansicht der Termine in der normalen Arbeitszeit zu bewältigen.

Flexibilität, ein wichtiges Gut


Flexibilität ist einfach ein wichtiges Gut, starre Arbeitszeitregelungen helfen hier nicht wirklich weiter. Wenn man hier offene und für beide Seiten ausgeglichene Regelungen findet, ist das zum Wohle aller. Der Kunde hat nun mal auch Probleme wenn man nicht im Büro ist oder gerade im Urlaub. Eine gewisse Zeit macht man das ja mit, wenn man sich aber irgendwann ausgenutzt fühlt, läuft etwas falsch. Arbeitszeit ist nun mal zu entgelten. Ich kann mich sehr wohl mit einem 1 : 1 Stundenpool anfreunden, aber wenn man gute und ehrliche Arbeit leistet, so ist diese auch 1 : 1 zu entlohnen.

der 8:00 - 17:00 Uhr "Softwareentwickler"


Ja, auch diese gibt es. Das Gehirn wird nur in dieser Zeit eingeschaltet. Man macht einfach einen Job. Was man geschafft bekommt, ist egal, es dauert eben dann länger. Genau diese Sorte Arbeitnehmer haben dann aber genialerweise immer das Wissen wie lange sie für eine Aufgabe brauchen. So lange wie der Chef es gerne hätte. Hart, wenn dann Nasen wie ich ehrlich sagen, weiß ich nicht, wie lange es genau dauern wird. Ich werde dann nicht verstanden. Ich kann es eben nur abschätzen, vor allem wenn ich nur eine grobe Vorgabe bekommen, was eigentlich zu tun ist. Der tolle daran ist nur, wenn diese Art von Kollege dann seinen Zeitplan überzieht, ist Gott und die Welt schuld daran. Niemals der Kollege selbst oder seine Zeitschätzung. Um was ich diese Art von Mitarbeitern beneide, ist das geniale Selbstverständnis, sich es so egal sein zu lassen. Deren Stimmung wird nicht getrübt, wenn sie ihre Ziele nicht erreichen, warum auch, der böse Chef ist schuld und man macht nur seinen Job. Stimmt mein Problem, ich habe da halt eine andere Einstellung.

Wie sieht das optimale Arbeitszeitmodel aus?


Recht einfach, extrem flexibel. Basis ist hier erst mal Vertrauen, es zählt was hinterher raus kommt. Man baut einen Stundenpool auf, arbeitet dann so lange wie nötig wenn man gut voran kommt, feiert dann Zeit ab, wenn es eben nicht läuft. Es wird die Zeit genutzt in der man am produktivsten arbeiten kann. Wenn ich nun mal morgens um 4:00 wach werde, fange ich an zu arbeiten. Ins Büro fahre ich wenn es brennt oder wenn der Arbeitsschritt fertig ist. Für jemanden wie mich ist es unabdingbar ein Home Office zu besitzen. Ich kann mir eine Wohnung ohne Büro einfach nicht vorstellen.

Arbeitsplatz


Einfach beschrieben? Sehen sie sich einfach mein Home Office an. Für mich ist Arbeit gleich Hobby von daher bin ich schon seit Jahrzenten extrem gut ausgestattet. Man muss sich wohlfühlen und entspannt vor dem Rechner sitzen können. Ein Stuhl den man selbst für sich ausgewählt hat. Das richtig Klima, zum warm oder zu kalt kann es hier auch nicht sein. Ruhe muss einfach sein, damit man sich im Tunnel gut konzentrieren kann.

Die Hardware das Werkzeug des Softwareentwicklers


Die Hardware ist nun mal das Werkzeug des Softwareentwicklers. Hier kann man vieles falsch machen. Für die Tätigkeiten die ich in den letzten Jahren durchführe, braucht es schon einiges. Mein Rechner ist recht üppig mit Speicher ausgestattet, damit man mehrere virtuelle Rechner problemlos laufen lassen kann. Ein zeitgemäßer Intel 6 Kern Prozessor liefert die Leistung, die man bei Bedarf abrufen kann. Eine Solid-State Drive für Betriebssystem und ein sündhaft teureres Velociraptor Raid 0 System stellen die schnellen Festplatten Zugriffe sicher. Selbstredend eine spezielle Tastatur und eine hochwertige Maus sind angeschlossen. Die Maschine verfügt über 3 Grafikarten an denen 4 von 5 möglichen Monitoren angeschlossen sind. 3 * 28 Zoll Monitore und ein 42 Zoll LCD Fernseher. Als Basis Betriebssystem verwende ich hier Windows 7 Professionell. Daneben steht noch der 2 Kern Vorgänger für Test unter Windows XP. Um als Web-Entwickler vernünftig testen zu können benötigt man mehrere Rechner oder virtuelle Maschinen um die Anwendung in verschiedensten Browser testen zu können.

Warum brauche ich diese Rechenleistung und die vielen großen Bildschirme?


Ganz einfach, die großen Bildschirme ermöglichen mehr Informationen auf einen Blick. Zeit ist einfach Geld, wenn ich lange Fenster umschalten muss, kostet das einfach unnötig Zeit. Rechenleistung und vor allem extrem kurze Zugriffszeiten auf die Festplatten verkürzen einfach die Lade- und Übersetzungszeiten der Entwicklungsumgebung. Der Begriff Turnaround Zeit beschreibt die Zeit die jedes Mal vergeht wenn man nach einer Änderung das Programm aus der Entwicklungsumgebung heraus zum Testen startet. Ich habe rein aus Spaß mal mit gezählt wie oft ich im Laufe eines Arbeitstages diesen Vorgang wiederhole. Je nach Aufgabe die es zu lösen gilt, können da schon 100 Anwendungsstarts zusammen kommen. Unproduktive Zeit die ich demotivierend empfinde, wenn ich auf die Kiste warten muss, unterbricht das meinen Arbeitsablauf.

Entwicklung in der Freizeit


Wenn ich hier in meiner Freizeit programmiere, habe ich keine Zeit zu verschenken. Auf meinem Rechner in der Arbeit kann es schon mal 10 Minuten dauern, bis ich mit der Arbeit beginnen kann. Die Übersetzung und der Start der Anwendung dauern zwischen 30 Sekunden und 1 Minute . Eine unglaubliche lange Zeit, wenn man warten muss. Auf meiner Maschine hier dauert es nur 4 Sekunden. Daher ist es entspannender und erheblich produktiver an dieser Maschine zu arbeiten. Außerdem gibt es Anwendungen wie mein Planungswerkzeug das einige Minuten am Stück arbeiten kann. Wenn man nun etwas debuggen muss und 10 Minuten wartend vor dem Rechner sitzt, ist das gestohlene Zeit. Meine Maschine hier erledigt dieselbe Aufgabe in 6 Minuten, auch noch zu lange, aber schon erheblich besser.

Das Web-Anwendungsmonster


Erschwerend hinzu kommt, das dieses Web-Anwendungsmonster das ich mit am entwickeln bin, eine extreme Menge Daten zu verarbeiten hat. Jede Aktion, jeder Mausklick wird mit Reaktionszeiten belohnt. Um an die zu prüfende Stelle der Anwendung zu gelangen, braucht man somit auf einem langsameren Rechner erheblich länger. Wartezeiten auf dem Rechner verderben mir einfach den Spaß und bremsen meinen Vorwärtsdrang erheblich aus. Da ich unter ständigem Zeitdruck arbeite, benötige ich eben zumindest einen Rechner, der mich hier unterstützt und nicht ausbremst.

Ein Monolog, mit ironischem Anstrich


Ich finde es immer ganz toll, wenn ich privat mehr Geld in meine Hardware (mein Werkzeug) inverstiere, als meine Firma.
<ironie on>
Aber leider muss man damit leben, wenn man fürs rumsitzen und warten bezahlt wird.
Senkt zwar die Entwicklungsleistung muss aber dann wohl so gewollt sein.
<ironie off>


Das "mehr" Leisten


Nun, ein Softwareentwickler der seine Berufung zum Beruf gemacht hat, lässt nun mal nicht locker und hat immer noch das eine oder andere private Projekt laufen. Ob rein zum Spaß oder zur Fortbildung ist dabei Nebensache. Die andere Version, die ich schon äußerst häufig durchgezogen habe, war einfach Funktionen oder Erweiterungen für mein aktuelles Projekt umzusetzen, die meiner Meinung nach zusätzlich oder erheblich früher als geplant gebraucht werden. Klar tut man das aus Spaß oder weil man selbst einfach diese Funktionen benötigt um schneller und effektiver seine Arbeit machen zu können. Oder einfach weil eine Aufgabe so reizvoll ist, dass man sich erlaubt, diese zur Entspannung neben den normalen Alltagsgeschäft umzusetzen.

Diese Besonderheit meiner Person wird schnell erkannten und man freut sich über den zusätzlichen produktiven Mitarbeiter. Es ist gelungen, diese meine Eigenschaft durch zusätzliche Motivation zu nutzen und große Vorteile für Produkt und Firma heraus zu holen.

Man kann einen Softwareentwickler mit einem guten Gehalt alleine nicht halten. Dazu braucht es ein Umfeld in dem man sich weiterentwickeln kann, Perspektiven hat, man merkt dass sich Leistung und Einsatz lohnen, Freiheit vorhanden ist, um freies kreatives Denken zu ermöglichen. Der Spaß und die Freude an den Ergebnissen den Kunden, der Firma und den Mitarbeiter zugutekommen.



Carsten von Olnhausen, im August 2011
Carsten von Olnhausen
66802 Überherrn-Felsberg, Leopoldstrasse 8