jörn auerbach

utilize technology

Fortschritt als Entwickler

2020-11-28 jo3rnsoftware engineering

Update März 2021: Das hier diskutierte Progression-Framework wird aktuell durch eine Version 2.0 ersetzt. Die URL progression.monzo.com führt deshalb momentan zur Karriere-Seite des Unternehmens. Das GitHub Repository ist weiterhin erreichbar.

Jobbeschreibungen in der Softwarebranche sind mitunter sehr vage. Und nicht selten kommt es vor, dass das Tagesgeschäft ganz anders aussieht. Außerdem bieten sie selten eine solide Grundlage für die zugehörige Vergütung. Über Reddit bin ich zufällig auf einen Ansatz gestoßen, der sich von der Masse abhebt. Die Digital-Bank Monzo (in etwa N26 für UK) hat ein Framework konzipiert, das Erfahrungsstufen verschiedener Rollen in Level unterteilt. Mit ziemlich ausführlichen Beschreibungen, was im jeweiligen Level verlangt wird. Natürlich machen das die meisten Firmen ähnlich (Junior, Senior, Lead, etc.), aber noch nie habe ich es derart konkret (und Open Source) niedergeschrieben gesehen.

Auf dieser Webseite sind verschiedene Zuständigkeiten aufgelistet. Da mein Hintergrund im Mobile Development liegt, habe ich mir diese Kategorie mal etwas genauer angesehen. Das Framework bietet ähnliche Ansätze auch für Design, Marketing, Führung uvm.

Als angestellter Entwickler sollte man sich gelegentlich fragen, welche Position man im Unternehmen einnimmt und wie man sich weiterentwickeln kann. Ergo: Welchen unternehmerischen Wert habe ich und wie kann ich ihn erhöhen? Dabei geht es natürlich auch um eine finanzielle Einschätzung. Viel gewichtiger sehe ich aber den Grad der Selbstverwirklichung, den ein Job mit sich bringen sollte. Also: Wie kann ich besser coole Sachen machen? Das Progression Framework von Monzo ist kein wissenschaftlich wasserdichter Leitfaden, aber gibt wegbereitende Denkanstöße.

Ganz allgemein unterteilen sie die Entwicklung in 5 Disziplinen:

  1. Können (Wissen über das Unternehmen und das Fachgebiet)
  2. Wertschöpfung (Größe, Tragweite und Wert der Arbeit)
  3. Einfluss (die Gegebenheiten zum Positiven verändern)
  4. Kommunikation (Interaktion mit anderen)
  5. Führung (den Menschen um sich herum zum Erfolg verhelfen)

Nachfolgend sind die wesentlichen Punkte zusammengefasst. Wenn du selbst Entwickler bist, wirst du dich sicher wiedererkennen. Versuche zu identifizieren, was du bereits erreicht hast, was die nächsten Schritte sein könnten und wo du vielleicht noch etwas nach hängst. Du wirst feststellen, dass Aspekte aus verschiedenen Stufen auf dich zutreffen werden. Die Übergänge sind fließend. Vergiss außerdem nicht, dass dies keine Bewertung deiner Person ist, sondern lediglich einzelner Kompetenzen.

Disclaimer

Diejenigen, die absolute Experten in Sprache XY oder Framework YZ werden wollen, ohne sich mit ihrem Umfeld auseinanderzusetzen, können das vorgestellte Progression Framework getrost ignorieren. Das gezeichnete Fortschreiten innerhalb eines Unternehmens wird dann allerdings schwierig. Solche Prodigys sind vielleicht auch besser als freie Berater geeignet. Oder sie verbleiben einfach auf ihrem gemütlichen Stuhl. Denn das Fortschreiten an sich sollte kein Selbstzweck sein, wenn man mit seiner Rolle bereits zufrieden ist. Manchmal ist das sogar das Beste. Wie lehrt uns das Peter-Prinzip: Man wird befördert, weil man in etwas erfolgreich war, um etwas ganz anderes zu tun ohne erfolgreich zu sein.

