Software Engineer Resume Example: Scope, Scale and Outcomes
by Larbi SahliPublished
A complete software engineer resume example with scope, scale and outcome in every bullet, plus how to shift it for backend, full stack and platform jobs.
Users have landed jobs at
- 1Password
- OpenAI
- Notion
- justworks
On this page
Most software engineer resumes describe a job description, not a career. "Developed REST APIs using Java and Spring Boot" tells a hiring manager what the team was built to do. It says nothing about what you personally owned, how big it was, or whether your work changed anything.
The fix is a discipline you can apply to every bullet: name the system you owned (scope), state how big it was (scale), and end with what changed because of you (outcome), with a number attached. A bullet that carries all three reads as evidence. A bullet missing all three reads as filler, and a resume full of filler gets skimmed once and set aside.
The example below is a mid-level backend engineer, five years across two companies, no management title. Read the bullets first. Every one of them answers the three questions a hiring manager is silently asking: what did you own, how big was it, and did it work.
What a hiring manager reads on the first pass
Before anyone reads your resume, they scan it. On that scan, a hiring manager checks four things: your current title and level, the companies behind it, the stack in your most recent role, and whether any bullet contains a number. That pass takes seconds, and it decides whether the careful read ever happens.
Each item does a specific job. Title and level answer "is this person in range for this role." The company names calibrate everything else: production scale at a company they recognize needs no explanation, while an unknown company means your stack line and your numbers have to do that work instead. The most recent stack answers "can they be productive here in the first month." And a number, any credible number, signals that you measured your work, which correlates strongly with engineers who think about impact rather than tickets closed.
Look back at the example above with that scan in mind. The title sits next to the company on one line. The stack appears directly under the most recent role, so it cannot be missed. Every role has at least one bullet with a figure in it. Nothing on the first pass requires hunting.
Write scope, scale and outcome into every bullet
Here is the difference in practice. A weak bullet:
- Worked on the payments service using Go and PostgreSQL.
The same work, written with scope, scale and outcome:
- Owned the payments service (Go, PostgreSQL) processing ~40k transactions a day; cut p99 checkout latency from 900ms to 320ms by moving fraud checks off the request path.
The second bullet is longer, and it earns every word. "Owned" establishes scope: this was yours, not something you watched a senior engineer do. "40k transactions a day" establishes scale, which lets the reader place your experience against their own systems. The latency numbers establish outcome, and the clause after "by" shows engineering judgment, which is the part an interviewer will dig into.
Two rules keep this honest. First, only claim scope you can defend in a system design interview. If you wrote one endpoint of the service, say "built the refund endpoint of the payments service," which is still specific and still yours. Second, before-and-after numbers beat single numbers. "Reduced p99 from 900ms to 320ms" is more credible than "reduced latency by 64%" because it shows you know where you started.
Aim for three to five bullets in your current role and two to four in older ones, each built this way. One vague bullet in a strong set is noise; five vague bullets are a rejection.
Numbers when you have no product metrics
"My team doesn't track revenue impact" is the most common reason engineers hand in a resume with no numbers. You do not need product metrics. Engineering work generates its own measurements, and most of them are sitting in dashboards you already have access to.
- p99 or p95 latency of a service you own, before and after your change (Grafana, Datadog, CloudWatch)
- Error rate or failed-request rate reduced
- Deploy frequency: from weekly releases to daily, or daily to on-merge
- CI build and test time cut, in minutes per run, times runs per day
- Incident count or on-call pages reduced quarter over quarter
- Percent of a migration completed, and the size of what moved (tables, services, traffic share)
- Infrastructure cost reduced, even as a percentage if the dollar figure is confidential
- Engineer hours saved per week by tooling or automation you built
- Requests per day, records processed, or data volume of the system you owned
Pull these before you leave a job, while the dashboards are still yours to read. If you are estimating after the fact, estimate conservatively and be ready to explain your math. An interviewer who asks "how did you get that number" is giving you a chance to look rigorous; an invented figure turns the same question into the end of the interview.
One number per role is the floor. If a role has zero, the fastest fix is usually the migration percentage or the build-time cut, because almost every engineer has one of those.
Where the tech stack goes
Put a one-line stack under each role, and keep a short grouped skills block near the top or bottom. The per-role line is the one that matters: it tells the reader what you used recently and in production, which is worth more than any self-assessed skills list. "Go, PostgreSQL, Kafka, Kubernetes, AWS" under a 2023-2026 role is a claim with a date and a context attached.
The skills block exists mostly for keyword matching by applicant tracking systems (ATS), the software that stores and filters applications before a human reads them. Keep it to a dozen or so entries, grouped: languages, frameworks, infrastructure. A list of 40 technologies reads as none, because the reader cannot tell your daily tools from something you touched once in a tutorial. Every hiring manager has interviewed the candidate whose resume listed eight languages and who struggled in two of them; a long list now triggers that memory.
Match the posting's spelling where it differs from yours. If the job says "Golang" and "GCP," use those forms at least once, because keyword filters match strings, not intent.
Level signals: what makes this resume read as mid-level
Level is communicated by the kind of work in your bullets, more than by years or titles. The example above reads as mid-level because of three signals.
Production ownership. The bullets describe systems the candidate ran, with on-call responsibility and outcomes measured in production. An entry-level software engineer resume leans on class projects, internships and coursework because that is what exists; keeping those front and center after two years of real ownership makes you read junior regardless of your title.
Independence without cross-team scope. Mid-level bullets say "owned," "designed," "led the migration of." Senior bullets add a second dimension: design docs that shaped other teams' work, incident command across services, mentoring named in the bullet ("onboarded and mentored 3 engineers"), influence on the roadmap. If you have those, write them, because they are the difference between a mid-level and a senior screen.
Honest verbs. "Contributed to" and "participated in" read as watching. "Owned" and "built" read as doing, and they invite the follow-up questions you want. Do not inflate: claiming senior scope you cannot defend gets exposed in the first system design round, and it burns the interview slot you worked to get.
Projects, open source and GitHub after your first job
After your first professional role, side projects have to compete with production experience for space, and production experience usually wins. A project still earns a full entry when it demonstrates something your jobs do not: a stack the target role wants that your employer never adopted, real users you can count, or a maintained open source contribution to a tool the posting names.
Everything else shrinks to one line or comes off. A tutorial-follow-along project, a hackathon app from three years ago, or an archived repo with two commits costs more credibility than it adds. The full decision framework is in our guide to listing coding projects on a software engineer resume, but the short version for a five-year engineer is: zero to two projects, each with a number or a named user base, or none at all.
The GitHub link follows the same logic. Include it in your header when the pinned repos support your story; skip it when the profile is a graveyard, because recruiters who click it will judge what they find.

