52 Punkte von spilist2 2023-08-19 | 1 Kommentare | Auf WhatsApp teilen

Dies ist ein Beitrag, der als Teil 1 des auf der Infcon 2023 vorgestellten Vortrags Praktischer Leitfaden zur Verbesserung von Leistung und Kompetenzen eines Junior-Frontend-Engineers verstanden werden kann. Man kann ihn auch als geistigen Nachfolger von Frontend-Engineer-Karriere-Roadmap: Drei Spezialisierungspfade für Juniors sehen, den ich früher schon einmal bei GeekNews gepostet hatte.


Was zeichnet einen hervorragenden Engineer aus?

Li Paul Luo schlug in der 2015 erschienenen Arbeit <What Makes a Great Software Engineer?> fünf wesentliche Voraussetzungen vor, die einen hervorragenden Engineer ausmachen. Die Forschungsmethode war wie folgt:

  • Analyse zahlreicher bestehender Studien zu Ausbildung, Fähigkeiten und Verhalten, die Entwickler benötigen
  • Tiefeninterviews mit 59 Microsoft-Entwicklern auf Level 2 oder höher, also Entwicklern, deren Fähigkeiten in gewissem Maß anerkannt waren. Daraus wurden 54 Kandidaten für persönliche Merkmale abgeleitet, die Entwickler haben sollten, etwa Persönlichkeit, Wissen oder Verhalten
  • Umfrage unter mehr als 2.000 Microsoft-Entwicklern. (Nach einer detaillierten Beschreibung der Merkmale) „Wenn ein erfahrener Entwickler dieses Merkmal nicht hätte, würdest du ihn dann als hervorragenden Entwickler bewerten?“
  • Analyse der Umfrageergebnisse und nachgelagerte Interviews mit den Antwortenden
  • Zusätzliche Interviews mit 40 wichtigen Kollaborationspartnern von Entwicklern auf Basis der Umfrageanalyse und der Follow-up-Interviews, darunter Artists, Content-Planer, Data Scientists, Designer und Elektroingenieure

Ich habe die Reihenfolge und Interpretation der fünf vorgeschlagenen Kernvoraussetzungen leicht verändert und mit meinen eigenen Gedanken ergänzt.

1. Schreibe großartigen Code (Be a competent coder)

Statt „ein kompetenter Coder sein“ ist „großartiger Code“ ein besseres Ziel.

Coding-Skills sind für Juniors die wichtigste Kompetenz. Ab einem gewissen Niveau ist es jedoch effizienter, Energie in den Ausbau anderer Fähigkeiten zu investieren. Dieses „gewisse Niveau“ ist je nach Person und Organisation unterschiedlich.

Ich beurteile die Coding-Fähigkeiten von Juniors anhand folgender Kriterien: „1) eine eigene konsistente Sicht auf Codequalität haben, 2) Code schreiben, der die Kundenanforderungen erfüllt, 3) mit hoher Geschwindigkeit, 4) mit wenigen Bugs und 5) gut lesbar“.

2. Übe evidenzbasierte Entscheidungsfindung (Practice informed decision-making)

Um Entscheidungskompetenz aufzubauen, ist es vorteilhafter, sich auf die Verbesserung des Entscheidungsprozesses statt auf das Ergebnis zu konzentrieren. Das Ergebnis kann sich schließlich unabhängig vom eigenen Willen ergeben.

Evidenzbasiert bedeutet dabei, sich auf Daten zu stützen, sie aber nicht voreingenommen zu interpretieren oder vorschnell Schlussfolgerungen zu ziehen. Vor allem dann, wenn man neue Informationen erhält, sollte man frühere Urteile überdenken, auch wenn es einem nicht gefällt, statt sie zu rationalisieren.

Gerade beim Debugging liegt man meist falsch, wenn man denkt, das Problem liege nicht bei einem selbst, sondern an der Library oder am Browser. Selbst wenn der Browser tatsächlich einmal die Ursache ist, sollte man aufpassen, ähnliche Probleme nicht generell dem Browser zuzuschreiben. Sonst übersieht man womöglich einen kritischen Fehler, der tatsächlich durch einen eigenen Fehler entstanden ist.

Eine Möglichkeit, Vorurteile und vorschnelle Schlüsse zu vermeiden, ist, verschiedene externe Perspektiven offen anzunehmen. Kurz innehalten und betrachten, wie Freunde, Kollegen, Kunden, Wettbewerber oder Vorgesetzte eine Sache interpretieren würden, macht es schwerer, an den eigenen Verzerrungen festzuhalten.

