ATS-Friendly Resume Formatting for Engineers: What Actually Breaks Parsing
“ATS-friendly” has become resume-coach folklore: half-remembered rules, fictional auto-rejection algorithms, and templates marketed as ATS-proof that frequently aren’t. The reality is more mundane. Applicant tracking systems are databases that index your application; they don’t reject you on their own. They do parse your resume into structured fields, and parsing failures cause your data to land in the wrong sections, where recruiters searching the database don’t find you. This guide covers what actually breaks ATS parsing in 2026, what doesn’t, and how to format an engineer’s resume so it survives the pipeline cleanly.
What ATS Software Actually Does
Greenhouse, Lever, Workday, Ashby, iCIMS, Taleo, and a handful of other systems handle the majority of corporate applications. They share a common pipeline:
- You submit a PDF or DOCX file (and sometimes also fill in form fields manually).
- The ATS runs a parser that extracts structured fields: name, email, phone, education entries (school, degree, dates), work history (company, role, dates, description), skills.
- The parsed data is stored in the recruiter database, alongside the original file.
- Recruiters search the database with filters (“5+ years experience, Python, distributed systems, located in NYC”). Resumes matching the filters appear in search results.
- The recruiter clicks through to see your actual resume in their viewer; the ATS often highlights matched keywords.
The failure mode that costs you interviews: parsing errors put your work history under “Skills,” your skills under “Education,” or fail to extract your role title entirely. Recruiter searches against structured fields then miss you. Your resume PDF still exists in the system, but no human ever views it.
The Myths
“ATS auto-rejects below a keyword match score”
Largely false at major tech companies. The big players use ATS as a database, not as an automated filter. There are smaller / lower-tier employers that do use scoring filters, but at FAANG, AI labs, top startups, and major banks, your resume is filtered by humans on top of the database, not by an algorithm rejecting it before a human looks.
“You need to keyword-stuff to match”
Counterproductive. Recruiters spot keyword stuffing immediately: a “Skills” section listing 80 technologies, or invisible white-on-white text padding the keyword density. Both signal “low-quality candidate trying to game the system.” Include relevant keywords in the natural context of your bullets and a focused skills section; that’s enough.
“Submit only PDFs”
It depends. PDFs preserve formatting; DOCX files are more reliably parsed by some older ATS systems. Most modern systems (Greenhouse, Lever, Workday) parse PDFs reliably as long as the PDF was generated from text (not a scanned image). If you hand-build your resume in InDesign and export as PDF, parsing risk is higher than a Google Docs or LaTeX export. Default to PDF unless the application form explicitly requests DOCX.
What Actually Breaks ATS Parsing
Multi-column layouts
The single biggest cause of parsing errors. ATS parsers read top-to-bottom, left-to-right, and many handle two-column layouts unpredictably. Your “Skills” sidebar can end up interleaved with your “Education” main column, scrambling the structured output. Most professional resume templates with skill bars on the left? They parse incorrectly more often than not.
Fix: single column. Sections stack vertically. Even at the cost of some visual density, single-column resumes parse cleanly.
Tables and embedded text boxes
Resumes built in Word using table cells to control layout often confuse parsers. The cell contents may be extracted out of reading order. Same for floating text boxes overlaying the page.
Fix: use plain text with section headers and tab stops. If you must use tables for visual alignment, test the parsed output (LinkedIn’s resume upload feature gives you a preview of how an ATS-class parser sees your resume; use it as a sanity check).
Headers and footers
Information placed in Word’s header/footer regions (page numbers, contact info repeated on each page) is often missed entirely or inconsistently extracted by parsers. Don’t put your contact info only in the header; put it in the body of page 1.
Graphics, icons, and images
Logos next to job titles. Icons next to phone numbers. Stylized headshots. Charts. None of this is parsed. Worse, some parsers fail loudly when they encounter unexpected image data and partially fail the rest of the page.
Fix: plain text only. No icons. No company logos. No chart-style “skill ratings.” Save the visual flourishes for designers’ resumes.
Non-standard fonts
Most ATS parsers handle the common families (Arial, Calibri, Helvetica, Times New Roman, Garamond, Inter, Computer Modern from LaTeX). Esoteric display fonts (“CalligraphyPro”) or fonts with unusual character mappings can produce garbled output. The risk is low but real.
Fix: stick to common sans-serif (Calibri, Arial, Helvetica, Inter) or common serif (Times, Garamond) families. Don’t get creative with typography.
Special characters and Unicode tricks
Bullet point characters (•) parse fine. Em dashes (—) and en dashes (–) parse fine. Smart quotes (“) occasionally cause issues. Decorative Unicode dividers (“◆ ◆ ◆”) can confuse parsers and look unprofessional anyway.
Fix: standard punctuation. Standard bullet markers. Plain ASCII where possible.
Implausible date formats
“Spring 2022 – Winter 2024” doesn’t parse cleanly. “2022 – Present” or “Mar 2022 – Present” both work. Date parsing failures mean your years-of-experience filter doesn’t match correctly.
Fix: MM/YYYY or Month YYYY format. Same format throughout the document.
What Doesn’t Break Parsing (Despite Internet Claims)
- Bullet points. Parse fine in every modern ATS.
- Bold and italic text. Parse fine; only the visual styling is dropped.
- Standard horizontal rules as section dividers. Fine.
- Two-page resumes. Parse fine. The “ATS hates two-page resumes” claim is folklore.
- LaTeX-generated PDFs. Fine, as long as the PDF contains text (which standard pdflatex output does). Avoid raster-image PDFs.
- Hyperlinks. Fine. The visible text is what’s parsed; the link is preserved as a clickable element when the recruiter views the original PDF.
The Section Structure That Parses Cleanly
For an engineering resume, this structure parses reliably:
[Name] [City, State, Country] | [Email] | [Phone] | [LinkedIn URL] | [GitHub URL] EXPERIENCE [Company Name] — [Role Title] [Start Date] – [End Date] [Location, optional] - Bullet 1 - Bullet 2 - Bullet 3 [Next Company] — [Role Title] [Start Date] – [End Date] - Bullet 1 - Bullet 2 EDUCATION [School Name] — [Degree], [Major] [Year] [GPA, optional] SKILLS [Languages]: Python, C++, Go [Frameworks]: React, FastAPI, gRPC [Infrastructure]: AWS, Kubernetes, Docker
Section headers in ALL CAPS aren’t strictly necessary; what matters is that they’re recognizable section headers (the words “EXPERIENCE”, “EDUCATION”, “SKILLS”, “PROJECTS”). Parsers look for these strings to split the document.
Sample: Before and After
Before (parses poorly): two-column resume with a left sidebar containing skills as graphic icons and a circular profile photo at the top. Section headers in custom display font. Job titles next to small icons of the company logo. Multi-column “expertise” radar chart at the bottom.
After (parses cleanly): single-column resume in Calibri 11pt. Header has name, contact info (text only), professional links (LinkedIn, GitHub) as plain hyperlinks. Section headers are bold, slightly larger, all caps. Bullets use standard hyphens or • characters. No graphics. No images. Two pages if needed; one if cleaner.
The “before” version may look more polished in PowerPoint preview; the “after” version is what gets you interviews.
Testing Your Resume Against an ATS
Three free options to sanity-check parsing:
- LinkedIn profile import: upload your resume to LinkedIn’s “import a resume” feature. The fields it auto-populates are roughly what an ATS would extract. Misparses here suggest your resume needs structural fixes.
- Jobscan: a paid service (with a limited free tier) that simulates ATS parsing and gives you keyword-match analysis against a specific job description. Use sparingly; the keyword score isn’t gospel.
- Manual test: open your PDF in a text editor or run pdftotext on the command line. The plain-text output is what an ATS parser sees. If your work history reads coherently in that output, you’re fine. If it’s scrambled, fix the layout.
Frequently Asked Questions
Can I use a designer-made resume template?
Cautiously. Most designer templates available on Canva, Etsy, or specialized “premium resume” sites use multi-column layouts, graphics, and custom fonts that hurt ATS parsing. The visual polish doesn’t help you because recruiters view your resume in the ATS’s plain viewer most of the time, not your original PDF. If you want visual polish, save it for the version you bring to onsite interviews; for online submissions, default to a clean single-column format.
What about LaTeX templates?
Generally fine, as long as you use single-column templates. Popular LaTeX résumé classes (deedy-resume, awesome-cv) come in both ATS-friendly single-column and ATS-unfriendly two-column variants. Use the single-column variant unless you have a specific reason not to. The PDF output is text-based and parses well.
Should I use a different resume for ATS submissions vs human review?
Probably not. The simpler approach: maintain one clean, ATS-friendly version and submit it everywhere. Trying to maintain two parallel versions invites inconsistencies that recruiters notice. Modern recruiters are accustomed to plain single-column resumes; they don’t penalize you for the lack of visual flourishes.
Do I need to manually fill in every form field on the application as well?
Yes. Even when you upload a parsed resume, most application forms have you re-enter work history, education, and contact info. The ATS uses the form data as the canonical source for searches; if your form data is incomplete, you get filtered out even when your uploaded resume has the information. Tedious, but necessary. Apply via referral when possible to skip this step.
How important is keyword matching to the specific job description?
Important enough to spend 15 minutes on for each application; not important enough to obsess over. Skim the JD for the specific languages, frameworks, and technologies it names. If they’re already on your resume, ensure they appear in your bullets or skills section in a form the JD’s keywords would match (e.g., the JD says “Kubernetes” and your resume says “k8s” — add “Kubernetes” too). If they’re not on your resume at all, don’t fabricate; pick a different job. Light keyword alignment, not stuffing.
See also: Software Engineer Resume Guide 2026 • Quantifying Impact on Engineering Resumes • Resume Mistakes That Get Filtered Out