6 min read
On this page

What Companies Actually Look For

Most candidates assume interviews are about proving you can code. They are not. Companies are trying to answer a different question: "Would I want this person on my team, working on hard problems, for the next two years?" Coding ability is necessary but not sufficient. What separates hires from rejections is the signal you give across five dimensions that interviewers are trained to evaluate.

The Five Dimensions of Signal

Every major tech company trains interviewers to evaluate some variation of these five areas:

1. Problem-solving approach
2. Technical communication
3. Code quality & engineering judgment
4. Collaboration & coachability
5. Handling ambiguity & uncertainty

Getting a "strong hire" requires positive signal in most of these, not perfection in one.

Problem-Solving Approach

This is not "did you get the answer." It is "how did you get there." Interviewers are watching your process:

  • Do you break the problem into smaller pieces?
  • Do you consider multiple approaches before committing?
  • Do you identify edge cases before writing code?
  • When stuck, do you reason methodically or thrash randomly?
  • Can you estimate complexity before implementing?
What interviewers write in positive feedback:
  "Candidate immediately identified this as a graph problem.
   Considered BFS and DFS, chose BFS because the problem asked
   for shortest path. Drew out a small example before coding."

What interviewers write in negative feedback:
  "Candidate jumped into coding without discussing approach.
   When the first attempt didn't work, tried random modifications
   rather than stepping back to analyze the issue."

The strongest signal comes from how you handle problems you have not seen before. Memorized solutions are easy to spot — the candidate jumps to the answer without the intermediate reasoning. Interviewers are explicitly trained to watch for this, and many will ask follow-up modifications specifically to break rehearsed answers.

Technical Communication

You must think out loud. This is non-negotiable. Silent coding is the single most common reason otherwise-competent engineers get rejected.

What good technical communication looks like:

  • Restating the problem in your own words to confirm understanding
  • Explaining your approach before writing any code
  • Narrating decisions as you make them: "I'll use a hash map here because we need O(1) lookups"
  • Calling out tradeoffs: "This uses more memory but avoids the nested loop"
  • Flagging uncertainty: "I think this is correct for negative numbers, but let me trace through an example"
Good communication example:
  "So the problem is asking for the longest substring without
   repeating characters. My first thought is sliding window —
   we maintain a window that's always valid, and expand or
   contract it. I'll use a hash set to track what's in the
   current window. Let me trace through 'abcabcbb' to verify
   the approach before coding..."

Bad communication example:
  [silence for 3 minutes]
  "Okay, I think I have it."
  [writes 30 lines of code in silence]
  "Done."

Even if the silent coder's solution is correct, the interviewer has no signal to write about. Their feedback will say "could not assess problem-solving approach" which reads as a no-hire to a committee.

Code Quality & Engineering Judgment

Interviewers are not expecting production-grade code in a 45-minute window. But they are looking for evidence that you write clean code when it matters.

What counts as positive signal:

  • Meaningful variable names (not i, j, temp for everything)
  • Logical function decomposition — extracting helpers when a function gets too long
  • Consistent style — pick a convention and stick with it
  • Handling edge cases (empty input, single element, negative numbers)
  • Testing your own code by tracing through examples

What counts as negative signal:

  • Variable names like a, b, res, ans with no context
  • One giant function with deeply nested control flow
  • No error handling or edge case consideration
  • Debugging by randomly changing things until it works
  • Never testing the code after writing it
Engineering judgment example:
  Interviewer asks you to design a function that processes
  a list of user events.

  Weak approach: Write everything inline, handle all cases
  in one massive if/else chain.

  Strong approach: Identify distinct event types, suggest a
  strategy pattern or dispatch table, explain why you'd
  separate validation from processing in production but will
  keep it simple for the interview.

The interviewer is extrapolating from your interview code to how you would code on their team. Give them evidence that you think about maintainability, even if you simplify for the interview context.

Collaboration & Coachability

Interviews are collaborative, not adversarial. The interviewer often has hints prepared and wants to give them. How you respond to hints is a strong signal.

Positive signal:

  • Asking clarifying questions before starting
  • Responding to hints with "that's a good point, let me think about how that changes my approach"
  • Being open to correction without becoming defensive
  • Treating the interviewer as a colleague, not an adversary
  • Admitting when you do not know something

Negative signal:

  • Refusing hints or getting defensive when redirected
  • Arguing with the interviewer about the problem statement
  • Pretending to know something you clearly do not
  • Never asking questions — just assuming
What interviewers write about collaboration:
  Positive: "When I hinted that a stack might help, candidate
  paused, considered it, and incorporated the idea smoothly.
  Felt like working with a thoughtful teammate."

  Negative: "Candidate seemed frustrated by my suggestion and
  continued with their original approach. When it didn't work,
  they still resisted changing direction."

