Resume + ATS

Why do software engineer resumes get rejected?

by Maya ChenCareer Editor
A developer workspace with code across multiple monitors
Photo by Jakub Żerdzicki on unsplash

Most software engineer resumes are rejected before a human reads them, and almost always for fixable reasons: the stack keywords don't match the job description, the bullets describe duties instead of measurable impact, the resume targets the wrong level, or the layout breaks the applicant tracking system's parser. A popular SWE posting can draw 500 to 1,000 applications, and the ATS plus a six-second recruiter skim cut that to a handful before anyone evaluates your engineering ability. The good news: nearly every common rejection cause is something you control on the page.

The funnel a SWE resume has to survive

Before your code samples, your system-design instincts, or your ability to debug a production incident matter at all, your resume has to clear two filters that measure none of those things. The first is the ATS, which parses your document into fields and scores it against the posting's keywords. The second is a recruiter who spends roughly seven seconds on each resume that survives the first cut. Rejection at either stage feels like a judgment on your ability. It almost never is.

500+
Applications a popular SWE posting can draw in days
~6–8s
Recruiter scan time per resume that clears the ATS
#1
Rejection cause: stack-keyword mismatch with the job description

The five reasons SWE resumes actually get rejected

1. Stack and keyword mismatch

This is the dominant, most fixable cause. The ATS compares the technologies in the job description against the literal text of your resume. If the posting says "Kubernetes" and you wrote "K8s," or it says "CI/CD" and you wrote "build pipelines," the match may not register — synonym handling varies by vendor and you can't rely on it. Engineers lose here constantly because they describe their stack in their own shorthand instead of the recruiter's vocabulary. The fix is to read the job description twice and mirror its exact spellings for every technology you genuinely use.

2. Duties instead of impact

"Responsible for the backend services" tells a recruiter nothing they can act on. The resumes that survive the seven-second skim lead with outcomes: latency cut, throughput raised, cost reduced, an incident class eliminated. The keyword coverage is identical either way — the difference is that one version reads as competent and the other reads as filler. A resume of pure responsibilities is technically qualified and still forgettable, and forgettable gets passed over.

3. Wrong-level targeting

Recruiters triage by level. An SWE II resume submitted to a Staff posting creates work — the recruiter has to decide whether you're a stretch worth the conversation — and under volume, the default for "creates work" is reject. The reverse hurts too: a clearly senior resume applied to a junior role reads as a flight risk or a misfire. Apply where your demonstrated scope maps. The table below shows how the rejection trigger differs by where you're aiming.

Target levelCommon rejection triggerHow to avoid it
SWE I / IINo shipped, end-to-end work; only coursework or fragments of features.Show at least one feature or project you built and shipped fully, with a result.
SeniorBullets read as task execution, not ownership; no system design or scope.Frame work as systems you owned and tradeoffs you made, with blast radius.
Staff+Impact stays at the team level; no cross-team or organizational influence.Lead with outcomes that crossed teams or changed technical direction.
AnyReaching two+ levels above demonstrated scope.Apply at the level your scope supports; reach at most one rung, and only with evidence.

4. Layout the parser can't read

Two-column resumes with a skills sidebar are the classic self-inflicted rejection. Many ATS platforms read left-to-right and either scramble the columns or drop the sidebar entirely — which is often exactly where the engineer listed their whole stack. Skill bars, rating dots, logos, tables, and text boxes are invisible to the parser. The reliably safe format is a single column of plain text, exported as a text-selectable PDF. Open your PDF and try to select a bullet; if you can't, the ATS can't either.

5. Job-hopping signal and over-length

Even a high-scoring resume can get cut at the human-skim step. The two common triggers: a tenure pattern of three or four jobs each under eighteen months, which reads as a retention risk; and a two-page resume below ten years of experience, which reads as padding and gets abandoned mid-skim. Both are addressable — explain short stints in a parenthetical (contract, acquisition, layoff), and cut ruthlessly to one page until you've earned a second.

What rejection is not

It is rarely a verdict on your engineering ability — the first two filters don't measure that. The same resume that's auto-rejected at one company often lands an interview at another with no edits, because the ATS is configured differently or the recruiter has more time that week. As Harvard Business Review's reporting on automated screening documents, a large share of qualified candidates are filtered out for keyword and formatting reasons, not lack of qualification. Treat rejection as a signal to fix the page, not to doubt the engineer.

The honest summary

Software engineer resumes get rejected mostly at two pre-human filters, and the causes are the same five every time: stack-keyword mismatch, duties instead of impact, wrong-level targeting, an unparseable layout, and a job-hopping-or-length signal. Each is fixable in an afternoon. Mirror the job description's exact technology terms, rewrite bullets around measurable results, target the level your scope supports, use a single-column parseable PDF, and explain any short tenures. Do that and you stop losing to the filter and start being judged on the work — which is where you wanted to compete in the first place.

Common questions

Why do strong engineers still get rejected by the ATS?
Because the ATS scores text matches, not engineering ability. A great engineer who writes "TS" when the job description says "TypeScript," or who buries their stack in a graphical sidebar the parser can't read, scores low regardless of skill. Competence and keyword coverage are different things, and the first filter only measures the second.
Does applying to a higher level than I am hurt my chances?
Reaching one level up occasionally works if your scope genuinely supports it. Reaching two or three levels — an SWE II applying for Staff — gets filtered out fast, because the resume reads as a mismatch the recruiter doesn't want to spend time correcting. Apply at the level your demonstrated scope actually maps to.
How much does job-hopping hurt a software engineer resume?
One short stint is normal and ignored. A pattern of three or four jobs each under about eighteen months reads as a retention risk during recruiter triage, even when the ATS score is high. If the short tenures have a clean explanation (acquisition, contract role, layoff), label it on the resume so the reader isn't left guessing.
Is a two-page resume a reason for rejection?
Two pages isn't an automatic reject, but an over-long resume with thin content is. Below about ten years of experience, two pages usually signals padding, and the reader stops skimming before reaching anything that matters. Cut to one page and lead with your strongest, most recent work.

Sources

  1. Eye-tracking study: recruiters look at resumes for 7 secondsHR Dive, 2018
  2. How to Get Hired When AI Does the ScreeningHarvard Business Review, 2025

Keep reading