Fortschritt als Software Developer
software engineeringUpdate März 2021: Das hier diskutierte Progression-Framework wird aktuell durch eine Version 2.0 ersetzt. Die URL progression.monzo.com zeigt momentan nicht mehr das Framework, sondern leitet zur Karriere-Seite des Unternehmens weiter. Den hier diskutierten Stand findet man bei web.archive.org oder im GitHub Repository.
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 oft wenig Anhaltspunkte 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.
Gelegentlich kann man sich fragen, was meine Arbeit ausmacht, ob ich mich weiterentwickeln möchte und falls ja: wie. Ergo: Welche unternehmerische Relevanz habe ich? Und möchte ich sie erhöhen? Dabei geht es natürlich auch um eine finanzielle Einschätzung. Viel gewichtiger sehe ich aber den Grad der Selbstverwirklichung, den Arbeit 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:
- Können (Wissen über das Unternehmen und das Fachgebiet)
- Wertschöpfung (Größe, Tragweite und Wert der Arbeit)
- Einfluss (die Gegebenheiten zum Positiven verändern)
- Kommunikation (Interaktion mit anderen)
- Führung (den Menschen um sich herum zum Erfolg verhelfen)
Nachfolgend sind die wesentlichen Punkte zusammengefasst. Wenn Du selbst Developer 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 nachhängst. Du wirst wahrscheinlich 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 evaluiert.
Disclaimer
Alle, die Insel-Expertise in Sprache XY oder Framework YZ aufbauen 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 in der freien Beratung aufgehoben. Oder sie verbleiben einfach auf ihrem gemütlichen Stuhl. Denn das Fortschreiten an sich sollte kein Selbstzweck sein, wenn man mit der eigenen 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
- Können (Mastery)
- schreibt Swift oder Kotlin Code nach Styleguide
- stellt proaktiv Fragen, erklärt was versucht wurde und was nicht funktioniert hat
- erstellt und verändert einfache Screens und Abläufe eigenständig
- fixt einfache Bugs
- setzt Feedback zu PRs um
- Wertschöpfung (Impact)
- erledigt zugeteilte Tasks
- nimmt Feedback von erfahreneren Team-Mitgliedern an und setzt es um
- sucht nach Optimierungspotential in Prozessen und Produkten
- Einfluss (Influence)
- verbessert fehlerhafte Dokumentation
- 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
- Führung (Leadership)
- n/a
Level 2
- Können
- nutzt angemessene 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 fragt erfahrenere Peers um Hilfe
- 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 dem Design-Team um Screens zu implementieren
- integriert neue APIs
- kennt und nutzt die Vorteile von asynchronen und synchronen Operationen
- 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 die Arbeit andere blockiert und löst die Blockade
- zerlegt kleine und mittelgroße Probleme in iterative Schritte
- erledigt kleine, klar definierte Aufgaben und Projekte
- Einfluss
- erkennt Probleme, die in der Retrospektive aufkommen
- 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
- Führung
- n/a
Level 3
- 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 dem Design-Team zusammen, identifiziert Knackpunkte und schlägt Verbesserungen vor
- erarbeitet Migrationen von alten zu neuen Versionen
- 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
- Einfluss
- liefert einen wertvollen Beitrag zu Vorschlägen des Teams
- verbessert proaktiv Dinge, die keinen Sinn ergeben
- trägt zur Einstellung neuer Devs bei (leitet Anrufe, führt Interviews durch)
- entwickelt oder verbessert Tools zum Nutzen aller Devs
- 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
- Führung
- ist Mentor für neue Mitarbeiter und hilft beim Onboarding
- erkennt Lernmöglichkeiten für andere beim Code Review
Level 4
- Können
- schreibt Code, der als Musterbeispiel für neue Devs 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
- 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
- Einfluss
- hat positiven Einfluss auf Devs außerhalb des Teams
- pflegt Dokumentation und macht es zukünftigen Devs 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
- 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 Devs
- gibt direktes und konstruktives Feedback an andere Devs
- kommuniziert die Rolle des Teams innerhalb der Mission des Unternehmens
- 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 Devs 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
- 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
- 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
- Einfluss
- repräsentiert das Unternehmen auf Konferenzen und Veranstaltungen
- gilt als Aushängeschild für andere Devs sich dem Unternehmen anzuschließen
- treibt proaktiv den internen Wissensaustausch voran
- handelt unternehmerisch und hat bei Entscheidungen keine eigene Agenda
- 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
- Führung
- vermittelt die Entwicklungsprinzipien des Unternehmens
- arbeitet mit Managern zusammen, um anderen Devs 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
- Können
- n/a
- Wertschöpfung
- ist verantwortlich für die Durchführung unternehmenskritischer technischer Projekte mit großer Wirkung
- beginnt oder beendet große fachbereichsübergreifende Arbeiten
- Einfluss
- zieht andere sehr erfahrene Mitarbeiter an
- führt Devs um sich herum schneller zu großem Einfluss
- Kommunikation
- gibt und erhält Feedback auf transparente Weise
- kommuniziert effektiv und inspirierend nach innen und außen
- 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 Dev 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.