How to Structure Code Assignments Candidates Don't Hate

A "2-3 hour" test that secretly eats 8-10 is why devs trash you on Reddit. Well-scoped ones hit 92% completion. Here are the seven design rules.

Ernest Bursa

Ernest Bursa

Founder · · 12 min read
How to Structure Code Assignments Candidates Don't Hate

A code assignment lets candidates demonstrate how they approach a realistic engineering problem. Its value depends on scope, conditions, and evaluation. Schmidt and Hunter’s 1998 meta-analysis in Psychological Bulletin reported a 0.54 validity coefficient for work samples. The 0.63 combined coefficient concerned work samples plus a general cognitive ability test, not a work sample plus a structured interview. These historical estimates do not establish the validity of a particular coding exercise.

Why Whiteboard Interviews Lost

Traditional live-coding interviews reduce a candidate’s cognitive performance simply due to the stress of being observed, according to a 2020 study from North Carolina State University published in the Journal of Systems and Software. The candidate solves a contrived algorithmic puzzle on a whiteboard, with an interviewer watching every keystroke and a ticking clock. This measures anxiety tolerance, not engineering skill.

The industry recognized this. The DevSkiller 2023 Technical Hiring Report found that take-home coding tests had become the dominant technical assessment format, overtaking live coding. Industry surveys consistently show that a majority of developers prefer take-homes over whiteboard interviews.

But the shift created new problems. Companies replaced one broken format with another. They swapped 45-minute anxiety tests for 20-hour unpaid labor marathons. The tool changed; the disrespect stayed the same.

What Candidates Actually Hate About Code Assignments

The backlash against code assignments is not about the concept. It is about the execution. Across Hacker News, Reddit’s r/ExperiencedDevs, and engineering social media, the complaints cluster around three specific failures.

Deceptive Time Estimates

The most common complaint: assignments advertised as “2-3 hours” that actually take 8-10 hours. CodeSubmit reports that well-scoped assignments achieve completion rates as high as 92%. But when companies ask candidates to build full-stack applications from scratch, drop-out rates spike. The gap between advertised and actual time destroys trust immediately.

The Over-Engineering Arms Race

When instructions are vague, candidates feel forced to over-engineer. They add comprehensive test suites, Docker configurations, and polished documentation because they have no idea what the rubric values. Open-ended prompts turn a coding exercise into a competitive arms race where the candidate with the most free time wins.

Silence After Submission

Candidates invest hours of unpaid work, submit their code, and hear nothing. No feedback. No rejection email. Just silence. In engineering communities, ghosting after a code assignment is considered one of the most disrespectful things a company can do. Some candidates have even revoked access to their GitHub repositories after being ghosted, a clear signal that the relationship broke down.

Who Gets Excluded by Poorly Scoped Assignments

Unbounded take-home assignments create a diversity problem that most hiring teams never discuss. The candidate who can spend an entire weekend on an unpaid project is, statistically, more likely to be young, unattached, and without caregiving responsibilities.

Working parents, people caring for family members, and candidates holding multiple jobs do not have the luxury of dedicating a weekend to a speculative job application. A hiring process that demands extensive unpaid time systematically excludes this talent pool.

Neurodivergent candidates and candidates with disabilities face additional barriers. Time-boxed pressure environments can trigger performance anxiety. Rigid, surveillance-heavy coding tests often lack accessible design. A poorly scoped take-home is not just an operational bottleneck. It is a pipeline that filters out diverse talent while selecting for a narrow demographic.

The fix is structural: enforce time limits, offer alternative assessment formats, and build accommodation workflows into the process rather than treating them as exceptions.

The Seven Rules for Code Assignments That Work

These rules draw from assessment best practices advocated by interviewing.io, Karat, and Hired, combined with data from CodeSubmit and DevSkiller. Apply all seven together; skipping one undermines the rest.

1. Enforce a Strict 2-4 Hour Time Limit

Design the assignment so it can genuinely be completed in a single evening. Do not rely on the honor system. Use a platform that tracks when the candidate starts and automatically submits their work when time expires. This prevents the arms race and creates a level playing field.

A uniform time limit does not guarantee fairness or legal compliance. Set an expected workload separately from the submission deadline, and agree on needed accommodations before the candidate starts.