Natürlich fällt es Menschen unter Stress schwer, rational zu handeln. Für Organisationen gilt das ebenso. Deshalb planen kluge Organisationen bewusst Puffer bei Zeit und Ressourcen ein, und kluge Einzelpersonen lernen, Stress etwa durch Meditation zu managen.

Wer evidenzbasierte Entscheidungen im Alltag üben will, braucht viele gute Grundlagen. Es ist hilfreich, ein System aufzubauen, durch das vielfältige und qualitativ hochwertige Informationen laufend in die eigene Umgebung gelangen: Newsletter abonnieren, Teil einer Community sein, an Study Groups teilnehmen und Ähnliches.

3. Hilf Kollegen, effizient Entscheidungen zu treffen (Enable others to make decisions efficiently)

Hervorragende Entwickler teilen Informationen und Erfahrungen, fördern damit das Wachstum ihrer Kollegen, steigern die Produktivität des Teams und helfen der Organisation letztlich, bessere Entscheidungen zu treffen.

Was bedeutet das dann für Juniors? Für Juniors ist es hilfreicher für Kollegen und Organisation, durch Fragen zu wachsen, statt sofort Ergebnisse liefern zu wollen. Überwinde die Angst vor Geringschätzung, Ablehnung und dem Gefühl, anderen zur Last zu fallen, und stelle Fragen mit hohem Kontextanteil. Üblicherweise denkt man, man müsse erst Vertrauen aufbauen, um solche Verletzlichkeit zu zeigen. Tatsächlich zeigen Studien eher das Gegenteil. Wenn Menschen einander ihre Schwächen zeigen und mutig Risiken eingehen, entsteht die Grundlage von Vertrauen oft schneller.

Auch Verletzlichkeit lässt sich gut ausdrücken. Wichtig ist, ausreichend Kontext mitzugeben. Juniors erleben oft Problem A, probieren dann B aus, und wenn darin C nicht funktioniert, fragen sie nur nach C. So bekommt man meist nur sehr kleinteilige Antworten, und selbst mit diesen Antworten wird das eigentliche Problem oft nicht gelöst. Umgekehrt habe ich häufig gesehen, dass C überflüssig wird, sobald A sauber formuliert ist und B sich daraus fast automatisch ergibt.

Um Fragen zu fördern, braucht es eine Organisationskultur, die Verletzlichkeit und Transparenz einen hohen Wert beimisst. Dabei ist die Frage, was in der Organisation als Default gesetzt wird, sehr wichtig, weil Defaults menschliche Wahrnehmung und Verhalten stark beeinflussen.

In dieser Hinsicht sind Public-by-Default-Tools, bei denen man aktiv etwas tun muss, um etwas zu verbergen, wie Slack oder Notion, besser als Private-by-Default-Tools, bei denen man aktiv etwas tun muss, um etwas zu teilen, wie E-Mail oder Google Docs. „Du kannst mich jederzeit ansprechen, nur in diesen Fällen bitte nicht (Do Not Disturb)“ ist besser als „Zu diesen Zeiten kannst du mich frei ansprechen (Open Hours)“.

4. Maximiere den aktuellen Wert deiner Arbeit (Maximize current value of your work)

Von hervorragenden Entwicklern werden sowohl systemisches Denken als auch unmittelbares Handeln verlangt. Systemisches Denken heißt, langfristig zu implementieren, indem man vorhersieht, welche Teile später problematisch werden könnten oder wie sich Anforderungen verändern könnten. Unmittelbares Handeln heißt, nicht in der Analyse stecken zu bleiben, sondern trotz Unsicherheit loszulegen und durch Ausführung Feedback zu gewinnen.

Gerade in Startups ist Letzteres oft vorteilhafter, aber eine extreme Schieflage ist nachteilig. Es ist sinnvoll, schnell zu handeln und sich zugleich Gewohnheiten anzueignen, die schon mit geringem Aufwand viel Nutzen bringen. Ein mikroskopisches Beispiel wäre, selbst einen einzelnen Wert nicht hart zu codieren, sondern in eine Variable auszulagern. Oder statt eines Boolean-Werts einen Mode zu verwenden, wenn es aktuell zwar nur zwei Werte gibt, es sich aber um eine Art von Option handelt, die über eine einzelne Komponente hinausgeht. Ein makroskopisches Beispiel ist die Gewohnheit, vor der Umsetzung zu überlegen, welche Hypothese man eigentlich validieren will und mit welchen Daten man diese Validierung durchführen möchte.

