cvmakeover.ai

Published

Functional Resume vs ATS: What a Parser Kept in 20 Layouts

A functional resume groups bullets by skill, not by job. We parsed one candidate in 20 layouts: functional versions cut every bullet loose from its job.

Two résumé pages side by side: on the left, bullet blocks hang from three dated job cards; on the right, the same bullet blocks float in loose groups while the job cards sit alone at the bottom, one block highlighted in orange

TL;DR: A functional resume groups your achievements under skill headings instead of under jobs and dates. We parsed one fictional candidate in 20 layouts with an open-source resume parser. The chronological and combination versions kept all 6 bullets attached to their jobs. No functional version attached a single achievement to a real job, and the worst ones returned no dated jobs at all. If you want a skills-first page, use a combination layout and keep the dated jobs.

What is a functional resume, and how is it different from chronological?

Functional resume: a resume that groups achievements under skill headings (for example "Project Coordination") and lists employers briefly at the bottom, or not at all, instead of describing each job in date order.

The format exists for a reason. The University of Iowa's Tippie Career Services still teaches it in its 2024 "Resume Rehab" slides, which call it "particularly useful for those who are changing careers, have gaps in their employment history, or have diverse work experiences." The problem is what software does with it. An applicant tracking system stores your resume as fields, and the fields a parser fills are built around positions: a title, an employer, a start date, an end date, and the bullets that belong to that job.

LayoutOrder on the pageWhere your bullets sitBest for
ChronologicalJobs newest first, each with title, employer, datesUnder the job they happened inMost applicants
FunctionalSkill groups first, short job list (or none) lastUnder skill headings, detached from jobsRarely, see below
Combination (hybrid)A short skills block, then full dated jobsUnder the job, with a summary of highlights on topCareer changers, people with gaps

The real difference is whether each achievement is tied to a dated job. That link is what our test measured.

How we tested: one candidate, 20 layouts

On 13 October 2026 we built one fictional resume for Jordan Ellis, an operations coordinator with three jobs: Operations Coordinator (Apr 2021 – Present), Office Administrator (Aug 2018 – Mar 2021) and Customer Service Representative (Jun 2016 – Jul 2018). Each job has two bullets, six in total, and the date ranges add up to 122 months. Every file carries the same text; only the arrangement and the headings change.

We rendered each layout as a single-column US Letter PDF in Helvetica with @react-pdf/renderer 4.9.0 and parsed it with the OpenResume parser at commit 4f8255a, run in Node with pdf.js 3.7.107. The parser's own page says it "is designed to parse single column resume in English language", which our files are. We also extracted each PDF with pdftotext 24.02: all six bullets were present in the text layer of every file, so any loss below happened in how the parser structured the text, not in reading it.

The 20 distinct files fall into four cuts:

  • Main layouts (4): chronological, combination, functional with a short work-history list, functional with no list.
  • Name of the skills section (6): four alternatives to the default "Relevant Skills" ("Relevant Experience", "Professional Experience", "Skills & Accomplishments", "Core Competencies"), plus the two "experience" headings again with renamed skill groups.
  • Style of the skill-group headings (3): bold caps, plain title case, and group names without the word "project".
  • The short work-history list (7): four line formats and three heading spellings.

OpenResume does not compute total experience, so we calculated months from the date strings it extracted, using the rule Textkernel documents for its own parser (explained below). We kept the generator and parse scripts with the full output, so the test can be rerun.

Results: what the parser kept from each layout

LayoutJobs foundJobs with datesMonths of experienceBullets attached to a jobWhere the skill bullets went
Chronological33122 of 1226 of 6n/a (one skills line read as skills)
Combination33122 of 1226 of 6Skills block read as 3 skill lines
Functional, with work-history list33122 of 1220 of 6Filed as 3 "projects", first one unnamed
Functional, no work-history list000 of 1220 of 6Filed as 3 "projects"