2. Provide a Complete Starter Template

Do not evaluate a candidate’s ability to configure Webpack or set up a database schema. Provide a pre-configured repository with scaffolding, dependencies, database schemas, and test frameworks already in place. The candidate should open the repo and start writing business logic within minutes.

This mirrors how real engineering work happens. Nobody starts a greenfield project from scratch every sprint. They work within existing codebases, existing conventions, and existing architecture.

3. Align Tasks With Real Work

Ask the candidate to build a small feature, fix an existing bug, or integrate a specific API. Avoid abstract algorithmic puzzles, contrived data structure exercises, or anything that looks like a college exam.

The best assignments feel like a realistic first-week task. “Here is our API. Add an endpoint that does X and write tests for it.” This tells you exactly how the candidate will perform on day one.

4. Publish Your Grading Rubric

Tell candidates exactly what reviewers will evaluate before they start. A transparent rubric should cover:

  • Code readability and naming conventions
  • Error handling and edge case coverage
  • Test quality (not quantity)
  • Architecture decisions and separation of concerns
  • Git hygiene (commit messages, logical commits)

When candidates know the criteria, they stop guessing and start demonstrating their actual skills. You get signal; they get clarity.

5. Guarantee Human Feedback

Commit to providing constructive feedback on every submission, regardless of the hiring outcome. This is non-negotiable.

The feedback does not need to be a full code review. Three to four specific observations about what worked well and what could improve take a reviewer 10 minutes. That 10-minute investment prevents the candidate from writing a scathing Glassdoor review about your process.

6. Offer Alternative Assessment Formats

Not every strong engineer performs best in a take-home format. Give candidates the option to:

  • Present an open-source contribution they have already made
  • Do a live pair-programming session on a similar problem
  • Walk through a past portfolio project and discuss architecture decisions

Flexibility signals respect. It also broadens your talent pool to include candidates who might be excellent engineers but have constraints that make a take-home difficult.

7. Compensate for Extensive Projects

If your assessment genuinely requires more than four hours, pay the candidate. Contract them at a fair hourly rate and treat it as a paid trial.

Automattic pays $25/hour for trial projects lasting 5-40 hours. Linear runs 2-5 day paid work trials where candidates build real features. Paying for a candidate’s time is not just ethical. It signals that your company values the work people produce.

Why GitHub Integration Matters

The medium of delivery matters as much as the content. Browser-based coding sandboxes restrict candidates from using their preferred IDE, limit access to debugging tools, and abstract away version control. They strip away the exact signals you want to measure.

GitHub-integrated code assignments solve this. The candidate clones a repository, works in their local environment, creates branches, writes commits, and submits via Pull Request. This mirrors how they will actually work on the job.

For reviewers, the benefits compound. You can examine the candidate’s commit history to understand how they broke down the problem. You can read their commit messages to assess communication quality. And reviewing a Pull Request is something every engineering team already does daily, so the evaluation process feels natural rather than artificial.

A code review discussion can add context to a work sample. Do not assign the combined validity from a different assessment battery to that exercise.

Assessment Format Predictive Validity Source
Work sample test 0.54 Schmidt & Hunter, 1998
Structured interview 0.51 Schmidt & Hunter, 1998
Unstructured interview 0.38 Schmidt & Hunter, 1998
General cognitive ability test + work sample 0.63 Schmidt & Hunter, 1998

Historical validity estimates from Schmidt & Hunter’s 1998 meta-analysis in Psychological Bulletin, not the percentage of correct hiring decisions or a guarantee for your assessment.

How to Evaluate Submissions Without Bias

A structured code assignment is only half the equation. Without a disciplined evaluation framework, reviewer bias contaminates the results.

Avoid “Yelp Review” Scoring

The most common failure mode is letting reviewers leave a subjective “hire/no hire” verdict based on gut feeling. This approach is highly susceptible to affinity bias: reviewers unconsciously favor candidates whose coding style mirrors their own. A React developer might penalize a candidate who prefers vanilla JavaScript, not because the solution is worse, but because it is unfamiliar.

Anchor Reviews to the Rubric

