FOR LOTS OF APPLICANTS
Send every single applicant a nice, warm email with a link to a coding assessment[1]. Doesn't have to be anything particularly in-depth: just something that requires an hour or two's work from the candidate.
Result: all the people who put slapdash applications together will self-select out at this stage (you won't even hear back from them) and you don't have to send rejections. This will probably eliminate 95% of candidates right out of the gate for you, and when you have 500 applicants in a single month this is going to make your job a lot easier. You'll be left with 25 people who are genuinely interested and, depending on what you're looking for, you might have 10 that are worth interviewing.
IMPORTANT: for the relatively small number you reject at the assessment stage, you should send them some real, and reasonably detailed, feedback as to why. This will generally take around half an hour per applicant. People don't do this out of fear of getting into an argument with the candidate (and, of course, because they don't have time): in practice this seldom happens, and can be diffused quickly when it does. Most candidates appreciate the feedback and, key point, you won't start dehumanising applicants and turning yourself into a worse human being.
FOR FEW APPLICANTS
If you're not doing an up-front assessment, which we don't at the moment because we're a relatively unknown company so we want to make it as easy as possible for people to apply, send everyone a nice email inviting them to a 20-30 minute telescreen.
Your email should lay out the format of the telescreen: we'll spend some time finding out more about your experience, and do a screenshare (or Google Doc share) on a short programming task.
Result: all the lazy or uninterested applicants will again opt out, doing most of your work for you.
KEY POINTS
- In both cases you can focus your finite time and energy on the better candidates, rather than on sifting out the worst.
- You can give every applicant a more positive experience overall (think how many times you've heard the complaint, "I applied for X job and the company never even got back to me"). You also avoid ever having to send out those crappy two-line pro forma rejection emails that just about everyone hates.
- It'll keep you more positive and energetic because you're not spending loads of time having to be critical and negative about swathes of applications, and the people you do end up interacting with, you actually have the time to invest in ensuring that they have a positive experience, whether you offer them the job or not. This is hugely important because I think, of all the jobs I've done - and, granted, this does depend somewhat on your personality and temperament - recruitment is the one with the greatest capacity to turn you into the kind of person you wouldn't like very much (I realised it was happening for me when I did a long secondment in recruitment for a previous employer).
- By giving everyone a positive experience you'll gain a better reputation for your company, which should translate into attracting better candidates. Certainly, the other way, word travels, and if you offer a ghastly candidate experience people will be put off applying. If you're Google you can get away with it because so many great people want to work for you regardless of how drawn-out and overwrought the process is, so it doesn't matter that some great people will be put off because of the process (still I don't recommend it, and I question the value of all the hoop-jumping). If nobody's heard of you, making the process straightforward and pleasant is the way to go.
[1] This might sound cynical but you can totally automate this process, and if you're getting that many applicants it's probably worthwhile: just make sure the emails go out within business hours, and that there's at least a few hours lag between an application being submitted and the email response going out, so it feels like it's from a human being. Also, and this goes without saying: use the applicant's name. Lots of ATS's don't (or didn't) have APIs, but since you'll only need to target (say) Firefox, browser automation with something like Selenium can work really well here.