You have been applying for months. Some postings go silent, and a few come back with a rejection so fast that no human could have read the file. Your experience is real: shipped features, production incidents you fixed at 2 a.m., a stack you know well enough to teach. And still the pattern holds, which makes the obvious conclusion feel true: the resume is fine, the market is broken.
Here is the uncomfortable second possibility. A software engineer resume gets its first read in seconds, from someone comparing the top of your page against a short list of technologies in the job description. That reader is not hunting for your best achievement. They are checking whether the basics are visible where they look. And the technologies you consider too obvious to mention, the ones you buried in a Skills block at the bottom because you assumed they were obvious, are often exactly the ones being checked.
This article shows what that reader is looking for and where. You get the required first-bullet keyword sets for full-stack, backend, and frontend roles, a signal-to-line mapping table you can hold your own document against, one bullet rewritten step by step with notes on what the screener could not find, three short role examples, and a checklist to run before you hit submit.
Quick answer:A screener reads the top third of the page and the first bullet of each role, checking them against the core stack in the job description. If a full-stack resume opens without TypeScript, JavaScript, HTML, and CSS visible (backend: language, REST, SQL, cloud; frontend: framework plus markup and styling), the file reads as less relevant than it is, even when the experience is there. Use a single-column layout, put the stack in the first line of every role, and follow it with scope and outcome.
How a Software Engineer Resume Is Actually Screened
Picture the reader on the other end. They have a requisition open, a stack of applications, and a job description that names four or five core technologies. They are not evaluating your career. They are sorting files into "looks like the posting" and "not sure," and the second pile may not get a careful second pass. Nobody guarantees that a mismatch on the first line ends your candidacy, but it can lower how relevant your file looks at the exact moment relevance is being judged.
Where do their eyes land? In a fast screen, readers often start with the top third of the page and the first bullet under recent roles. That is a habit born of volume, not laziness. Visible core technologies make the file easy to validate at a glance; missing ones can force the reader to infer what you do, and everything below the fold then has to fight that inference instead of building on it.
Consider two hypothetical candidates with identical experience: four years on a web application, TypeScript on the frontend, Node services behind it, Postgres daily. Candidate A opens with "Collaborated with cross-functional teams to deliver high-impact features in an agile environment." Candidate B opens with "Built and shipped features across a TypeScript, React, and Node.js stack with a Postgres backend, serving roughly 40,000 monthly users."
Same person, effectively. But candidate A's first line contains zero technologies, so the screener has to go looking. Under time pressure, they may not, and the file drifts to the "not sure" pile while candidate B moves forward. The difference is word order, not merit, which is the frustrating part and also the fixable part.
There is a second reader here: the parser that turns your file into database fields before a person sees it. It does not judge you, but it can mangle you. Text trapped in a sidebar, a text box, or a graphic can land in the wrong field or drop out of the extracted text. Systems differ and none publish their rules, so write a document that is trivially easy to read in plain text order. More on that below and in our guide to ATS friendly resume templates.
The First Bullet: Required Keywords by Specialization
The most common objection here is that listing HTML and CSS looks junior. That worry is understandable and, in the screening moment, backwards. The screener is not grading your taste. They are confirming that the posting's stated requirements appear in your document. If the posting names HTML and CSS and your resume does not, the reader has no way to distinguish "obviously knows it" from "does not do frontend work."
So the rule for the first bullet of your most recent role: name the stack the posting names, in the words the posting uses, attached to something you actually built. Not a keyword dump. A sentence that happens to contain the right nouns. Everything else still lives in Skills and later bullets, but the first line carries the identification load.
Read the left column as a signal the job description sends, and the role columns as the line that answers it.
Job description signal
Full-stack resume line
Backend resume line
Frontend resume line
Core language
"Features in TypeScript and JavaScript across client and server"
"Services in Python (or Java, Go, C++) for a production platform"
"Interfaces in TypeScript and JavaScript for a customer-facing app"
Framework
"React on the frontend, Node.js and Express behind it"
"Django (or Spring Boot, FastAPI) for HTTP services and jobs"
"React (or Vue, Angular) with component-level state management"
Markup and styling
"HTML and CSS for responsive, accessible layouts"
Optional; name templating if you render server-side
"HTML and CSS, responsive breakpoints, design-system tokens"
Data layer
"PostgreSQL schema design and query work behind the app"
"SQL schema design, indexing, and query optimization"
"Consumed REST and GraphQL APIs with client-side caching"
Service boundaries
"REST APIs consumed by web and mobile clients"
"REST API design, versioning, and contracts across services"
"REST integration with error and loading state handling"
Cloud and deploy
"Deployed to AWS with CI/CD through GitHub Actions"
"AWS (or GCP, Azure) with Docker and CI/CD pipelines"
"Shipped through CI/CD to CDN-backed hosting"
Scale or scope
"App serving [N] monthly users across [N] teams"
"Service handling [N] requests per day at [N]ms p95"
"Interface used by [N] weekly active users"
Two notes. The technology names are placeholders for yours: swap in your real stack, keep the shape of the sentence. And the scope numbers in the last row are what most engineers skip, though they are what turns a keyword line into a bullet worth reading. Users, requests, latency, data volume, team size: pick the one you can honestly state.
The minimum sets, stated plainly:
Full-stack. Language (TypeScript and JavaScript, or your equivalent), a frontend framework, HTML and CSS, a backend runtime or language, a database, REST. Yes, including the parts you find obvious.
Backend. Primary language, framework, REST or gRPC, SQL and the specific database, a cloud platform, and one signal about scale or reliability.
Frontend. Language, framework, HTML and CSS with a named styling approach, API integration, testing, and browser or performance work if the posting mentions it.
For a niche stack, the same structure holds with different nouns. A C++ engineer's first bullet still needs the language, the domain (embedded, trading systems, graphics, simulation), the build and toolchain, and a scope number. What varies is the vocabulary, not the pattern.
Pulling those exact words out of a posting is its own skill, and there is a real line between matching a job description and stuffing it. We cover the extraction method separately in how to pull resume keywords from a job posting.
Before and After: Rewriting One Bullet
Take a bullet of the kind that shows up in most engineer resumes. This one is invented for the article, but the failure mode is the common one.
Before: "Worked with the team to improve application performance and fix bugs, resulting in a better user experience."
Now read it the way a screener does, with a job description in hand that asks for TypeScript, React, Node.js, PostgreSQL, and AWS.
What the screener was looking for and did not find:
A language. Nothing says what you write, so the reader cannot tell if this is a web app, a mobile app, or a desktop tool.
A framework. "Application" covers everything from a React SPA to a Rails monolith to an internal macro.
A data layer. Performance work almost always touches queries, caching, or payload size, and none of it appears.
Scope. "The team" could be two people or two hundred. "Application" could serve twelve users or twelve million.
A result. "Better user experience" is a claim without a measurement, so it reads as filler rather than evidence.
The underlying work was real. Performance improvement is a strong story; the bullet just refuses to tell it.
After: "Cut median page load from 4.1s to 1.3s on a React and TypeScript app serving [N] monthly users, by adding PostgreSQL indexes, moving image processing to a Node.js background worker, and caching API responses at the AWS CDN layer."
What changed, and why:
The stack moved to the front half of the sentence. React, TypeScript, PostgreSQL, Node.js, and AWS now sit in the first line the screener reads, tied to work rather than listed loose.
The vague verb became a measured one. If you do not have exact figures, use an honest range or a directional statement you can defend in an interview. Do not invent precision.
Scope became explicit. A placeholder stands in here; on your resume it is a real number.
The how became specific. Indexes, a background worker, and CDN caching are concrete decisions that give an interviewer somewhere to push, which is the point.
What got cut. "Worked with the team" and "resulting in a better user experience" are gone. Collaboration is assumed in every engineering job, and the outcome is now implied by the numbers.
The length roughly doubled, and that is fine. This is the first bullet of your most recent role, doing more work than any other line in the document. Later bullets can be shorter. For more rewrites in this format, see our collection of before and after resume examples.
Three Short Resume Examples: Full-Stack, Backend, Frontend
These are fragments, not templates: a summary, the first role, and a Skills block. The point is the difference in phrasing between specializations. Bracketed values are placeholders for your own numbers, and none of these describe a real person or company.
Full Stack Developer Resume Example
Summary. Full-stack engineer with [N] years building web applications in TypeScript, React, Node.js, and PostgreSQL. Owns features end to end, from schema design through UI, with responsibility for deploys on AWS.
Senior Software Engineer, [Company], [Dates]
Built and shipped customer-facing features across a TypeScript stack: React and HTML/CSS on the frontend, Node.js and Express behind a REST API, PostgreSQL for persistence, deployed to AWS through GitHub Actions. Product served [N] monthly active users.
Redesigned the checkout data model, cutting order-write latency from [X]ms to [Y]ms and removing a class of duplicate-submission bugs.
Summary. Backend engineer with [N] years designing and operating Python services on AWS. Focused on API design, SQL performance, and keeping systems observable under load.
Backend Engineer, [Company], [Dates]
Designed and maintained REST APIs in Python and FastAPI backed by PostgreSQL, running in Docker on AWS ECS, serving [N] requests per day at [X]ms p95.
Reduced database load [N]% with composite indexes, batched reads in place of N+1 query patterns, and a Redis cache with explicit invalidation rules.
Summary. Frontend engineer with [N] years building accessible React interfaces in TypeScript. Comfortable owning HTML and CSS architecture, performance budgets, and the API contracts a UI depends on.
Frontend Engineer, [Company], [Dates]
Built responsive, accessible interfaces in TypeScript, React, HTML, and CSS for a product used by [N] weekly active users, integrating REST and GraphQL APIs with explicit loading and error states.
Raised Lighthouse performance from [X] to [Y] by code-splitting routes, deferring third-party scripts, and serving images in modern formats at responsive sizes.
Read the three side by side and the pattern is visible. Each first bullet names the language, the framework, the interface between systems, and the deployment or scale context, in that order, ending in a number. Your version should be recognizable as the same shape with your nouns in it.
Format, Layout, and Skills: Why Boring Wins
A lot of engineers spend an evening on a two-column template with icons and a skills bar chart, then get told to throw it out. That advice deserves a reason rather than a rule. A resume passes through two readers with different needs, and decoration helps neither: a parser wants a predictable top-to-bottom text flow, and a human under time pressure wants to find the stack without hunting. Multi-column layouts complicate both.
Nobody can tell you a designed template is always discarded, because behavior varies across systems and no vendor publishes its parsing rules. What you can say is that a plain layout removes a category of risk at no cost, while a decorated one adds risk in exchange for aesthetics the screener did not ask for.
The working rules:
One column, top to bottom. Contact, summary, skills, experience, education. No sidebars, no text boxes, no tables holding your work history.
Real text, not graphics. Skills inside an image or icon set may not survive extraction, and rating bars communicate nothing anyway.
Standard section headings. "Experience," "Skills," "Education." Clever labels like "My Journey" force both readers to guess.
Standard fonts and sizes. 10 to 12 point body text, one font family, generous margins.
DOCX or PDF, named clearly. [Firstname]-[Lastname]-Resume is enough. If the posting names a format, use that one.
Skills block near the top. Under the summary, above your first role, inside the region that gets scanned. A skills list on the bottom of page two is technically present and practically invisible.
Skills list, not skills prose. Comma-separated, grouped loosely by category, no proficiency labels.
Reverse chronological order. Functional resumes that obscure dates can raise avoidable questions.
Two pages maximum, one page early in your career. Depth on recent roles, brevity on old ones.
One more thing about Skills: it supports the first bullet and does not replace it. A screener reading your most recent role may not scroll back up to cross-reference the Skills block. If React appears only there and never in a bullet, the reader has no evidence you shipped React in production, only that you claim to know it.
If applications keep going quiet after the format is clean, the problem may sit elsewhere in the funnel, and why your resume is not getting interviews works through the rest of it.
FAQ and Final Checklist
Is there a software engineer resume template I should use?
Use the plainest single-column layout you can find or build: contact, summary, skills, experience, education. The structure in the three examples above is the whole template, and the value sits in the first bullet of each role, not in the container. Our ATS friendly resume templates guide covers safe layouts in more detail.
What goes in an entry level software engineer resume with no degree?
Treat your strongest project as a role: a title, a date range, and a first bullet shaped like a job bullet, with stack, what you built, who used it, and what changed. Bootcamp and self-taught paths are not automatically filtered out, but a project described as coursework reads weaker than the same project described by its stack and its users. Building a resume with no experience goes deeper.
How long should a software engineer resume be?
One page early in your career, two after roughly five years, rarely more. The worry that detailed bullets balloon the document is fair, but detail and length are different things. Three strong bullets on your current role plus two on each older role is denser and shorter than eight vague ones.
What if I work in C++ or another niche stack?
The pattern holds; only the vocabulary changes. Name the language, the domain (embedded, trading, graphics, simulation), the toolchain and build system, the concurrency or performance work that defines the job, and a scope number. Match the nouns to the posting rather than to what general web-dev advice assumes.
Do I have to repeat my stack in every role?
Name it in the first bullet of every role, since screeners check the current position and often one before it. It will not read as repetitive if the surrounding content differs, and the stack usually did differ between jobs. If two consecutive roles shared a stack, vary the emphasis: architecture in one, scale or reliability in the other.
Are these technical details not something we cover in the interview?
They are, and that is the problem: the interview happens after the screen. The screening read decides whether anyone gets to ask about your work at all. Details in the bullet buy the conversation where the deeper details come out.
How many versions of my resume do I need?
Keep one comprehensive master document, then produce a targeted version per application by selecting from it and reordering the first bullets. That is minutes per application, not an evening. See building a master resume and tailoring a resume to a job description.
First Bullet Checklist
Run this against your document before you submit. Open the job posting next to it.
The first bullet of your most recent role names your primary language, in the posting's words.
It names your framework, and the framework the posting asks for if you have used it.
For full-stack and frontend roles, HTML and CSS appear in a bullet, not only in Skills.
The data layer is named specifically: PostgreSQL, MySQL, MongoDB, not "databases."
The service boundary is named: REST, GraphQL, gRPC, message queues.
The cloud platform and deployment path appear if the posting mentions them.
There is a scope number: users, requests, latency, records, or team size.
There is an outcome, measured or honestly estimated, not asserted as "improved."
Every core technology in the posting's requirements section appears somewhere in your document.
The layout is a single column with real text, and the Skills block sits above your first role.
Nothing in the file is a claim you could not defend in a forty-minute conversation.
If a line fails one of these, fix that line rather than rewriting the document. The first bullet of your current role carries the most weight; the rest of the page mostly needs to stay out of its way.
A repeatable method for extracting keywords from a job posting: what to copy word for word, what to rephrase, and where each term belongs on the page. Includes an extraction worksheet, a placement map, and a five-minute stuffing check.
A five-minute routine for tailoring a resume: pull the real requirements out of the posting, change four things, and leave the rest alone. Includes a priority table, a master resume workflow, and a reusable checklist.
A practical look at what makes a resume template parse cleanly, with five layouts you can rebuild yourself and a 12-point check to run before you apply.
What to put on a first resume when you have never held a paid job, including 20 things that count as experience and a section order for four different situations.