Ein guter Interview-Prozess ist entscheidend, um die besten React-Entwickler für dein Unternehmen zu gewinnen. Schließlich kann eine einzige Fehleinstellung die Leistung eines gesamten Teams beeinträchtigen. Ich sehe auf dem deutschen Markt immer wieder das folgende Problem.
Viele Unternehmen erhalten zahlreiche Bewerbungen, vor allem aus dem Ausland und setzen auf Coding Challenges, um Kandidaten zu filtern. Doch dieses Verfahren hat seine Tücken: Gute Kandidaten, die keine Zeit für unbezahlte Arbeit aufwenden möchten, reichen möglicherweise gar keine Lösung ein, während schlechte Kandidaten mit Hilfe von Freunden, Tutorials oder ChatGPT eine Lösung erarbeiten, die über ihre tatsächlichen Kompetenzen liegt. Damit werden letztendlich genau die falschen Bewerber eingestellt.
Auch der kommunikative Aspekt des Entwicklerdaseins bleibt bei Coding Challenges leider auf der Strecke.
Anstatt auf Coding Challenges zu setzen, führe ich 1on1 Pair-Programming Sessions mit jedem Bewerber durch. Der Bewerber teilt seinen Bildschirm und entwickelt in einem leeren neuen Projekt. Ich stelle eine Aufgabe in Textform, die technisch dem entspricht, was der Bewerber hinterher im Job auch tun muss. Das heißt konkret: "Bau eine UI-Component nach Design XY", wenn es im Job um ein Design-System geht, oder eher "Binde diese API an", wenn der Entwickler sich on-the-job eher mit Business-Logik und Schnittstellen beschäftigen wird. Die Aufgabe sollte dabei eher einfach sein und Möglichkeiten zum "Ausbrechen" in tiefergehende Konzepte bieten.
Die Einladung zum Meeting umfasst eine Stunde. Nach einem kurzen Kennenlernen gebe ich dem Bewerber folgende Aufgabe:
# React Challenge: Todo List
## Setup
- Download this JSON file with a few todos from [Github](https://github.com/breytex/interview-todo/blob/main/db.json)
- Start a little backend with `npx json-server --watch db.json --port 3001`
- You can access the API's documentation at `http://localhost:3001`
- Create an empty NextJS project with TypeScript
## Excercise
Keep the implementation of the following exercise simple: just use plain HTML and inline CSS, without libraries such as Axios or Redux :)
1. Render a list of todos to the screen
2. Make it possible to add new todo items
- Don't forget to add headers: `{"Content-Type": "application/json"}` to the fetch() method
3. Clicking on a todo item should redirect the user to a new NextJS page: `/todo/[id]`
4. Server-side render the details of the given todo item with the `[id]`
Die Aufgabe ansich ist verhältnismäßig einfach. Es geht darum, ins flüssige Coden zu kommen und von da aus weitere vertiefende Fragen zu den Konzepten zu stellen, die der Kandidat gerade anwendet. Hier sind ein paar Beispiele:
Wenn die Zeit knapp wird, unterbreche ich das Coden nach Beendigung einer Teilaufgabe und stelle noch ein paar weitere vertiefende Fragen zur Aufgabe, die der Bewerber mündlich beantworten soll:
Woran erkennt man jetzt die guten Bewerber?
Schlechte und sehr gute Bewerber erkennt man meist in den ersten fünf Minuten. In beiden Fällen könnte man das Interview vorzeitig beenden, da sich aus meiner Erfahrung der erste Eindruck selten nochmals ändert.
Mit diesem Interview-Format testet man nicht nur die technischen Fähigkeiten, sondern auch die Fähigkeiten in Kommunikation und einer "Hands-on"-Mentalität. Dinge wie Debugging-Kompetenzen oder die aktive Auseinandersetzung mit Entwickler-Tools und der IDE können bei der Einstufung eines Kandidaten eine entscheidende Rolle spielen - würden jedoch bei einer Coding Challenge nicht ans Tageslicht kommen. Dabei geht es nicht darum, die Vorlieben eines Entwicklers qualitativ zu bewerten, sondern darum, ob er oder sie sich in vorherigen Jobs mit der Optimierung des eigenen Workflows beschäftigt hat (gutes Zeichen!) oder nicht.
Am Ende des Interviews gebe ich direkt konkretes Feedback. Hat der Bewerber sich als Senior beworben, aber das Interview nicht überstanden, gebe ich Tipps wie und mit welchen Online-Ressourcen man sich weiter verbessern kann. Für viele ist das Bewerbungsverfahren eine emotionale Angelegenheit, mit der verantwortungsvoll umgegangen werden sollte. Ich setze mich dafür ein, dass jeder Bewerber, egal ob gut oder schlecht, zeitnahe nach dem Interview eine Entscheidung mitgeteilt bekommt.
Pair-Programming Interviews mögen zunächst zeitaufwändiger erscheinen als Coding Challenges. Doch aus meiner Erfahrung sind sie bei richtiger Handhabung kaum zeitaufwändiger, da das Überprüfen der Coding Challenges ebenfalls mindestens 30 bis 60 Minuten dauert. Zudem sind die Ergebnisse von Pair-Programming Interviews belastbarer und führen zu weniger false-positive Bewerbern.
Häufig drehen sich Interviews nur um das "wollen wir mit dir zusammen arbeiten?". Aber mindestens genau so wichtig ist ein "willst du denn auch mit uns?". Sollte der Bewerber nach dem Interview wirklich für die Rolle in Frage kommen, nimm dir die Zeit und zeig ein bisshen was von der Codebase (compliance beachten!) oder dem UX-zu-Code-Prozess (z.B. Figma). Viele Firmen geben keine tieferen Einblicke und genau das macht dann den Unterschied, dass der (gute) Bewerber am Ende unter den zahlreichen Angeboten (die er definitiv bekommen wird wenn er schon durch dieses Interview durchgekommen ist 🤓) sich auch für euch entscheidet.
Mit meinen 5 Jahren Erfahrung und mehr als 150 geführten Interviews im React-Bereich stehe ich dir gerne bei der Ausgestaltung deines Interviewprozesses zur Seite. Meld dich gerne bei mir:
Hey, ich bin Fabian 👋. Seit über einem Jahrzehnt führe ich Webapps mit viel Freude von der Idee bis zum ersten Euro und darüber hinaus.
Als Full Stack Architect mit Leidenschaft für React und TypeScript nutze ich meine Erfahrung und Begeisterung, um Projekte zukunftssicher zu gestalten.
Wie wäre es mit einem Remote Coffee Break um Ideen und Konzepte auszutauschen? ☕
Bis bald!