<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Tufan YAVAŞ</title>
    <description>The latest articles on DEV Community by Tufan YAVAŞ (@tufan_yava_090d848449dcf).</description>
    <link>https://dev.to/tufan_yava_090d848449dcf</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4134601%2F20c73132-47bd-4c3c-ba18-795534b0d353.jpeg</url>
      <title>DEV Community: Tufan YAVAŞ</title>
      <link>https://dev.to/tufan_yava_090d848449dcf</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tufan_yava_090d848449dcf"/>
    <language>en</language>
    <item>
      <title>The resume table problem: what 22,901 PDFs looked like to a parser</title>
      <dc:creator>Tufan YAVAŞ</dc:creator>
      <pubDate>Mon, 21 Sep 2026 22:24:51 +0000</pubDate>
      <link>https://dev.to/tufan_yava_090d848449dcf/the-resume-table-problem-what-22901-pdfs-looked-like-to-a-parser-2453</link>
      <guid>https://dev.to/tufan_yava_090d848449dcf/the-resume-table-problem-what-22901-pdfs-looked-like-to-a-parser-2453</guid>
      <description>&lt;p&gt;Yesterday I posted about the three steps a tracking system runs on a resume PDF: extract text, detect sections, match. Several people asked the obvious follow-up: how often does step one actually fail on real files?&lt;/p&gt;

&lt;p&gt;We now have a number. Between May and September 2026, 22,901 PDF resumes went through the free checker I run, and since May the checker inspects the file itself (column geometry, tables, fonts, header and footer bands, images, glyphs), not only the extracted text. No individual resume is quoted below; everything is a count across the whole set, and the files are deleted after 24 hours.&lt;/p&gt;

&lt;p&gt;The headline: only 5.8% of those PDFs had zero layout findings. 79.8% carried at least one major or critical finding. Here is what the findings were, and why the most common one is not the one everybody warns about.&lt;/p&gt;

&lt;h2&gt;
  
  
  The table is the real two-column problem
&lt;/h2&gt;

&lt;p&gt;Every "ATS-friendly" guide says: avoid two columns. In the data, a real two-column or sidebar layout was flagged in 8.8% of files. Serious when it happens (the parser reads left to right across both columns and glues unrelated sections together), but rare.&lt;/p&gt;

&lt;p&gt;Tables used for layout were flagged in 32.7% of files. Almost four times as often.&lt;/p&gt;

&lt;p&gt;The reason is mundane. Most people do not build a two-column resume with real text columns. They open a word processor template, and the template is a borderless table: one cell for the sidebar, one for the main content, or a row per job with the dates in the right cell. On screen it is invisible. In the PDF it is a table, and a text extractor walks a table cell by cell, row by row.&lt;/p&gt;

&lt;p&gt;Take a typical experience row:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;| Senior Backend Engineer, Acme | Jan 2023 - present |
| Led migration of the billing service to event sourcing ... | |
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Extracted, that becomes "Senior Backend Engineer, Acme Jan 2023 - present Led migration of the billing service..." if you are lucky, and "Senior Backend Engineer, Acme Led migration of the billing service... Jan 2023 - present" if the cells are emitted column-first. In the second case the date is now attached to the wrong block, and the section detector guesses a job with no dates. The human reader never sees a problem.&lt;/p&gt;

&lt;p&gt;If you want to check whether your own file has this: open the PDF, select all, paste into a plain text editor. If your dates jump around or your bullets appear before the job title, you have a table.&lt;/p&gt;

&lt;h2&gt;
  
  
  The rest of the list
&lt;/h2&gt;

&lt;p&gt;Share of the 22,901 PDFs that triggered each finding (a file can trigger several):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Decorative bullets, icons or emoji: 48.9% (minor). They tokenise as unknown characters and can break section detection.&lt;/li&gt;
&lt;li&gt;Font risk (non-standard, not embedded, or under 9 pt): 46.0% (minor). Substituted fonts shift glyph widths; small text can fall under extraction thresholds.&lt;/li&gt;
&lt;li&gt;Non-standard section headings: 39.2% (major). Headings are matched against a list. "Professional Journey" can hide the whole experience block.&lt;/li&gt;
&lt;li&gt;Table used for layout: 32.7% (critical).&lt;/li&gt;
&lt;li&gt;Hyperlinks with hidden URLs: 32.5% (info). The target survives in the PDF; a printed or flattened copy loses it.&lt;/li&gt;
&lt;li&gt;Inconsistent or unsafe date formats: 31.4% (major). Parsers infer the pattern from the first date and can blank later entries.&lt;/li&gt;
&lt;li&gt;Contact details in the header or footer band: 22.1% (major). Many parsers only read the body layer.&lt;/li&gt;
&lt;li&gt;Images in the skills area (skill bars, rating dots): 16.3% (major). The image is stripped; the skill and its level are gone.&lt;/li&gt;
&lt;li&gt;Ligature or private-use glyphs: 11.5% (minor). "office" can come out as "oce".&lt;/li&gt;
&lt;li&gt;Two-column or sidebar layout: 8.8% (critical).&lt;/li&gt;
&lt;li&gt;Image-only file: 4.0% (critical). No text layer at all.&lt;/li&gt;
&lt;li&gt;Sub-readable hidden text under 4 pt: 1.4% (major). Keyword stuffing; recruiters who notice treat it as a red flag.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Two things stand out for developers specifically. The skill bar (16.3%) is a habit that comes from portfolio templates, and it deletes exactly the information a technical screen filters on. And the hidden-URL link (32.5%) is worth a second look: "GitHub" as a link text with the URL hidden is fine in a PDF viewer, but if the file is ever converted to text or printed, the reviewer has a word and no address. Print the URL.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the clean 5.8% have in common
&lt;/h2&gt;

