Skip to content
Sample report

This is what your team receives

Every Coderbase interview produces a detailed, auditable report card with objective scoring, criteria checklists, interviewer notes, and candidate code. This is a sample with fictitious data.

Ada Lovelace

15 Mar 2026 · Senior Full-Stack Engineer (v1.2) · Acme Engineering

Interviewer: Jordan Ellery

The overall score, and where it sits among other candidates on the same format.

Each question is scored on its own, with how much help the candidate needed.

The interviewer's write-up, in plain language. The interviewer makes every judgment and signs it.

Overall notes

Ada worked through the architecture and code review questions on her own, set up sound data models and found the major concurrency flaws. The coding question needed some steering on the commit graph and on time, but the design she reached was technically sound. Across all three questions, Ada justified her trade-offs with specific production constraints.

Every criterion is one observable behavior, ticked as it happens. The score comes from the ticks.

Question 1

Review this pull request and provide feedback

Score
4/5
Handholding
Minimal

Interviewer's notes

Ada opened by identifying the missing transaction boundary in the payment handler, noting that concurrent requests could charge a customer twice.

  • Proposed wrapping the database writes in a serializable transaction with a unique idempotency key.
  • Flagged the N+1 query in the notification loop and recommended batch fetching.
  • Did not identify the time zone bug in the date comparison.
  • Left review comments that named the exact lines and included code suggestions.

Criteria

  • Met: Identifies the primary bug or anti-pattern in the code
  • Met: Explains the impact on production (data loss, race condition, etc.)
  • Met: Proposes a correct fix with appropriate trade-offs
  • Not met: Identifies secondary issues (performance, style, naming)
  • Met: Comments are constructive and actionable
  • Met: Considers edge cases and error handling

Bonuses

  • Met: Suggests improvements beyond the immediate scope (testing, monitoring)
Question 2

Implement a version control system in 2 weeks

Score
3/5
Handholding
Moderate

Interviewer's notes

Ada structured the first implementation around files and, after a prompt about concurrent changes, designed a three-way merge from the common ancestor out loud. The data model used a directed acyclic graph for commit history and content-addressable storage with SHA-256 hashes, storing diffs rather than full snapshots. A good part of the session went on the command-line interface, which left less time to finish the merge logic. The commit graph needed moderate guidance from the interviewer.

Criteria

  • Met: Designs a reasonable data model for commits and branches
  • Not met: Implements basic branching and checkout
  • Met: Implements commit history traversal (log)
  • Met: Handles content-addressable storage correctly
  • Not met: Implements merge with conflict detection

Bonuses

  • Not met: Implements diff computation between commits

What the candidate wrote, as they left it.

Candidate code
class Repository {
  private commits: Map<string, Commit> = new Map();
  private branches: Map<string, string> = new Map();
  private HEAD: string = "main";

  init(): void {
    const rootCommit = this.createCommit("Initial commit", {}, null);
    this.branches.set("main", rootCommit.hash);
  }

  commit(message: string, changes: Record<string, string>): Commit {
    const parentHash = this.branches.get(this.HEAD)!;
    const parent = this.commits.get(parentHash)!;
    const newTree = { ...parent.tree, ...changes };
    const commit = this.createCommit(message, newTree, parentHash);
    this.branches.set(this.HEAD, commit.hash);
    return commit;
  }

  branch(name: string): void {
    const currentHash = this.branches.get(this.HEAD)!;
    this.branches.set(name, currentHash);
  }

  checkout(name: string): void {
    if (!this.branches.has(name)) throw new Error(`Branch ${name} not found`);
    this.HEAD = name;
  }

  log(limit = 10): Commit[] {
    const result: Commit[] = [];
    let hash: string | null = this.branches.get(this.HEAD) ?? null;
    while (hash && result.length < limit) {
      const commit = this.commits.get(hash)!;
      result.push(commit);
      hash = commit.parentHash;
    }
    return result;
  }

  private createCommit(
    message: string,
    tree: Record<string, string>,
    parentHash: string | null,
  ): Commit {
    const hash = this.computeHash(message, tree, parentHash);
    const commit: Commit = { hash, message, tree, parentHash, timestamp: new Date() };
    this.commits.set(hash, commit);
    return commit;
  }

  private computeHash(
    message: string,
    tree: Record<string, string>,
    parentHash: string | null,
  ): string {
    const content = JSON.stringify({ message, tree, parentHash });
    // Simplified hash – production would use SHA-256
    let h = 0;
    for (let i = 0; i < content.length; i++) {
      h = ((h << 5) - h + content.charCodeAt(i)) | 0;
    }
    return Math.abs(h).toString(16).padStart(8, "0");
  }
}
Question 3

Design a notification system for a social platform

Score
5/5
Handholding
Minimal

Interviewer's notes

Ada began by validating scale constraints (10M DAU), latency targets (under 500 ms for push, under 2 s for email) and the supported notification types (mentions, follows, likes, system). Her architecture routed events through Kafka to a fan-out service, buffering them in per-user Redis sorted sets before delivery workers picked them up. She added dead-letter queues, exponential backoff for retries and circuit breakers for the email provider without prompting. She walked through fan-out for a celebrity account with sequence diagrams, and designed a time-windowed aggregation layer with Redis TTL keys to batch notifications.

Criteria

  • Met: Clarifies requirements and constraints before designing
  • Met: Proposes a scalable event-driven architecture
  • Met: Addresses fan-out for high-follower-count users
  • Met: Considers failure modes and retry strategies
  • Met: Discusses trade-offs between push and pull models

Bonuses

  • Met: Addresses notification batching or aggregation
  • Met: Discusses monitoring, SLOs or observability

Every Coderbase interview produces a report like this. Ready to see what your candidates can really do?