Level 1

  1. Können (Mastery)

    • schreibt Swift oder Kotlin Code nach Style Guide
    • stellt proaktiv Fragen, erklärt was versucht wurde und was nicht funktioniert hat
    • erstellt und verändert einfache Screens und Abläufe eigentständig
    • fixt einfach Bugs
    • setzt Feedback zu PRs um
  2. Wertschöpfung (Impact)

    • erledigt zugeteilte Tasks
    • nimmt Feedback von erfahreneren Team-Mitgliedern an und setzt es um
    • sucht nach Optimierungspotential in Prozessen und Produkten
  3. Einfluss (Influence)

    • verbessert fehlerhafte Dokumentation
  4. Kommunikation (Communication)

    • gibt regelmäßige Status-Updates an einen Mentor
    • zeigt syntaktische Verbesserungen in Code Reviews auf
    • beschreibt PRs so, dass der Kontext verständlich ist
    • fragt nach Feedback
  5. Führung (Leadership)

    • n/a

Level 2

  1. Können

    • nutzt angebrachte Algorithmen und Datenstrukturen
    • nutzt passende Design Patterns
    • verantwortet kleine und mittelgroße, neue Features
    • verändert und verbessert existierende Teile der App
    • schreibt grundlegende UI- und Unit-Tests
    • lernt proaktiv neue Dinge und sucht nach Experten, die helfen können
    • beherrscht den Release Prozess
    • trägt zu Android/iOS Diskussionen bei
    • nutzt Reactive Programming wenn angemessen
    • designt Datenbankmodelle
    • behandelte Fehler im Code auf angemessene Weise
    • arbeitet mit Designern um leere, fehlerhafte und ladende Screens zu implementieren
    • integriert neue APIs
    • kennt und nutzt die Vorteile von asynchronen und synchronen Operationen
  2. Wertschöpfung

    • erledigt zugeteilte Tasks entsprechend den vorgegebenen Kriterien
    • ist auf Tasks fokussiert, die den Zielen des Teams zutragen
    • versucht sich zunächst selbst zu helfen, bevor Hilfe aufgesucht wird
    • effektives Zeitmanagement (Priorisierung, Pünktlichkeit)
    • erkennt, wenn seine Arbeit andere blockiert und löst die Blockade
    • zerlegt kleine und mittelgroße Probleme in iterative Schritte
    • erledigt kleine, klar definierte Aufgaben und Projekte
  3. Einfluss

    • erkennt Probleme, die in der Retrospektive aufkommen
  4. Kommunikation

    • gibt proaktiv auf empathische Weise hilfreiches und umsetzbares Feedback (z.B. in Code Reviews)
    • ist für Feedback dankbar
    • gibt Feedback wenn es erbeten wird
    • beschreibt PRs begründet und verständlich
    • kann die eigene Arbeit dem Team und anderen zur Verfügung stellen
  5. Führung

    • n/a

Level 3

  1. Können

    • nutzt Diagnosetools um die Leistung zu verbessern
    • baut nicht-triviale, koordinierte Screen Flows mit mehreren Diensten und Datenquellen
    • baut komplexe UI Layouts
    • trägt zu Team-Standards bei
    • ist wirkungsvoll bei der Verbesserung von Prozessen
    • verbessert Fehlerbehandlung in Screens & Flows
    • arbeitet eng mit Designern zusammen, identifiziert Knackpunkte und schlägt Verbesserungen vor
    • erarbeitet Migrationen von alten zu neuen Versionen
  2. Wertschöpfung

    • erledigt große, klar definierte und kleine, nicht klar definierte Aufgaben
    • zerlegt große Probleme in kleine, iterative Schritte über mehrere PRs hinweg
    • identifiziert Probleme, die gelöst werden müssen
    • verantwortet die Implementierung von Problemlösungen
  3. Einfluss

    • liefert wertvollen Beitrag zu Vorschlägen des Teams
    • verbessert proaktiv Dinge, die keinen Sinn ergeben
    • trägt zur Einstellung neuer Entwickler bei (leitet Anrufe, führt Interviews durch)
    • entwickelt oder verbessert Tools zum Nutzen aller Entwickler
  4. Kommunikation

    • ist transparent gegenüber eigenen Fehlern
    • gibt zeitnah und proaktiv umsetzbares Feedback
    • erbittet proaktiv Feedback von anderen
    • bedenkt die Meinung anderer bevor die eigene Meinung verteidigt wird
    • kommuniziert klar die Implementierung von Lösungen
    • kann erfolgreich von den eigenen Vorschlägen überzeugen
  5. Führung

    • ist Mentor für neue Mitarbeiter und hilft beim Onboarding
    • erkennt Lernmöglichkeiten für andere beim Code Review

