Bewerbungshilfe Deutschland FlaggeBewerbungshilfe Österreich FlaggeBewerbungshilfe Schweiz Flagge
    TonisBewerbungshilfe
    Zurück zum Blog
    Bewerbung

    Take-Home-Tests und Code-Assessments bestehen: Strategie und Technik

    3. Juni 2026
    Take-Home-Tests und Code-Assessments bestehen: Strategie und Technik

    Take-Home-Tests sind in vielen Tech-Hiring-Prozessen die heimliche Königsdisziplin. Sie filtern härter als Whiteboard-Interviews, weil sie unter realen Bedingungen zeigen, wie du Code schreibst, kommunizierst und Trade-offs erklärst. Gleichzeitig sind sie der Schritt, an dem die meisten Kandidatinnen und Kandidaten unnötig scheitern, nicht aus Mangel an Skill, sondern aus Mangel an Strategie. Ich habe Dutzende Take-Homes mit Kundinnen und Kunden vorbereitet und sehe immer dieselben Hebel. Hiring Manager bewerten selten nur, ob der Code läuft. Sie schauen auf Problemverständnis, Code-Qualität, Engineering-Reife und Kommunikation. Wer alle Dimensionen liefert, sticht heraus, auch wenn die Lösung nicht perfekt ist.

    1. Das Zeitmanagement diszipliniert einteilen

    Die meisten Take-Homes haben ein offizielles Zeitfenster (z.B. "circa 4 Stunden") und ein Abgabefenster (z.B. "innerhalb von 7 Tagen"). Beides musst du ernst nehmen. Die 4 Stunden sind ein Signal des Unternehmens, wie viel Aufwand sie erwarten. Wer 20 Stunden investiert, liefert oft Over-Engineering und disqualifiziert sich, weil die Lösung nicht zur Stellengröße passt.

    Mein Standard-Timeboxing für ein 4-Stunden-Take-Home lautet: 30 Minuten Lesen und Notizen, 20 Minuten Architektur-Skizze, 2 Stunden Implementierung, 30 Minuten Tests, 30 Minuten README und Polish, 10 Minuten Final-Check. Das ist hart, funktioniert aber.

    2. In den ersten 30 Minuten lesen, nicht coden

    Der größte Fehler ist sofortiges Loscoden. Lies die Aufgabe zweimal, einmal komplett, einmal mit Notizen. Markiere explizit Pflichtanforderungen, Wünschenswertes und Stretch-Goals. Identifiziere implizite Anforderungen, wie beispielsweise "Daten persistent speichern", was Tests gegen einen DB-State impliziert.

    Erkenne offene Fragen: Wenn etwas mehrdeutig ist, formuliere eine kurze E-Mail mit konkreten Annahmen ("Ich nehme an, dass X gilt, weil Y. Bitte korrigieren, falls nicht."). Das wird in 80 Prozent der Fälle positiv aufgenommen, weil es zeigt, dass du proaktiv kommunizierst.

    3. Die Architektur vorab aufzeichnen

    Bevor du eine Zeile schreibst, skizzierst du die Architektur auf Papier oder in einem Mermaid-Diagramm. Welche Komponenten, welche Datenflüsse und welche externen Abhängigkeiten gibt es? Zehn Minuten Skizze sparen zwei Stunden Refactoring.

    Wenn die Aufgabe eine API ist, definiere zuerst das Schema (z.B. OpenAPI-Schnipsel). Wenn die Aufgabe ein Frontend ist, definiere zuerst die Component-Hierarchie und den State-Tree. Wenn die Aufgabe im Data-Bereich liegt, definiere zuerst Input- und Output-Schema sowie die Pipeline-Stages.

    4. Konkrete Code-Qualität liefern

    Idiomatic Code in der jeweiligen Sprache schlägt clevere Tricks. Wenn die Aufgabe in TypeScript ist, nutze Typen sauber, vermeide any und nutze Discriminated Unions, wo es passt. In Python nutzt du Type Hints, dataclasses, schlanke Funktionen und eine sinnvolle Modul-Struktur. In Go setzt du auf einfache Strukturen, kein over-abstracted Interface-Geflecht und klare Error-Returns. In Rust nutzt du idiomatic Result-Handling und vermeidest unnötige Lifetimes.

    Eine saubere Modul-Struktur ist ein starkes Signal. Die Trennung von Domain-Logik, IO und Adaptern (Hexagonal Architecture im Kleinen) zeigt, dass du in Schichten denkst. Bei einer 4-Stunden-Aufgabe heißt das nicht volle Clean Architecture, sondern eine simple Trennung in beispielsweise handlers, services und repositories.

    5. Tests als stärksten Differentiator nutzen

    Tests sind der Punkt, an dem 60 Prozent der Kandidatinnen und Kandidaten verlieren. Sie liefern Code ohne Tests oder mit einem einzigen Happy-Path-Test. Liefere stattdessen drei Test-Kategorien: Unit-Tests für die Kern-Logik (mindestens 5 Cases, inklusive Edge Cases), einen Integration-Test für den kompletten Flow und einen erklärenden Test, der dokumentiert, wie das System sich in einem Grenzfall verhält.

    Wähle das Test-Framework idiomatisch (pytest in Python, Vitest oder Jest in TypeScript, go test mit Table-Driven Tests in Go). Bastle kein eigenes Test-Framework. Eine Coverage über 80 Prozent ist ein gutes Signal, aber kein Selbstzweck. Wichtiger ist, dass die Tests die kritischen Pfade abdecken.

    6. Error Handling und Edge Cases explizit einbauen

    Code, der nur den Happy Path behandelt, signalisiert Juniorität. Behandle explizit leere Inputs, ungültige Formate, Timeouts bei externen Calls, Race Conditions (wenn relevant) und Concurrency-Limits. Wenn du eine Schwachstelle bewusst nicht behandelst, schreib es ins README ("Race Conditions zwischen Concurrent Writes sind nicht abgedeckt, weil die Aufgabe einen Single-Writer-Use-Case spezifiziert. Skalierung würde Optimistic Locking erfordern.").

    7. Das README als Hauptdarsteller aufbauen

    Das README ist oft das erste, was der Reviewer liest. Nutze eine erprobte Struktur: Kurze Beschreibung (was ist es, was tut es), Setup-Anleitung (Kommandos zum Starten, Testen, Builden, idealerweise als Makefile oder Just-File), Architektur-Übersicht (5 bis 10 Zeilen oder ein Diagramm), wichtige Entscheidungen (3 bis 5 Trade-offs mit Begründung) und die Sektion "Was würde ich mit mehr Zeit anders machen" (3 bis 5 Punkte).

    Der letzte Punkt ist entscheidend. Er zeigt, dass du dir der Limitierungen bewusst bist, ohne defensiv zu wirken. Ein Beispiel für Senior-Sprech: "Mit mehr Zeit würde ich eine Background-Queue für die Email-Versendung einführen, weil der aktuelle Synchron-Call den HTTP-Response blockiert."

    8. Git-Commits als Qualitätsmerkmal nutzen

    Reviewer schauen oft in den Git-Log. Mache 5 bis 10 logische Commits mit klaren Messages, anstatt eines einzigen "final" Mega-Commits. Konventionelle Commit-Messages (feat:, fix:, refactor:, test:) zeigen Reife. Wenn du etwas verworfen hast, kann ein Refactor-Commit das dokumentieren. Vermeide Commits mit "wip" oder "asdf".

    9. Patterns je nach Tech-Bereich anwenden

    Im Backend (API) nutzt du REST oder GraphQL nach Vorgabe, ein sauberes Schema, Input-Validation (Zod, Pydantic, Joi), saubere Error-Responses (RFC 7807 Problem Details, wo passend), Logging mit strukturierten Feldern und einen Health-Endpoint.

    Im Frontend hältst du Komponenten klein und testbar, wählst das State-Management bewusst (oft reicht useState plus Context, kein Redux für eine 4-Stunden-Aufgabe), baust Loading- und Error-States ein und achtest auf Accessibility-Basics (semantic HTML, aria-labels, keyboard Navigation) sowie ein responsives Default-Design.

    Im Data-Bereich lieferst du klar definierte Input- und Output-Schemas, idempotente Pipelines, Logging von Statistiken (Anzahl gelesen, geschrieben, übersprungen), Testdaten mit klaren Edge Cases und einen kurzen Performance-Vergleich, wenn er relevant ist.

    Mein Rat

    Vermeide die typischen Stolperfallen: Binde keine externen Libraries ein, die das Problem komplett für dich lösen (das wird als Cheating gewertet). Setze keine kompletten Frameworks auf, wenn die Aufgabe minimalistisch ist. Klebe Tests nicht erst im allerletzten Commit drauf (das sieht man sofort im Git-Log) und nutze keine Code-Generatoren ohne Disclosure (AI-generierten Code nicht verschweigen). Überziehe niemals die Abgabefrist ohne vorherige Kommunikation.

    Take-Home-Tests sind eine Bühne, auf der du Engineering-Reife zeigen kannst, in einem Umfang, den ein Live-Interview nie erlaubt. Wenn du dich auf einen konkreten Take-Home oder einen kompletten Tech-Hiring-Prozess im DACH-Raum oder bei internationalen Scale-ups vorbereiten willst, melde dich über meine Bewerbungshilfe bei mir.

    Häufige Fragen

    Soll ich AI-Tools wie Copilot beim Take-Home nutzen?

    Wenn es nicht explizit verboten ist, ja, aber transparent. Schreib im README, welche Tools du genutzt hast und wo du die Outputs validiert hast.

    Was, wenn ich die Zeit nicht einhalten kann?

    Liefer pünktlich, was du hast, und dokumentiere klar im README, was fehlt und wie du es lösen würdest. Das ist immer besser als verspätet abzugeben.

    Brauche ich 100 Prozent Test-Coverage?

    Nein. 70 bis 85 Prozent auf den kritischen Pfaden ist ein starkes Signal. Coverage als Selbstzweck wirkt mechanisch.

    Brauchst du Hilfe bei deiner Bewerbung?

    Professionelle Bewerbungshilfe vom LinkedIn Top Voice, persönlich und diskret.

    Zur Bewerbungshilfe

    Wo suchst du einen Job?

    Wähle dein Land für maßgeschneiderte Unterstützung und transparente Preise, jeder Markt hat seine eigenen Regeln.

    Hast du eine Frage zu deiner Bewerbung?