Every reviewer should score against the published rubric, documenting specific observations. Not “code quality is good” but “candidate properly sanitized user inputs in the API handler on line 47.” Not “architecture is poor” but “business logic is mixed with presentation layer in the UserController.”

Specific observations are debatable. Gut feelings are not.

Use Pull Request Reviews

When code is submitted as a GitHub Pull Request, reviewers can leave inline comments on specific lines. This mirrors the exact asynchronous communication the candidate will experience on the job. It also creates a permanent record of the evaluation that multiple team members can reference.

Follow Up With a Live Discussion

The most predictive signal comes from asking the candidate to walk through their own code. Why did they choose this library? How would they handle 100x the traffic? What would they refactor if they had more time?

This conversation reveals communication skills, adaptability, and technical depth that code alone cannot show. It is also the candidate’s opportunity to explain trade-offs they made within the time constraint.

What Leading Companies Do Differently

The best engineering organizations have moved beyond the basic take-home. Each has adapted the assessment format to match their actual working environment.

Automattic (WordPress) runs mandatory paid trial projects, 5-40 hours at $25/hour. Candidates work on real tasks, communicate via Slack and GitHub, and demonstrate how they operate in a fully distributed environment. Linear runs 2-5 day paid trials where candidates attend kickoff meetings, build features, and present deliverables. A near-unanimous “strong yes” from the panel is required to extend an offer.

Practical Live Exercises

Stripe skips take-homes entirely. Their interview loop includes an “Integration Round” where candidates navigate an unfamiliar codebase to integrate a new API, and a “Bug Bash” round focused on debugging real issues from GitHub. These exercises test how a developer functions under realistic constraints, not contrived ones.

Asynchronous Code Review

GitLab provides candidates with a Merge Request up to 24 hours before the interview. The candidate reviews the MR asynchronously, leaving comments and architectural critiques. This forms the basis of a 90-minute live discussion and pair-programming session. The format mirrors GitLab’s remote, async-heavy culture.

Conversational Screening

Basecamp (37signals) avoids logic puzzles entirely. They evaluate candidates based on practical code submissions and place heavy emphasis on the candidate’s cover letter and written communication. The technical interview is a collaborative conversation, not an interrogation.

Every company here aligns their assessment format with how their team actually works. If you are a remote-first async team, test for async skills. If you pair-program daily, test with pair programming. The assessment should preview the job.

How Kit Handles Code Assignments

A Private Repository From Your Template

Kit creates a private GitHub repository from an employer-provided template and invites the candidate. Your team supplies the instructions, dependencies, and tests. The candidate clones and runs the project locally.

Submission Deadlines and Extensions

The deadline starts when the candidate accepts the GitHub invitation. Configuration sets the duration in days and a grace period. After both expire, Kit automatically records an unsubmitted assignment as submitted. It does not measure active coding time or enforce a three-hour workload within a week-long submission window.

Recruiters can extend the deadline. When enabled, candidates can request one self-service extension before the deadline. Repository archival depends on the stage being completed, so it is not an automatic code freeze at the submission deadline.

Reviewer Access

After submission, Kit notifies reviewers and invites those with connected GitHub accounts to the repository. Reviewers can inspect the code and commit history there. If you want a pull request, include that requirement in the candidate instructions; Kit does not create one automatically.

The Next Hiring Stage

The assignment belongs to the broader hiring pipeline. Progression depends on the stage’s completion conditions and process configuration. Submitting code alone does not guarantee advancement or a positive assessment.

Building Your Code Assignment Today

The gap between companies that attract top engineers and those that repel them often comes down to assessment design. Work samples and structured discussions can provide useful evidence, but their quality depends on assessment design. But the format only works when you respect the candidate’s time, publish your criteria, and provide feedback.

Start with the seven rules. Enforce a time limit. Provide a starter template. Publish your rubric. Give feedback. Offer alternatives. Pay for extensive work. Use a real development environment instead of a sandbox.

Kit automates the operational overhead so you can focus on designing great assessments rather than managing repositories and deadlines. Start your free trial to configure repositories, deadlines, and reviews for your assignment.

Related articles

Try Kit for 30 days.

Hiring, security reports, and training in one account, for teams where none of it is a full-time job. Free for 30 days, card required. Cancel before it ends and you pay nothing.

Get started free