Letztlich wird der Wert der eigenen Arbeit dann maximiert, wenn man aus eigener Entscheidung flexibel zwischen systemischem Denken und unmittelbarem Handeln wechseln kann.

5. Lerne effektiv und kontinuierlich (Continuously learn)

Zu lernen, wie man effektiv lernt, ist der Anfang allen Wachstums. Je früher man damit beginnt, desto besser, denn es ist eine Handlung mit Zinseszinseffekt.

Lernen dient letztlich dazu, das eigene Wissen zu erweitern und das Leben zu verändern. Doch es gibt keine Garantie, dass altes Wissen heute noch gültig ist, deshalb ist ständige Aktualisierung mit neuen Informationen nötig.

Mehr Informationen sind allerdings nicht automatisch besser. Wie bei ungefiltertem Big Data stören manche Informationen nur. Deshalb sollte man den Anteil an „Signal“ statt an ungenauem oder für das eigene Problem irrelevantem „Rauschen“ erhöhen. Gute Signale sind zum Beispiel Einsichten, die Verbindungen zwischen vorhandenem Wissen und einem fachfremden Bereich herstellen, oder Hinweise darauf, dass man unter bestimmten Bedingungen falschliegen könnte.

Effektives Lernen lässt sich so zusammenfassen: „Wie kann ich jeden Tag ein kleines bisschen effektiver wachsen?“ Die Antwort besteht darin, immer wieder 1) herauszufinden, was ich gerade in der Realität jetzt brauche, 2) genau so viel theoretische Grundlage dazu zu lernen, wie nötig ist, und 3) das Gelernte sofort anzuwenden, um durch Selbst-Feedback zu lernen.

Wie findet man aber heraus, was man gerade in der Realität braucht? Man kann Tagebuch schreiben und dabei Probleme entdecken, die im Alltag auftreten, oder versuchen, Tätigkeiten zu verbessern, mit denen man in der letzten Woche viel Zeit verbracht hat. Wer sich etwa auf Jobsuche befindet, nimmt vermutlich oft an Study Groups teil, und es kann hilfreich sein zu erforschen, wie man effektiver in solchen Gruppen lernt. Je häufiger man etwas tut, desto mehr Lerngelegenheiten gibt es und desto größer ist die Verbesserung der Lebensqualität, wenn man es optimiert.

Wie lässt sich das anwenden? – Die Perspektive von Juniors und Seniors

Juniors können diese Ziele einzeln überprüfen, insbesondere die in „großartigen Code schreiben“ und „effektiv und kontinuierlich lernen“ beschriebenen Kenntnisse und Verhaltensweisen, und einschätzen, wie gut sie selbst dazu passen. Danach können sie fehlende Kompetenzen gezielt entwickeln.

Seniors wiederum können diese Punkte für Hiring- und Performance-Evaluierungen nutzen. Man kann sich überlegen, an welchen Signalen sich erkennen lässt, ob Bewerber diese Fähigkeiten ausreichend mitbringen. Ähnlich lässt sich das auch einsetzen, wenn man Juniors anleitet, um ihre Kompetenzen zu steigern.

Außerdem sind diese Kompetenzen auch für andere Rollen ein guter Maßstab, wenn man lediglich „großartigen Code schreiben“ durch die jeweilige fachliche Kernkompetenz ersetzt. Deshalb nutzt XL8 diese Kriterien tatsächlich möglichst konsequent bei Hiring, Onboarding und Feedback, ganz gleich ob für PMs, Designer oder Entwickler, und erzielt damit erhebliche Wirkung.

Worauf man bei der Nutzung achten sollte

Diese fünf Kompetenzen ergänzen sich gegenseitig. Weil sie miteinander verflochten sind, ist es möglicherweise nicht besonders effektiv, nur eine davon isoliert zu fördern. Umgekehrt kann es allerdings auch leichter werden, die anderen besser zu entwickeln, wenn man eine davon stark ausbaut.

Und wie andere Studien auch ist diese Arbeit keine absolute Wahrheit. Natürlich hat sie Grenzen, und man muss auch berücksichtigen, dass sowohl die Interpretation des Paper-Autors als auch meine eigene Interpretation darin enthalten sind.