Level 4

  1. Können

    • schreibt Code, der als Musterbeispiel für neue Entwickler dient
    • identifiziert und schließt Sicherheitslücken
    • wird aufgesucht, um komplexe Änderungen zu überprüfen oder Vorschläge größeren Umfangs zu kommentieren
    • baut Abläufe, die als Beispiel für qualitativ hochwertiges Interaktionsdesign dienen
    • verantwortet und koordiniert architekturelle Veränderungen der gesamten Codebase
    • debuggt komplexe Probleme unterschiedlicher Themengebiete
    • designt komplexe Flows und bricht sie in Tasks herunter
  2. Wertschöpfung

    • löst unklare Probleme
    • leitet das Schreiben von Vorschlägen mit kleinem bis mittlerem Umfang
    • löscht Feuer oder trägt wesentlich dazu bei
    • trifft pragmatische Entscheidungen wenn es um die Aufnahme von technical debt geht
    • zieht verschiedene Lösungswege für ein Problem in Betracht
    • teilt Projekte in kleinere Schritte auf, die jeweils einen Wert generieren
    • verfolgt eine langfristige Vision und definiert Meilensteine um dort hin zu gelangen
  3. Einfluss

    • hat positiven Einfluss auf Entwickler außerhalb des Teams
    • pflegt Dokumentation und macht es zukünftigen Entwicklern leicht, mit Systemen zu interagieren
    • entblockt unerfahrenere Team-Mitglieder
    • weiß, wie man eskaliert
    • fragt nach dem Warum und ist skeptisch
    • treibt Änderungen von Entwicklungspraktiken mit gut begründeten Argument voran
    • bricht Wissens-Silos in der Organisation auf
  4. Kommunikation

    • gibt proaktiv Feedback “nach oben” und außerhalb des Teams
    • ist transparent bei Entscheidungen zu Design und Technik
    • hilft nicht-technischen Kollegen dabei technische Einschränkungen und Trade-Offs zu verstehen
    • gibt Anweisungen und vermittelt Kontext an weniger erfahrene Entwickler
    • gibt direktes und konstruktives Feedback an andere Entwickler
    • kommuniziert die Rolle des Teams innerhalb der Mission des Unternehmens
  5. Führung

    • trägt zur Erhaltung der Unternehmenskultur innerhalb des Teams und neuen Kollegen bei
    • erhält Einverständnis für technische Entscheidungen und Designvorschläge
    • bezieht proaktiv andere relevante Entwickler mit ein
    • wird für Code Reviews aufgesucht
    • unterstützt die Entwicklung des Teams durch Coaching und Mentoring
    • hilft dem Team effektiver zusammenzuarbeiten
    • hilft bei der Durchführung von Team Ritualen
    • führt Verbesserungen am Code durch und erklärt sie dem Team