Coachability matters because it predicts how someone will behave during code reviews, design discussions, and incidents. An engineer who cannot take feedback in an interview will not take it on the job.

Handling Ambiguity & Uncertainty

Real engineering work is ambiguous. Requirements are incomplete. The right approach is unclear. Interviewers deliberately leave problems underspecified to see how you handle it.

What strong candidates do:

  • Ask clarifying questions: "Can the input contain duplicates? Negative numbers? Can it be empty?"
  • State assumptions explicitly: "I'll assume the input fits in memory. If not, we'd need to stream."
  • Propose solutions with tradeoffs: "Approach A is simpler but O(n^2). Approach B is O(n) but uses more space. Which matters more for this use case?"
  • Adapt when requirements change mid-problem: "Got it, so now we also need to handle concurrent access. Let me rethink the data structure."

What weak candidates do:

  • Start coding immediately with no questions
  • Assume the problem is exactly like a LeetCode problem they memorized
  • Freeze when the interviewer changes a constraint
  • Treat ambiguity as a trick rather than a feature
Example of handling ambiguity well:
  Problem: "Design a function that finds nearby restaurants."

  Strong response:
  "A few questions first. What does 'nearby' mean — a fixed
   radius, or k nearest? Are we working with a pre-built
   spatial index, or raw lat/long data? What's the expected
   data size — thousands or millions of restaurants? And do
   we need to handle real-time location updates?"

  Weak response:
  "Okay, I'll sort all restaurants by distance and return
   the first 10." [no questions asked]

Anti-Signal: What Gets You Rejected

Interviewers are also trained to watch for red flags. Any one of these can turn a borderline candidate into a reject:

Anti-signal                          What the interviewer thinks
────────────────────────────────────────────────────────────────
Memorized solutions                  "Can't actually problem-solve"
Silent coding                        "Can't assess their thinking"
Giving up after 5 minutes            "Low persistence, won't push
                                      through hard problems on the job"
Not asking any questions              "Not curious, not engaged"
Blaming past teammates               "Will be toxic on the team"
Overconfidence with wrong answers    "Dangerous — wrong and sure of it"
Dismissing the interviewer's hints   "Not coachable"
Lying about experience               "If they lie here, they'll lie
                                      about project status too"

What the Feedback Form Looks Like

Most companies use a structured rubric. Here is a representative example:

Category              Rating (1-4)    Notes
───────────────────────────────────────────────────
Problem solving       ___             How they approached the problem
Coding ability        ___             Code quality, correctness, speed
Communication         ___             Explained thinking clearly
Technical knowledge   ___             Depth in relevant areas
Collaboration         ___             Took hints, asked questions

Overall: Strong Hire / Hire / Lean No Hire / No Hire

Justification (required, 3-5 sentences):
  Specific examples of positive and negative signal.

The justification section is what the hiring committee actually reads. Generic feedback like "seemed smart" or "was friendly" carries no weight. Specific, observable behavior is what drives decisions: "Identified the optimal approach without hints, communicated tradeoffs between time and space, and proactively tested edge cases."

How to Give Strong Signal

Knowing what they evaluate lets you be intentional about demonstrating it:

Before the interview:
  - Practice thinking out loud while solving problems
  - Prepare clarifying questions you commonly ask
  - Practice recovering from being stuck (this is trainable)

During the interview:
  - Restate the problem to show understanding
  - Ask 2-3 clarifying questions before coding
  - Discuss 2 approaches and pick one with reasoning
  - Narrate while coding
  - Test your solution before declaring it done
  - Be visibly open to hints and feedback

Common Pitfalls

  • Optimizing for speed over signal: Rushing to a solution in 10 minutes gives the interviewer nothing to evaluate for the remaining 35. A thoughtful 30-minute solution with clear communication is better than a fast, silent one.
  • Studying only algorithms: Behavioral rounds, system design, and communication skills are equally weighted. Candidates who only grind LeetCode are unprepared for half the interview.
  • Confusing "hard" with "good": Interviewers are not impressed by unnecessarily complex solutions. A clean O(n) solution beats a clever but unreadable O(n) solution every time.
  • Not practicing collaboration: Most people practice solving problems alone. But the interview is collaborative. Practice with mock interviews where someone gives you hints and changes requirements.

Key Takeaways

  • Companies evaluate five things: problem-solving approach, communication, code quality, collaboration, and handling ambiguity. Getting the right answer is necessary but not sufficient.
  • Thinking out loud is the single most important interview skill. Silent coding makes it impossible for the interviewer to give you a positive assessment.
  • Interviewers write structured feedback with specific examples. Make your strengths easy to document by being explicit about your reasoning.
  • Anti-signal (memorized solutions, giving up, refusing hints) actively hurts you. A candidate who struggles but communicates well often outranks one who solves the problem in silence.
  • The interview is a simulation of working together. Treat the interviewer as a colleague and the problem as a real engineering challenge, not a test to pass.