If you've ever applied to a job through a company careers page, your resume probably went into an applicant tracking system (ATS) first. There is a lot of folklore about what these systems do. This post explains the parts that matter for developers and gives you a repeatable 15-minute routine for tailoring a resume to a job ad.
What an ATS actually does with your resume
An ATS is mostly a database and workflow tool for recruiters. When you apply, it typically:
- Parses your file into fields: contact details, job titles, employers, dates, education, skills.
- Stores that parsed profile so recruiters can search and filter candidates.
- Lets recruiters search by keywords (for example
TypeScript,Kubernetes,PostgreSQL) and by filters such as location or work authorization.
Some systems also show a "match" score against the job description, but in most setups a person still reads the resumes they shortlist. That means your resume has two readers: a parser and a human who will skim it quickly.
Why parsing fails
Most "my resume disappeared" stories are really parsing problems:
- Multi-column layouts and text boxes. Parsers often read left to right across columns, so your skills sidebar ends up mixed into your job history.
- Headers and footers. Contact details placed only in a header can be skipped.
- Icons and images instead of words. A GitHub logo with no URL next to it is invisible to a parser.
- Unusual section names. "Where I've made an impact" is harder to map than "Experience".
- Scanned PDFs. An image of text contains no text at all.
Quick test: open your PDF, select all, copy, and paste it into a plain text editor. If the order is scrambled or text is missing, a parser will struggle too.
How keyword matching works (roughly)
When a recruiter searches, or when an ATS compares your resume with the job description, it looks for the same terms appearing in both. A few practical consequences:
- Exact wording matters more than you'd expect. If the ad says "PostgreSQL" and you wrote "Postgres", some searches will miss you. Using both forms once is fine.
- Acronyms and full forms. Write "Continuous Integration (CI)" once, then use "CI".
- Skills need context. A skills list helps search, but a bullet that shows the skill in use ("Cut CI build time from 14 to 6 minutes by caching Docker layers in GitHub Actions") convinces the human reader.
- Stuffing backfires. Pasting the job ad in white text or repeating a keyword 20 times may fool a crude score, but the recruiter who opens your resume will notice.
A 15-minute tailoring routine
- Extract the keywords from the ad. Copy the job description and list the technologies, tools, methods and responsibilities it mentions. Put the ones that appear more than once, or in the requirements section, at the top.
- Mark what you can honestly claim. For each keyword: do you have real experience with it? If not, leave it out. Interviews will find the gap anyway.
- Mirror the wording. Use the ad's exact terms for the skills you do have, in your skills section and in at least one bullet.
- Rewrite two or three bullets for this role. Lead with the outcome, then the how: "Reduced API p95 latency by 40% by adding Redis caching to the product search endpoint."
- Check the result. Paste the resume and the job description side by side and confirm the most important terms appear. Then read it once as a human: does the first third of the page make the case?
Tools that help (free)
- Plain text check: the copy-paste test above costs nothing and catches most parsing problems.
- Keyword extraction: SmartJobTools ATS Keywords pulls and ranks the keywords from a job description, which speeds up step 1. (Disclosure: I build SmartJobTools. It's free and needs no account.)
- Resume vs job description check: the SmartJobTools ATS Resume Checker takes a PDF or DOCX plus the job description and returns a score out of 100, the keywords you're missing and a prioritized list of fixes. Treat the score as a guide to what to fix first, not a prediction of whether you'll get an interview.
- Open-source builders such as Reactive Resume, JSON Resume or RenderCV produce clean, single-column PDFs that parse well.
A simple layout that works for both readers
- Single column, standard headings: Summary, Experience, Projects, Skills, Education.
- Contact details and links (GitHub, portfolio) as plain text near the top, not only in the header.
- Reverse-chronological experience with clear dates.
- A skills section grouped by type (Languages, Frameworks, Cloud/DevOps, Databases).
- One page if you have under about five years of experience; two is fine after that.
Takeaways
- Make your resume easy to parse first; most "ATS rejections" are formatting problems.
- Match the job ad's exact wording for skills you genuinely have.
- Show each important skill in a bullet with a result, not just in a list.
- Never add skills you don't have. The human reader and the interview come next.
What's the most useful resume tip you've received as a developer? I'd like to hear it in the comments.