Level 5

  1. Können

    • antizipiert signifikante Änderungen an den Plattformen,definiert mögliche Lösungen und startet/beendet diese Projekte
    • wandelt Anforderungen auf hoher Flugebene in diskrete technische Angelegenheiten um
    • vermittelt und pflegt im Fachgebiet eine Kultur, die auf hohe Qualität achtet
    • koordiniert Aktivitäten über den eigenen Fachbereich hinaus
    • antizipiert Bedürfnisse von anderen Teams und gemeinsame Probleme und identifiziert in Zusammenarbeit mögliche Lösungen
    • verantwortet technisch anspruchsvolles Debugging komplexer Probleme für die kein Domänenwissen im Unternehmen existiert
  2. Wertschöpfung

    • knackt die “harten Nüsse” in einem Projekt
    • leitet die Behebung ungeahnter Zwischenfälle
    • urteilt darüber, wann vom unmittelbaren Ziel abgewichen werden sollte, um etwas anderes zu erreichen
    • leitet große technische Infrastrukturprojekte, eventuell sogar als Initiator
    • zerlegt große, lang andauernde Projekte in sinnvolle Einzelteile
    • fokussiert auf Arbeit mit hoher Wirkung und hohem Wert
    • versteht das Big Picture und integriert Unternehmensziele in die Arbeit des Teams
  3. Einfluss

    • repräsentiert das Unternehmen auf Konferenzen und Veranstaltungen
    • gilt als Aushängeschild für andere Entwickler sich dem Unternehmen anzuschließen
    • treibt proaktiv den internen Wissensaustausch voran
    • handelt unternehmerisch und hat bei Entscheidungen keine eigene Agenda
  4. Kommunikation

    • hilft anderen sich weiterzuentwickeln und gibt regelmäßig aufschlussreiches Feedback
    • unterhält sich mit nicht-technischen Stakeholdern auf einer geeigneten Abstraktionsebene
    • kommuniziert die langfristige Vision & Mission des Unternehmens und des Fachbereichs
  5. Führung

    • vermittelt die Entwicklungsprinzipien des Unternehmens
    • arbeitet mit Managern zusammen um anderen Entwicklern beim Wachstum zu helfen
    • fördert die effektive Zusammenarbeit in multidisziplinären Gruppen (Backend, Mobile, Data, Design, Web)
    • delegiert technische Entscheidungen mit geringem Risiko und leichter Umkehrbarkeit
    • trifft technische Entscheidungen mit hohem Risiko und geringer Umkehrbarkeit
    • trägt zur Erhaltung der Unternehmenskultur innerhalb der Organisation bei
    • formiert neue Teams

Level 6

  1. Können

    • n/a
  2. Wertschöpfung

    • ist verantwortlich für die Durchführung unternehmenskritischer technischer Projekte mit großer Wirkung
    • beginnt oder beendet große fachbereichsübergreifende Arbeiten
  3. Einfluss

    • zieht andere sehr erfahrene Mitarbeiter an
    • führt Entwickler um sich herum schneller zu großem Einfluss
  4. Kommunikation

    • gibt und erhält Feedback auf transparente Weise
    • kommuniziert effektiv und inspirierend nach innen und außen
  5. Führung

    • hilft Teams effektiver zusammenzuarbeiten
    • beginnt Dinge, die nicht selbst beendet werden können
    • delegiert, um die Zeit optimal zu nutzen

Ein Gedanke

Auffällig ist, das im Laufe der Entwicklung das Können langsam stagniert, während der Anspruch an die Skills in den anderen Bereichen stetig wächst. Selbstverständlich ist eine solide fachliche Basis notwendig, um als Entwickler etwas zu bewirken. Doch dieses Framework gibt zu bedenken, dass fachliche Reife alleine nicht das Ziel sein sollte. Letztendlich kommt das Können erst dann vollends zur Entfaltung, wenn es mit einer Vermittler- oder Führungsrolle kombiniert über das einzelne Gehirn hinweg transzendiert.

Cover photo by Jukan Tateisi
jo3rn.de - utilize technology

Jörn Auerbach ist Softwareentwickler. Zu seinen Vorlieben zählen neue Dinge lernen, knifflige Probleme angehen und Kaffeetrinken mit dem Squad.