The chronological and combination files parsed identically for work history: three jobs with correct titles, employers and dates, two bullets under each. The combination file's skills block came through as three skill lines, so the skills-first opening cost nothing.

The functional file with a two-line work-history list at the bottom still produced three dated jobs. What it lost is every achievement: the six bullets were attached to no job. The parser filed them as projects, because the first skill heading, "Project Coordination", matched its list of section keywords and started a new section. Without the work-history list, the result fell to zero jobs and zero months, and the only trace of ten years of work was three unnamed or skill-named "projects".

The "Months of experience" column is what software can compute from the extracted dates. A recruiter can still read the PDF, but search filters, rankings and pre-filled forms work from the fields.

Headings and the work-history list decide the rest

The four functional cuts show that the damage depends on two choices you control: what you call the skills block, and how you write the job list.

The skills block heading. Call it "Relevant Experience" or "Professional Experience" and the result gets worse, not better. The parser takes the first section whose heading contains "experience", "work", "employment", "history" or "job" as the work history. With skill groups named "Event & Vendor Coordination", "Scheduling & Budgets" and "Customer Service & Training" under "Relevant Experience", it returned three "jobs" whose employers were those three skill names, with no title and no dates. The real work-history list further down was ignored. With "Project Coordination" as the first group, the "experience" section was left empty and the parser found zero jobs. "Relevant Skills", "Skills & Accomplishments" and "Core Competencies" kept the three dated jobs.

The skill-group headings. Bold all-caps group names ("PROJECT COORDINATION") each became their own section, and four of the six bullets landed in sections no field reads. Bold or plain title case kept the groups together but sent them to Projects. Only group names without a section keyword put all six bullets into the skills field, still detached from any job.

The work-history list. This is where functional resumes save or lose their dates:

Work-history lineJobs foundDates kept
Title on one line, employer and dates on the next33
Operations Coordinator, Bayside Event Group, Apr 2021 – Present00
The same line with pipes instead of commas between title, employer and dates00
Operations Coordinator, Bayside Event Group (2021–present)10
Operations Coordinator, Bayside Event Group (no dates)10

The compact one-line formats returned no usable job. The year-only and no-date lines produced one "job" whose employer was the whole first line. The heading spelling mattered too: "EMPLOYMENT HISTORY" and "CAREER HISTORY" in bold caps worked, but "Work History" in title case was not recognised as a heading at all, because the parser's fallback keyword list contains neither "work" nor "history". The list was swallowed into the projects section and the file returned zero jobs.

Why this matters beyond one open-source parser

OpenResume is a small rule-based parser, and commercial parsers are built differently; we could not test them. Their documentation still describes the same dependency on dated positions.

Textkernel, a commercial parsing vendor that sells its parser as an API, defines MonthsOfWorkExperience in its v10 API reference as "the number of months of work experience as indicated by the range of start and end date values in the various jobs/positions in the resume", and adds that it is "NOT derived from text like 'I have 15 years of experience'". Each extracted skill can carry MonthsExperience and a LastUsed date, which the same reference says is "derived from position dates". A skill that appears only under a skill heading has no position to take a date from.

Textkernel's Resume Quality codes point the same way. They flag jobs missing a title or company name, jobs without start or end dates, and a missing work-history section, and code 112 notes a separate skills section with the advice that "Skills should be included in the context of work history and education descriptions." Textkernel says these codes describe how closely a resume follows machine-readable best practice, not whether the parse failed.

On the employer side, Greenhouse's Talent Matching FAQ says the feature "extracts skills, job titles, years of experience, start/end dates of employment, and company names from employment history", and that it uses only data from the resume. Greenhouse's parse-failure list includes "Resumes without clear sections and differing formats throughout each section." On Workday sites, applicants are told that a resume upload will "automatically fill parts of the application, including work history and education", according to Washington and Lee University's Workday instructions. Any job the parser did not extract is one you type in by hand.