Formatting so the parser and the recruiter read the same resume
The formatting rules for a software engineer resume are boring on purpose. Both readers, the ATS parser and the human, reward the same choices.
- One column. Multi-column layouts scramble reading order in some parsers and slow down human skimming.
- Standard headings: Experience, Skills, Education, Projects. A parser maps sections by heading text; "Where I've Made an Impact" maps to nothing.
- Month and year on every date (Jan 2023 - Present). Year-only dates read as gap-hiding to recruiters and parse ambiguously.
- One page for roughly the first five to eight years; two pages when a second page is full of relevant production work. The reasoning by experience level is covered in our data on whether a resume should be one page or two.
- No tables, text boxes, headers or footers carrying real content. Some parsers skip them entirely.
- Export and submit as PDF. It renders identically everywhere; a .docx reflows on whatever machine opens it. Only send .docx if an employer explicitly asks for it.
If your current resume breaks any of these, fix the structure before polishing bullets, because a resume the parser mangles never gets its bullets read. The full treatment, including how skills and keywords interact with recruiter filters, is in our guide to building an ATS-friendly software engineer resume, and the one page or two question has its own breakdown by experience level.
The same resume for backend, full stack and platform postings
The example above is one document, and it should never be sent to three different postings unchanged. The facts stay fixed. What moves is emphasis: which bullets lead, which shrink, and which words in the stack line come first. Here is how the same five years shifts for the three postings a backend engineer most often applies to.
| Posting | Move up | Cut or shrink | Stack line leads with |
|---|---|---|---|
| Backend engineer | Service ownership, latency and throughput wins, data modeling and migration bullets | Frontend contributions, internal tooling side work | Language, database, message queue (e.g. Go, PostgreSQL, Kafka) |
| Full stack engineer | Any bullet where you shipped a user-facing feature end to end, API design consumed by a frontend | Deep infrastructure bullets (cluster tuning, cost work) shrink to one line | Language plus frontend framework (e.g. TypeScript, React, Node, PostgreSQL) |
| Platform / infrastructure engineer | CI/CD improvements, deploy frequency, Kubernetes and IaC work, developer-hours-saved tooling | Product feature bullets shrink; keep one to show you understand the customers of a platform | Orchestration and IaC first (e.g. Kubernetes, Terraform, AWS, Go) |
Notice that nothing here is invented. The full stack version does not claim frontend depth the candidate lacks; it promotes the end-to-end feature work that was already true and demotes the cluster tuning. Reordering and reweighting honest bullets is tailoring. Writing new ones for a posting is fiction, and fiction on a resume gets found out in the technical screen.
Keep one base resume as the complete record and spin off a version per posting, so an edit for the platform job never quietly deletes a bullet the backend job needs.
Check the finished resume against the posting, then export a PDF
Before you send anything, read the posting once more and check three things against your document: does your title language match theirs, does every must-have technology in the posting appear somewhere credible on your resume, and does your top bullet answer the problem the posting describes.
This is the step Roleframe was built for. Duplicate your base resume for the job, paste the posting, and the fit report shows an ATS score, the exact stack and scope keywords the posting uses that your resume is missing, and a prioritized plan. Then you make the edits yourself, with Remi, its career copilot, proposing rewrites bullet by bullet and you approving each one, so every line stays something you can defend in the interview. When it reads right, export the PDF; what you see in the editor is exactly what the file contains.
Frequently asked questions
- What is the 7 second rule on a resume?
It is the widely repeated claim that recruiters spend only a handful of seconds on the first pass of a resume. Whatever the exact figure, the mechanics are real: the first pass is a scan, not a read, and it covers title, companies, recent stack and whether any number stands out. Structure your resume so those four things are findable without hunting, and the scan turns into a read.
- What skills should a software engineer include on a resume?
The ones the posting asks for that you can defend in an interview. In practice that means your primary language and framework, your database, your cloud and infrastructure tools, and version control and CI/CD, grouped into a short block of roughly a dozen entries. Mirror the posting's exact spelling for the must-haves, and put the same tools in the stack line under the role where you used them, because a skill attached to a dated production role is worth more than the same word in a list.
- Should a software engineer resume be one page or two?
One page for roughly the first five to eight years. A second page is fine once it is full of relevant production experience rather than padding; a half-empty second page reads worse than a dense single one. A five-year mid-level engineer, like the example on this page, almost always fits on one page once vague bullets are cut.
- Do I need a GitHub link on my software engineer resume?
Only if clicking it helps you. A profile with maintained, pinned repos relevant to the role supports your story; an empty or abandoned one undercuts it, and recruiters do click. Where to place the link and how to prepare the profile is covered in our guide to including a GitHub link on a resume.
- How should I write a software engineering resume in 2026?
The fundamentals have not moved: scope, scale and outcome in every bullet, a clean one-column layout, and a version matched to each posting. What has changed is that many postings now ask about AI tooling and LLM work, so if you have shipped anything with embeddings, model APIs, or AI-assisted developer tooling, write it as a normal scope-scale-outcome bullet rather than a buzzword. Our guide to adding LLM and AI experience to a software engineer resume shows how to do it without overclaiming.
- Can I use the same resume for backend, full stack and platform jobs?
Use the same facts, never the same emphasis. Keep one complete base resume, then reorder and reweight bullets per posting: latency and data work leads for backend, end-to-end feature work leads for full stack, and CI/CD and infrastructure tooling leads for platform roles. Sending the untouched backend version to a platform posting means the recruiter's first-pass scan finds none of the words the posting told you they were looking for.
Build yours on the same template.
Every example here is built on a template you can open in the editor. Start from the same layout and write your own experience into it, then download the PDF free, with no watermark.





