Waging Bot Warfare
There’s a digital battlefield out there for all employment seekers, and it’s us against HR bots. There’s a finite limit to the number of generic rejection letters you can receive before it starts to weigh heavily on you, even if they are just emails from soulless HR bots that failed to find a keyword or two in your resume. [I received yet another while writing this very paragraph.]
Part of me feels conflicted about using AI to tailor my resume for each application. But, then again, if companies are going to use bots to filter me out, why shouldn’t I use a bot to help me pass through?
Aside from filter optimization, there’s the issue of time. It’s easily possible to spend all your time finding job postings, tailoring your resume and cover, and then actually applying, which often involves spending time inputting the exact same information that you just spent time putting into your resume. It’s a real hassle to go through just to end up with a stack of bot rejection emails for your efforts. And, quite uniquely for software developers, this takes away extremely valuable time that should be spent building things, freshening up on DSA, or staying up to date on tools that are now evolving more rapidly than ever. It’s a really tough balance to strike.
Application Template
I put in quite a bit of work to make the process as painless as possible before I even started using AI. My process is pretty basic, the foundation of which is a super solid latex template.
Example Workflow
- Build a standard generic resume and cover letter in the main/master git branch
- Run
archive.sh -c genericto make an archive of all the essential components- For example,
archives/generic.tar.xzwill contain all your generic components
- For example,
- Apply for a SWE position with Company ABC
- Update
common/companyinfo.tex - Put the job posting details in
job-desc. It’s nice to have a reference if you get a call after the posting gets dropped. - Tailor the cover and resume components for the position.
- Run
maketo generate both the resume and cover PDFs. - Run
archive.sh -c company-abc_sweto make an archive of all your company/position specific components
- Update
- Apply for a DevOps position with Company XYZ
- To get back to your generic components, run
archive.sh -x generic - Follow all the same steps then archive your new application with
archive.sh -c company-xyz_devops
- To get back to your generic components, run
After following those steps, you’ll have a great starting point to quickly apply for other Company ABC or XYZ positions. Let’s say you have a really nice DevOps cover letter and resume for Company XYZ, but you’re applying for a DevOps position with Company ABC.
./archive.sh -xrl company-xyz_devops # extract only resume and cover letter
./archive.sh -xi company-abc_swe # extract only info
Now you have the cover letter from Company XYZ in place with the info for
Company ABC. All you have to do is update the position name in
common/info/companyinfo.tex, run make and then you’re good to go!
Agentic Guardrails
It’s probably not a good idea to simply point an agent to a job posting and ask it to update your resume. You’d end up with a beautiful resume containing a ton of experience that you probably don’t have. It might be possible to get by in some sectors being untruthful, but definitely not tech/engineering.
To minimize hallucinations, I use a generic agents.md file to feed agents
basic repository information and instructions. To make my agents.md file
publicly available while keeping my personal details private, I point the agent to
the file me.md, which contains all the personal details that I might
want to include in any resume. The agents.md file instructs the agent to use
the me.md file as the sole source of information for updates.
I just started this process, so we’ll see how it goes. Feeding the agent strict guidelines seems to be working quite well with the top models. Please feel free to shoot me an email if you find any of this useful.
- caj