None of this means an ATS rejects a functional resume for its layout. We found no vendor documentation of a layout-based reject rule; the documented filters are application questions, such as the work-eligibility question that Workday's admin guide scores "to filter out those who are legally ineligible to work in the country" (Workday documentation). The cost of a functional layout is quieter: missing experience months, skills with no recency, and a candidate who is harder to find in a search. Our free ATS checker flags two of the failures above, a missing Experience heading and a page with too few dates. Whether each bullet sits under its job is something to check by eye against the table above.

What to use instead of a functional resume

The combination layout keeps the advantage people want from a functional resume and loses none of the fields. Here is how to build one:

  1. Open with a short skills block of three to five lines under a heading such as "Key Skills". Lead each line with the skill and back it with a number from your jobs.
  2. List every job in full below it, newest first: title on its own line, then employer and dates as month and year.
  3. Put each achievement under the job where it happened. You can repeat the headline result in the skills block, but the bullet belongs to the job.
  4. Use plain headings in bold caps: SUMMARY, KEY SKILLS, WORK EXPERIENCE, EDUCATION. Avoid "Relevant Experience" for anything that is not a job list.

For a career change, the summary line names the target role and the skills block maps your strongest results to it; the dated jobs stay honest. For a gap, an entry in the same two-line format ("Career Break" on the first line, "Family care" and "Jan 2023 – Jun 2024" on the second) gives the parser a position instead of a hole. If you have no paid jobs at all, the problem is different: a resume with no experience works with projects, coursework and volunteer roles, each with dates. And if you want to see how parsers handle titles and dates in general, our resume parser test ran 37 single-field variants through the same tool.

What this test can't tell you

We used one parser, and an open-source one. OpenResume's section and job-title rules are simple and documented, which makes its failures easy to explain; a commercial parser may fail in different places. We could not run Textkernel, Workday, iCIMS or Greenhouse's own parsing on these files, so the vendor sections above report what their documentation says, not test results.

The sample is one fictional candidate with three jobs and six bullets, in one font, page size and PDF renderer. A two-page resume, a DOCX upload or another template could parse differently, and the months figure is our calculation, not parser output.

What the test does show is the mechanism. A parser builds work history from positions, and a functional resume takes the content out of the positions. A smarter parser may recover more dates, but it has no basis for attaching a bullet to a job the page did not connect it to.

What is the difference between a chronological and a functional resume?+

A chronological resume lists each job newest first with its title, employer, dates and the achievements from that job. A functional resume groups achievements under skill headings and lists jobs briefly or not at all, so the achievements are no longer tied to a dated job.

Do applicant tracking systems reject functional resumes?+

We found no vendor documentation of a rule that rejects a resume for its layout. In our test the cost was in the parsed fields: no bullets attached to jobs, and in some versions no dated jobs at all, which affects experience totals and search.

Is a functional resume ever a good idea?+

For an online application, a combination layout gives the same skills-first opening without losing dates. A functional page can still work as a printed handout for a networking conversation, where a person reads it and no parser is involved.

What is a combination resume?+

A combination or hybrid resume opens with a short block of key skills and then lists every job in full, newest first, with dates and bullets. In our test its jobs, dates and bullets parsed exactly like the chronological version.

Key takeaways

  • The difference that matters to software is whether each achievement sits under a dated job; a functional resume breaks that link by design.
  • In our 20-layout test, chronological and combination files kept 6 of 6 bullets under their jobs and all 122 months of dates; no functional file attached an achievement to a real job.
  • A functional resume without a dated job list returned zero jobs, and a skills block headed "Relevant Experience" turned skill names into fake employers.
  • Textkernel computes experience months from position dates, not from a sentence like "10 years of experience", and Greenhouse's Talent Matching reads titles and employment dates from the resume.
  • If you want a skills-first page, use a combination layout: a short skills block, then every job in full with month-and-year dates.