Software Job Strategy Guide
This article is about what I learned while applying to backend/machine learning roles. I took a “shotgun” approach to applications, which is contrary to what many other people recommend. For example, it’s often suggested that you use informational interviews and networking events to get warmer contacts. Others stress the importance of building a brand, or at least a nice profile that is able to attract a steady stream of inbound recruiters. I can’t say which approach is better or worse for you, but if you do take the brute force approach, here are some tips on how to do that. Of course, you can also do a combination of approaches. It’s always good to experiment, and ultimately the interview process will end up being the same once you’ve cleared the early stages.
This article covers high level strategy and mindset; there are many other resources on how to do technical interviews so there’s not really any point in my writing another one. I’ve also added some links which I’ve found to be very helpful. I’ve also included some books, though I’ve only skimmed them.
Overall Strategy: The Funnel
There are practically an infinite number of jobs to apply for, especially since you can re-apply every 3-6 months. This means that you can’t apply for every job at 100% effort. The goal is to optimize the reward/effort ratio. You do this by dropping out of an application whenever it seems not worth it.
Failing/dropping early is better than failing/dropping late, because it takes less effort. If you want to get practice for the late stages, it may be worth staying in the process even if you don’t expect to accept the offer.
you want easy-to-spam applications. This means: no cover letters, no ”why do you want to work here” sections, no filling out multi-page applications/signing into ATS portals. Try to skip the EEO parts too.
dump recruiters who are annoying to deal with, take forever, reschedule a lot, or no-show you. These are signs you’ll probably be rejected anyway.
don’t invest more effort into the application versus what the other side is investing. Many companies are willing to waste tons of your time and give little to nothing in return, so beware. This means: never do projects before speaking to the hiring manager. I recommend against doing projects even if it’s later in the process. Some people have claimed success in talking their way out of the project (“my resume and experience speaks for itself”); it’s worth a try and there’s no loss if you’re not going to do the project anyway.
doing automated coding challenges before talking to the hiring manager is up to you. I can do LeetCode style challenges pretty quickly, and more practice is always good, so I personally don’t mind doing those, but anything that takes longer than say ~15 minutes is questionable.
the more extreme version is to always tell the recruiter/hiring manager that you’re expecting/received offers, either hoping, or explicitly asking, to skip as many steps as possible.
Where to look:
Triplebyte: 4 stars. I got 3 offers out of 20 accepted applications out of 90 applications. It’s easy to spam applications (they limit applications per day to ~25).
Angel.co: 2 stars. I applied to over 200 places and did not get any offers (only 1 onsite). It can be hard to spam applications as the form differs from company to company and some require you to write a short cover letter.
Indeed: 3 stars. The application has gotten better since a few years ago but it’s still a bit messy and the process is not consistent between companies.
Hired.com: 4 stars: Companies reach out to you, so it’s not much effort.
LinkedIn: 3 stars. I’m not particularly a fan of the job board. It’s good to have an updated LinkedIn and to set your profile to active, though, to get inbound recruiters.
look up individual companies you’re aware of or just search for companies and click through to their career page. A lot of the application pages are pretty streamlined.
I’ve had a lot of problems with getting ghosted by FAANG recruiters in the early stages. A friend said their solution was to message a dozen recruiters at the company until somebody picked up their application (and they got hired in the end).
unaffiliated recruiters are useless. They don’t have an “in'' with any company, won’t invest much effort into you, and don’t even know much about the roles they’re trying to fill, even if they specialize in the area.
Ideally you should be able to do medium-level problems consistently. Companies usually don’t ask hard-level problems and if they do you should just accept you got unlucky that time. It’s also not worth trying to target a specific company’s problems, because they often change up their problem set to avoid this.
There’s a tradeoff between spending more time interviewing vs. grinding LeetCode. You may want to spend more time interviewing so that you get used to performing under pressure and having to communicate with the interviewer, rather than just practicing the pure problem-solving aspect of LeetCode.
How to write your resume: Seriously, read the link.
Read patio11 and Gergely’s threads:
Gergely Orosz @GergelyOroszAn eng created a fake CV with Instagram, Zillow, LinkedIn, Microsoft and Berkeley on it, all details being nonsense. Got 60% response rate. Reddit is going wild. Me, as a hiring manager: what is surprising about any of this. It’s exactly how recruiting works. Let me explain: https://t.co/FVaFUiPtYG
The resume is fundamentally about meeting the requirements of the job, not about showcasing yourself. Many resume reviewers/workshops will get this wrong because they see your resume and say “well, this seems reasonable” which may be true but your resume is probably not calibrated properly to the roles you’re applying for. Ideally you would tailor the resume to each specific opening but that’s too much work. So you want to sample several openings for the same type of role and then target the average of those.
If you’re interested in a variety of job roles, or if you want to be more precise in targeting each niche in a given role, I recommend having separate resumes for each role/niche. I’ve never had good experiences when telling recruiters I’m open to multiple roles. By having separate resumes, each one looks focused and relevant for the job that you’re applying to, and doesn’t prevent you from applying for other roles. It helps to have a “master” resume that lists everything that is professionally relevant. You can then copy and paste sections, then customize by changing the job descriptions to emphasize the most relevant parts, etc.
A rule of thumb is that resumes are 90% about satisfying the recruiter, who is mostly just skimming for keywords and brand names. The remaining 10% is to give some fodder for conversation for later stage interviews.
How to write a job description:
Write out all the things you did, even if your involvement/effort was actually rather minor. For example, if you sat on a call with a client for 15 minutes once, you can write down that you “met with clients to [figure out some strategic/business/product goal]“.
You want to demonstrate that you’re a team player/leader, you have some business/product/impact acumen, you are proficient with the relevant technologies, you’re able to meet unexpected challenges, etc. Rewrite each line to make sure that it communicates at least one relevant attribute, or delete it if it just isn’t relevant at all.
Rewrite each line in order to make it so it’s easy for somebody to skim, and make sure it uses the most popular/recognizable buzzwords rather than more obscure terms. Remember, recruiters only know these words on a superficial level.
Other tips for resumes:
don’t do projects or open source work in order to improve your resume (note I’m not criticizing either doing these things or writing them on your resume). They’re not going to take the time to click through your github/website and look at your code. Similarly, making career decisions to “strengthen your resume” doesn’t make sense, because having a high resume acceptance rate doesn’t save you that much time versus, say, having a high interview pass rate. In general, presentation matters way more than actual content, and is therefore the more efficient way to improve your resume.
don’t lie about employment dates or anything that can be definitively disproved, as this can potentially trip you up during a background check. If you want to avoid things like mentioning that you were at a job for less than a year, you can just write the years you were at a job. Fudging the job title a bit is probably fine, especially if you had a hybrid role.
cover gaps in employment or a job you don’t want to list with side projects/consulting gigs.
background checks do not cover things that you omitted from your resume. So, omit all the negatives, and don’t bring them up during interviews (unless it’s a question like what your weakness is or a time you overcame adversity; the answer is all about your ability to spin).
if you’re paranoid - a good trait to have - you can ask employment history sites such as The Work Number to remove your data.
Logistical/Behavioral Questions/Early screen:
I’ve usually found that when the recruiter is asking about if I want to apply for a variety of positions (i.e. ML vs DS or DS vs DE vs Backend) or apply for a different opening, that this is a very bad sign. If they’re asking me if I’m leaning towards one type of role or another, I find the best response is to just go with the one that they seem to have me pegged as already.
I like to have the job app/company website/LinkedIn page of the interviewer open, especially because I’m sometimes too lazy to read up much about the company beforehand. Parroting words from the job app page can be highly effective because early stage recruiters are basically keyword detectors. It also helps avoid asking questions that you should have known from reading the page.
always have the best possible explanation: Why do you want to work at X company? Say some mix of something about growing in your career and describe the company and how you think it’s cool. Don’t say that you’re changing jobs out of necessity, because you’re getting fired, etc.. Why do you have a job gap? Don’t have a job gap. Having a good excuse like family/medical issues isn’t as good as not needing an excuse in the first place.
it’s important to ask questions about the company to show interest. Unfortunately, this takes effort and actual interest, which I may not always have. So if I don’t really have anything else to talk about, I usually ask technical questions about tech stack or team composition/workflow to the recruiter because they usually can’t answer it and because it’s unlikely to have been covered fully in the job app material. Then I ask the HM again and that’s the first time it’s answered. I like to ask the engineers about themselves and what they think about the company, etc. This way you can’t be blamed for asking the same question twice. This is definitely an approach that could be improved on; sometimes I blank on questions because the usual ones don’t seem appropriate. And eventually you want to interview with companies that you’re actually interested in!
asking about things like WLB or contentious policies can be hit or miss, because caring about it may make you look like a less dedicated/exploitable worker (this can be a good thing if you’re a strong hire and you want to establish boundaries), and because you may not get an accurate answer. If it’s a binary dealbreaker type of question, you should definitely ask, since presumably either they have the undesired policy, which you really want to be aware of, or they don’t and therefore shouldn’t care that you care. Otherwise you’ll have to stick with glassdoor reviews, etc.
be ready for salary questions. It’s good to ask for a range and usually interviewers will give it. Do whatever you can to avoid giving any numbers about anything (i.e. range, past salary) or agreeing about the numbers they give, until you get a written offer. This gives you space to work on a counteroffer.
it helps to be willing to walk away or be able to point to competing offers. Of course, great negotiators don’t use their BATNA/outside option as a crutch. They’d rather point out how much value they can provide or how scarce their talent is.
at the very minimum, ask for 10% more. Consider the risk of things going badly as the price of experience/practice, or to build emotional character. Remember that companies usually expect you to negotiate.
I personally value startup equity pretty low. You should be aware that fundraising valuations are inflated because investors receive preferred shares, whereas you would receive common shares. Pricing in growth is even worse because you’re essentially buying in at a higher valuation than investors.
for larger companies, read up on levels.fyi, glassdoor, teamblind.com, etc. Salary levels and companies’ offer strategies are always changing so make sure the data you’re getting is as recent as possible, and relevant to your level, role, location, and so on. But don’t break the other rules of negotiation on the basis of outside data - you might still be able to do better.
the cliche “confidence is everything” is true. Sounding uncertain, no matter how honest or correct the underlying words, makes you sound unreliable, whereas if you sound confident, many mistakes can be forgiven, or not noticed.
boredom = confidence. That is, it comes off as confidence, and helps quell anxiety, so embrace the attitude and mannerisms of boredom.
treat the interview process as an end in itself. Don’t just treat it as a necessary evil (which is at least better than giving up). It IS your job. Being good at interviewing gives you a stronger market position just as much (probably more) as being good at the work itself. Switching jobs is often the way to get promoted more quickly and get paid more. It also allows you to take more risk and be pickier about jobs, as you don’t have as much to fear about losing/quitting a particular job.
trust the process. You can get a lot better just through trial and error and practice. At the same time, there will be setbacks, and it will feel like you are back to square one when you get rejected. So prepare for the process to take a while. It’s usually better to keep your old job while searching.
Don’t take things personally. If you’re feeling crushed after a rejection, think about why that is and try to adjust appropriately for next time. For example:
did you spend disproportionate amounts of effort versus what the other side did?
are you applying at a sufficient rate so that a single rejection isn’t a significant setback?
did the recruiter hype your chances up too much? Don’t trust recruiters; always remember that job searching is a high volume exercise for both sides.
In any case, that’s all I have. I hope you find this useful. Good luck!