I haven’t read through all of what others have said here but I took a look at your site and resume and wanted to give some advice from my perspective. For course this is just my opinion so take it for what it’s worth.
I think the first thing to acknowledge is how rapidly the job search and interview process is evolving. Things look different now than even 6 months ago. Job search platforms like Glassdoor and companies like Lever have made it incredibly easy to apply quickly.
This opens the flood gates for companies causing even obscure startups to receive hundreds of applications for a single position. You can get an idea of the volume from sites like AngelList where you can see the number recent applications. Considering the variety of different channels, you can probably multiply those figures by some factor to get an approximate.
What this means for recruiters is that they must filter applicants aggressively. The company can only interview so many applicants and only a percentage of those interviewed will be from the outside non-referral channel. How do companies separate the signal from the noise on a resume? This is tough and my sense is that most companies don’t have a good method. That’s just because the resume is not sufficiently descriptive for the qualities that make a good engineer. It’s an old tool for a new challenge.
When you look at a resume, you’re looking for a signal that the individual would be a net positive contribution to the company. If a recruiter sees a CS degree from Stanford or prior experience at Google, that can say something. But what about the self-taught learners or people from different backgrounds? It’s difficult to make a case from the resume to interview these folks. A portfolio would be a good way to demonstrate skills, but from my experience unfortunately recruiters at this stage are seldom if ever taking the time to look at portfolios.
This sucks because I’m sure companies pass over a ton of great applicants this way. However, the cost of a false positive (hire bad engineer) is generally greater than the cost of a false negative (don’t hire good engineer). This is the way it is right now for some companies so we just have to accept that. Things will probably get better as new / existing companies develop ways to better connect applicants with opportunities. What that means for us now is that we need to think creatively and strategically about the job search process.
One approach would be to embrace the numbers game aspect and apply for many jobs across different platforms. You can expect a low conversion ratio since the method is the well worn path and non-differentiated. You may need to apply for 50 or 100 jobs to land an interview but eventually with effort, you will land a job.
Another approach would be to consider the job search on a more personal, human level. Think about ways that you can connect with the people that work for a company you are interested in. One way would be to reach out to a recruiter directly. Another possibly more effective method would be to reach out to a company engineer because you appreciated her insights on recent blog post or attend the company’s engineering panel and stick around to meet the engineers afterward.
In general, I think we’ll have success if we try to connect with people on a personal level. Companies after all are really just a collection of people aligned toward a common goal. Most people have a high antenna for passion, energy, and integrity. We’re just programmed that way. If we truly have a passion for software development, let’s seek out ways to meet with other people who share that passion. Sometimes that means pushing through the discomfort and awkwardness of say going solo to a hack-a-thon or a meetup on some topic of interest.
A couple of practical tips before I sign-off:
Iterate on your resume like you iterate on your portfolio. This is what the recruiter sees and probably all they see. Don’t hesitate to share your resume to others. Incorporate their feedback and polish the thing until it shines. Here’s a couple of specific tips: Add a couple of your best projects with short description and tools used, separate out your language / frameworks into proficiency ( i.e. Advanced (3+ yrs), Intermediate (~2 yrs), Beginner (1 yr), Novice(<1yr), when you list your bullets under experience, list what you did AND how that led to a positive outcome for the business / customer. A lot of people leave out that second part.
Set clear goals in terms of your application efforts and hold yourself to them. Keep a spreadsheet that tracks your process. Come up with an attainable number of companies to apply for each week or day. Studies show that if people overextend your initial commitment, they are more likely to fail and give up. Humans are habit forming machines and if you can get in a habit of applying and tracking it’s easy to keep up. Within a few weeks, you will turn into a battle hardened application warrior.
Invest time every day in algorithm practice. With sustained practice over a couple of months you will gain confidence and competence in them. It’s hard to get an interview for the reasons discussed so when you do get one, you want to get in there make heads spin and light up the whiteboard. By the way, there are some opportunities popping up through these algorithm practice sites that just might get you an interview if you get really good.
Don’t underestimate the value of the human connection. Seeing your eyes light up as you walk someone through solving a tough programming challenge speaks volumes more than the words on a resume. When you come from a place of genuine passion, it shows clear as day. Then the opportunities start coming to you. Keep going. Keep taking shots on goal and you will score.