Over the past five years as part of my job I've been involved in reviewing and interviewing applicants for various software development positions and have seen applications greatly varying in quality. In this post I aim to give you few advices on every stage of application process including finding the job offer, preparation, CV, covering letter, the interview and negotiations. Hope it helps you get your dream job!
Establish your online presence
It's very important nowadays to have some sort of online presence, ideally you should have a solid profile on Github, a technical blog and/or portfolio of previous work and an online CV. Bear in mind at some point in the process your application will be reviewed by someone technical, most likely a developer much like yourself. That person will look for reasons to invite you for an interview, so you should provide him or her with links to your best work. Also, expect that your name will be googled, so it's worth checking what results show up.
Now, I realise it's quite time-consuming to setup an online presence from scratch, and yes you will need to put hours into this. That being said you don't need to go write a new jQuery only to put it on Github - a couple of small contributions to some open-source packages and/or a tiny, specific-use-case library will do just fine. For your CV you can just use one of the existing online CV providers or even better just host a simple, static html page on Github Pages. If you want to make it fancy, there are some really high quality and free templates out there that you can use (like this one for developers and more generic CV).
Finding your dream job
Searching for software developer openings can be frustrating but I find that some places are better to look for high quality job openings than others. Firstly, I would recommend to avoid generic job search sites - ads there are usually created by recruiters who might or might not have the job they advertise for. Also, bear in mind registering on such pages will result with whole lot of spam coming your way. LinkedIn is slightly better but not by much. I've found that usually good quality, non-spammy job openings are posted on Stack Overflow Careers. You don't need to have a high reputation account to apply for these, chances are your profile won't ever be looked at! Another good source of advertised vacancies is a monthly who is hiring thread on Hacker News; there's also a half-decent search engine for it. Finally it's worth just applying directly to companies you would like to work for - they may have openings advertised only on their page or even not advertised at all. This is especially true for the big players (Google/Facebook etc.) where there might be a special way to apply for a developer position by finding a secret clue hidden on company's page.
Writing a CV
Over the few years I've been helping with recruitment as a developer I've seen an amazing amount of really shit CVs. I think it might be because there are many "how to write a CV" guides out there really don't apply to our industry. I'm not going to write a full guide but instead mention just few dos and dont's.
- Keep your CV really, really short: Single page is ideal, two pages is maximum.
- Avoid duplication - it's infuriating to read that you know Java and Java 5 and Java 6 and JRE and Spring and Struts and whatever else. Just say you know your way around Java.
- Don't list everything you know: the fact that you have experience administrating Linux/Windows servers is worth mentioning but the fact that you know DOS is probably not.
- When listing skills, it's worth adding how much experience you have with each of the things mentioned - either in terms of years of professional experience or in some sort of self-graded system. The latter is more risky.
- Mention responsibilities in previous roles but keep it short and simple. Ideally use a timeline format with the most recent position on the top.
- If applying for entry-level job add details of your educational background including short summary of your final year project/thesis, otherwise keep this section to the bare minimum.
- Include links to your Github profile, online CV, blog, portfolio etc. If you sent your CV online, make sure these links are clickable.
- If you ever email/upload your CV anywhere, use PDF if possible.
It's also worth mentioning that the person who actually decides whether to invite you for an interview or not spends much less time reading your CV than you would like. It's actually more like skimming through.
Covering letter, or more likely email, is a crucial part of your application. You should always write job-specific letters and avoid using anything generic, though obviously having a template you follow/adapt for each job is fine. In your letter you should convince the other person why they should invite you for an interview. Read through the job post and see what they're after, then try to include examples of similar experience in your covering letter. For example if a job posting says they're looking for someone to take over their Angular-based front-end, make sure you mention something similar you've worked on - even if you've worked with ReactJS and not Angular - it's still relevant. Also try to guess what other skills might be useful for this job: perhaps they search for a Django Developer as well and you happen to be a full-stack developer who can write Python. Or maybe you're applying to join a small startup and you could help them with AWS. Covering letter is a place where you can mention these additional skills.
It's worth tracking all your applications in a simple spreadsheet - use one row per position and include the name of the company, url where you've seen the position advertised, skills required and date applied. Then you can track how many non-automated replies you've received (recruiters don't count) - don't be surprised if this is much lower than you would expect - I would say 50% is a ratio to aim for and anything above means you're doing good. That's just how things are, unfortunately.
One more thing that's crucial for your application strategy: chase unresponsive companies. Once you've applied and waited few days - or maybe a couple of weeks - make sure you follow-up with a quick "hi, how are you, have you got my application?" email. If you're applying to many places at once (and you should), having a spreadsheet to track your applications makes it much easier to see which ones to follow up on. It's actually quite surprising to see how many companies only reply to you after you've chased them up - not sure whether it's some sort of tactic or just a tendency for applications to get lost.
Even if you know your area well, it's worth checking out questions other people have experienced, here are some examples:
- Front-end Job Interview Questions - nice and thorough collection
- Maksim Noy's list of interview questions - C/C++, Networking and few puzzles
- Awesome Interview Questions
- iOS Developer and Designer Interview Questions Problems on Leetcode - if you ever feel up for a challenge
- 140 Google Interview Questions
Also try to prepare for non-technical questions, some of them are really silly but often take you by surprise, here are some examples:
- The Mother of All Interview Questions
- Tell me about a time you've had to manage multiple conflicting deadlines. How did you prioritise?
- Give an example where you've overcame a problem?
- What book would you recommend to our team here?
- Where do you see yourself in 3/5/10 years?
Finally, something that most people don't do: negotiate your salary - see how much the company is willing to pay. Don't be afraid to ask for more - as long as you don't go overboard and don't blackmail them - no one will retract an offer after you ask for more. It's always worth asking even if you're happy with what's on the table, you can just take it afterwards.Hope this was helpful - good luck with your hunt! If you have any questions/comments/suggestions fire them to firstname.lastname@example.org, ping me on twitter or just use the comment section below.