Da der Titel des Papers „What Makes a Great Software Engineer?“ lautet, könnte man denken, diese fünf Kompetenzen würden ausreichen, um ein hervorragender Entwickler zu werden, also eine hinreichende Bedingung darstellen. Tatsächlich wurde jedoch untersucht: „Wenn das fehlt, kann man ihn nicht als hervorragenden Entwickler bezeichnen“, also eine notwendige Bedingung. Deshalb kann man sie gut als Ziel, Orientierungspunkt oder Zwischenstation nutzen, muss sie aber nicht als endgültiges Ziel betrachten.

Wie lässt sich das anwenden? – Die Perspektive von Frontend-Entwicklern

Um diese fünf Kompetenzen im Kontext der Frontend-Entwicklung zu nutzen, kann man sich folgende Fragen stellen.

  • Was ist großartiger Code im Frontend-Bereich? Wie kann man besseren Code schreiben?
  • Welche Evidenz sollte man im Frontend-Bereich wie sammeln, um bessere Entscheidungen zu treffen?
  • Was bedeutet es im Frontend-Bereich, Kollegen bei effizienter Entscheidungsfindung zu unterstützen?
  • Wie misst man im Frontend-Bereich den aktuellen Wert der eigenen Arbeit? Wie maximiert man ihn?
  • Wie kann man Wissen im Frontend-Bereich kontinuierlich und effektiv lernen?

Während ich darüber nachdachte, wie man diese Fragen beantworten könnte, entstand die Frontend-Engineer-Karriere-Roadmap. Sie unterteilt die Rollen, die Organisationen von Frontend-Entwicklern erwarten, in spezialisierte Tracks für Web, Produkt und Betrieb und erläutert die wichtigsten Merkmale sowie Vor- und Nachteile jedes Tracks. (In dem Infcon-Vortrag wurde dieser Inhalt vollständig weggelassen; ich plane, ihn in einem separaten Beitrag ausführlicher zu ergänzen und zu erläutern.)

Auch diese Roadmap lässt sich im Kontext von Juniors und Seniors anwenden.

Frontend-Juniors können zum Beispiel durch Vorabrecherche oder Interviewfragen den Zustand eines Unternehmens erfassen und das dann bei der Jobsuche so nutzen: „In dieser Organisation, zu der ich möchte, wird also diese Art von Spezialisierung gesucht. Wenn ich diese Spezialisierung gut aufbaue und gut sichtbar mache, steigen meine Chancen auf eine Einstellung.“

Seniors können hingegen sagen: „In unserer Organisation fehlt es an Leuten mit dieser Spezialisierung. Also helfen wir dieser Person dabei, genau diese Spezialisierung zu entwickeln. Und wir lernen, Bewerber mit dieser Spezialisierung gut zu erkennen und einzustellen.“ So lässt sich das für die Entwicklung von Teammitgliedern und fürs Hiring einsetzen.

Natürlich sollte man genauso wie bei dem oben genannten Paper im Blick behalten, dass auch diese drei Tracks sich gegenseitig ergänzen, keine absolute Wahrheit darstellen und nicht das endgültige Ziel sind.

Ein hervorragender Senior-Entwickler werden

In der Frontend-Engineer-Karriere-Roadmap habe ich auch meine Gedanken dazu kurz erwähnt, wie man ein hervorragender Senior-Entwickler wird.

  • Gute Seniors sind Menschen, die den Grundlagen treu bleiben und die Entwicklung der fünf Kernkompetenzen kontinuierlich fortsetzen.
  • Manchmal hat ein einziges vorbildliches Verhalten eines Kollegen mehr Wirkung als die vielen Worte einer formalen Führungskraft. Wer auch ohne offizielle Führungsrolle Leadership zeigt, dem wird am Ende oft tatsächlich eine Führungsrolle übertragen.
  • Menschen, die in jeder Situation und selbst bei kleinen Aufgaben große Wirkung erzeugen, erhalten später auch größere Aufgaben.

1 Kommentare

 
spilist2 2023-08-19

Da ich es direkt aus Notion übernommen habe, war der Link zum späteren Abschnitt „Frontend-Engineer-Karriere-Roadmap“ offenbar noch ein Notion-Link. seufz https://steady-study.super.site/frontend-engineer-career-roadmap Das ist der richtige.