Make it parse
Before a person sees anything, the ATS flattens your PDF to plain text. Fancy layouts shatter: columns interleave, text boxes vanish, tables scramble. A resume the software cannot read scores zero.
- Multi-column templates, sidebars, text boxes. They interleave into gibberish.
- Tables, graphics, skill bars, headshots. Read out of order, or invisible.
- Contact info in the header or footer. Parsers skip those regions.
- Canva or Figma "designer" resumes. Beautiful, and unparseable.
Write bullets that convert
A human skims for evidence you did real, measurable work. Every bullet answers what you did, how (which tools), and what changed. The template underneath a good one is always the same.
Accomplished X, as measured by Y, by doing Z.
Get the keywords right
Recruiters search five to ten terms at a time, and ATS ranking rewards overlap with the posting. You are not gaming a robot; you are making the words you earned match the words they search.
The quieter craft
The same experience can read as SWE or MLE, but a resume that tries to be both reads as neither.
Pick one lens and make the whole page reinforce it: which role leads, which bullets rise, which stack you emphasize, even which projects you keep. Applying to two kinds of role? Keep two versions.
My own work, each project read two ways
Same underlying work, framed for the role. The SWE reads foreground systems, serving, and infra; the MLE reads foreground data, models, and metrics. A resume commits to one of these; it does not try to be both.
Order tells a story: my DoorDash role, as it runs
- Developed 2-stage ML pipeline to infer Dasher decline reasons from NM+ delivery offers (Snowflake, PySpark).
- Benchmarked contrastive embeddings (HDBSCAN/k-means) against archetypal analysis for decline reason discovery.
- Modeled declines as blends of N continuous reasons; soft-labeled with Sonnet 4.5 for distillation into the served model.
- Trained dual-objective LightGBM (N AUC-PR decline gate, M top-1 reason head) with SHAP interpretability.
- Deployed into ____, DoorDash's core assignment system, boosting Dasher acceptance rate from N% to M%.
The highlighted N and M stand in for my real figures, and the internal system name is blanked, so the specifics stay mine.
This order builds an arc: the problem and data, the method, the model and its metrics, then the deployed business result as the payoff. The one rule, whichever way you go, is to never bury your strongest result in the middle. Leading with it suits skim-heavy recruiters; ending on it, as here, rewards anyone who reads the whole role.
Treat LinkedIn as SEO
Recruiters search LinkedIn the way they search the ATS. Set it up once, correctly, and you start getting inbound: the rare messages that skip the queue.
Referrals are the cheat code
A referral is the single biggest jump in your odds of a screen. It routes you around the cold pile and puts a name behind your file. Not all are equal: the closer the referrer to the decision, the more their word is worth.
Apply like a system
Recruiting is a race, not a deadline. Roles open early and close when the pipeline fills.
- Apply early and fast. Postings open Aug to Oct, fill rolling
- Customize per posting, batch the rest. JobRight tailors the top third
- Target 20 to 40 companies with alerts; track everything
- Volume with a referral beats volume alone
The OA gate
Do the above and OAs hit your inbox: timed tests on HackerRank, CodeSignal, Codility. The last gate before a human, and pure prep.
- NeetCode 150 / Blind 75 by pattern, not grinding
- Standard library cold: heaps, maps, sorting, strings
- Practice timed. The clock is what fails people
The ATS-ready checklist
One last gate. Run this on every resume before it goes out. Your ticks save in this browser.
What I actually use
The tools that run the funnel. Most have a free tier. They speed up the grind; they do not replace a strong resume or a real referral.