&lt;p&gt;The files with zero layout findings were not fancy. Single column. Standard section names (Experience, Education, Skills, Projects). A system font at 10 to 12 pt. Plain round bullets. Contact details in the first lines of the body, not in the header. One date format throughout. That description covers the fix for roughly 80% of the findings above.&lt;/p&gt;

&lt;p&gt;None of this requires a tool. If you already have a resume, the select-all-and-paste test takes a minute and catches the table problem, the header problem and the column problem. The checker adds the score, the extracted text and the list of findings for your specific file, without an account.&lt;/p&gt;

&lt;p&gt;The full report, including the content findings (63.4% of resumes list a skill in the Skills section and never use it anywhere else), the score distribution and the methodology, is here: &lt;a href="https://owlapply.com/en/blog/ats-resume-statistics" rel="noopener noreferrer"&gt;https://owlapply.com/en/blog/ats-resume-statistics&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Disclosure: I am the founder of OwlApply, the checker these numbers come from. The parsing behaviour described here is common to the major tracking systems, not specific to our tool.&lt;/p&gt;

</description>
      <category>career</category>
      <category>resume</category>
      <category>jobsearch</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How an ATS actually reads your developer resume PDF (and how to check it in two minutes)</title>
      <dc:creator>Tufan YAVAŞ</dc:creator>
      <pubDate>Sun, 20 Sep 2026 21:23:51 +0000</pubDate>
      <link>https://dev.to/tufan_yava_090d848449dcf/how-an-ats-actually-reads-your-developer-resume-pdf-and-how-to-check-it-in-two-minutes-3noj</link>
      <guid>https://dev.to/tufan_yava_090d848449dcf/how-an-ats-actually-reads-your-developer-resume-pdf-and-how-to-check-it-in-two-minutes-3noj</guid>
      <description>&lt;p&gt;Every few weeks someone posts a resume in r/EngineeringResumes that looks great and gets no callbacks. The usual advice is "quantify your impact". Sometimes the real answer is more boring: the tracking system never read the document properly.&lt;/p&gt;

&lt;p&gt;Here is what happens to your PDF after you click Apply, and how to see it yourself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: text extraction
&lt;/h2&gt;

&lt;p&gt;The parser does not look at your resume. It extracts a character stream from the file, in whatever order the PDF stores it. For a single-column document written in a word processor that order matches reading order. For anything with columns, text boxes, tables or icons it often does not.&lt;/p&gt;

&lt;p&gt;Common failure modes I see in developer resumes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Two-column layout where the skills column is interleaved line by line with the experience column.&lt;/li&gt;
&lt;li&gt;Dates right-aligned with a tab stop, which some parsers read as a separate paragraph.&lt;/li&gt;
&lt;li&gt;Section headings rendered as icons (a wrench for Skills, a graduation cap for Education). The icon is an image; the parser sees no heading.&lt;/li&gt;
&lt;li&gt;Skills as a bar chart. "Python ██████░░" extracts as "Python" and a row of box characters.&lt;/li&gt;
&lt;li&gt;Contact details in the page header. Some parsers skip headers and footers entirely.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 2: section and field detection
&lt;/h2&gt;

&lt;p&gt;From the character stream the parser guesses sections and then fields: job title, employer, start date, end date. It uses heading names and patterns. "Experience", "Work Experience", "Professional Experience" all work. "Where I made a dent" does not. Company on one line, title on the next, dates on a third is fine. Title and company on the same line separated by a pipe is usually fine. Dates in a separate column are the classic breaker.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: matching
&lt;/h2&gt;

&lt;p&gt;Only now does keyword and skills matching happen, against the text the parser managed to structure. If your Kubernetes experience lives in a paragraph the parser assigned to the wrong job, it is still there for a human reader but may score as missing for the filter.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to check your own file
&lt;/h2&gt;

&lt;p&gt;Two options.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The manual one:&lt;/strong&gt; open your PDF, press Ctrl+A, paste into a plain text editor. Read it top to bottom. If the order is wrong for you, it is wrong for the parser.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The faster one:&lt;/strong&gt; upload the file to an ATS checker that shows the extracted text. I run one at OwlApply: &lt;a href="https://owlapply.com/en/ai-tools/resume-checker" rel="noopener noreferrer"&gt;ATS resume checker&lt;/a&gt;. It is free, needs no account, and returns the ATS score, the plain text a tracking system pulls from your file, and a list of what breaks parsing. Files are deleted after 24 hours. Content rewrite suggestions are part of the paid plan, but the parsing view, which is the part this post is about, is not.&lt;/p&gt;

&lt;h2&gt;
  
  
  What good looks like
&lt;/h2&gt;

&lt;p&gt;If you want reference points, the &lt;a href="https://owlapply.com/en/resume-examples/software-engineer" rel="noopener noreferrer"&gt;20 software engineer resume examples&lt;/a&gt; on the same site all pass the three steps above and cover full-stack, front-end, back-end, mobile, DevOps, QA, cloud and a few more. Each opens in the editor for free.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: I am the founder of OwlApply (2024). The three-step description applies to every tracking system I have looked at, not just to our checker, so the Ctrl+A test is worth doing even if you never open our site.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>career</category>
      <category>resume</category>
      <category>jobsearch</category>
    </item>
  </channel>
</rss>
